国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FPGA協(xié)議篇:UART通信及Verilog最易懂實現(xiàn)方式/通用于任何工程/帶握手信號 ----UART_TX

這篇具有很好參考價值的文章主要介紹了FPGA協(xié)議篇:UART通信及Verilog最易懂實現(xiàn)方式/通用于任何工程/帶握手信號 ----UART_TX。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

概述:

????????UART(Universal Asynchronous Receiver/Transmitter)是一種通用的異步收發(fā)傳輸協(xié)議,用于在計算機系統(tǒng)和外部設(shè)備之間進行串行數(shù)據(jù)傳輸。UART 協(xié)議定義了數(shù)據(jù)的傳輸格式和通信規(guī)則,使得不同設(shè)備之間能夠進行可靠的數(shù)據(jù)交換。

首先先把設(shè)計代碼放到這里:UART_TX完整代碼下載

以下是 UART 協(xié)議的幾個關(guān)鍵要素:

? ? ? ? 1、異步傳輸:UART 使用異步傳輸方式,不需要共享時鐘信號來進行數(shù)據(jù)同步。發(fā)送端和接收端通過起始位、數(shù)據(jù)位和停止位進行數(shù)據(jù)的有效傳輸。

????????2、起始位和停止位:在每個數(shù)據(jù)字節(jié)的開始之前,UART 使用一個起始位來標識傳輸?shù)钠鹗键c。而在數(shù)據(jù)字節(jié)的末尾,UART 添加一個或多個停止位以標識傳輸?shù)慕Y(jié)束。起始位和停止位的數(shù)量可以根據(jù)協(xié)議和設(shè)置進行配置。

????????3、數(shù)據(jù)位:UART 協(xié)議規(guī)定了數(shù)據(jù)位的傳輸順序和位數(shù)。數(shù)據(jù)位是實際傳輸?shù)臄?shù)據(jù)位數(shù),典型的位數(shù)為 5、6、7 或 8 位,具體取決于協(xié)議和配置。重要的一點:UART的傳輸數(shù)據(jù)為:

????????4、波特率:UART 通信的波特率指的是每秒傳輸?shù)奈粩?shù)。發(fā)送端和接收端必須以相同的波特率進行通信,以確保數(shù)據(jù)的正確傳輸。常見的波特率包括 9600、115200 等。

????????5、校驗位(可選):為了增加數(shù)據(jù)傳輸?shù)目煽啃?,UART 還可以使用校驗位進行錯誤檢測。校驗位是在數(shù)據(jù)位之后添加的一個位,用于驗證數(shù)據(jù)的準確性。常見的校驗方式包括奇校驗和偶校驗。

UART 協(xié)議在許多應(yīng)用中得到廣泛應(yīng)用,例如串口通信、嵌入式系統(tǒng)、傳感器和外圍設(shè)備等。它提供了一種簡單而有效的數(shù)據(jù)傳輸方式,允許設(shè)備之間進行可靠的異步通信。

本章將介紹如何使用Verilog實現(xiàn)UART發(fā)送部分并進行下板驗證:

一、UART構(gòu)成

根據(jù)概述可以簡單的提取出來,如下圖:UART接受傳輸?shù)臄?shù)據(jù)格式:

FPGA協(xié)議篇:UART通信及Verilog最易懂實現(xiàn)方式/通用于任何工程/帶握手信號 ----UART_TX,FPGA協(xié)議,fpga開發(fā),fpga,信息與通信

講解幾個關(guān)鍵點:

? ? ? ? 1、UART傳輸數(shù)據(jù)順序:

????????????????LSB → MSB,從最低位到最高位

? ? ? ? ? ? ? ? 例如:d=8'b1011_0011? ? :傳輸順序:d[0],d[1] ....... d[6],d[7]

? ? ? ? 2、通信方式:

????????????????異步通信:“不需要額外的時鐘線進行數(shù)據(jù)的同步傳輸”

????????????????全雙工傳輸:UART 只需要兩條信號線:RXD?和?TXD ,可以同時進行傳輸

? ? ? ? 3、傳輸數(shù)據(jù)速率:

????????????????采用波特率作為傳輸數(shù)據(jù)的速率(每秒傳輸二進制位數(shù)的多少),單位:BPS,常用波特率有9600、14400、38400、57600...115200。

????????例如波特率=115200,則它傳輸一位數(shù)據(jù)位(1bit)的時間為1/115200s

? ? ? ? 兩個設(shè)備通過UART傳輸?shù)臅r候,必須是相同波特率。

二、時鐘與波特率的計算

? ? ? ? 涉及到兩個量:

? ? ? ? 1、FPGA時鐘主頻率:FPGA 主頻指的是 FPGA 設(shè)備上時鐘信號的頻率,通常以赫茲(Hz)為單位。

? ? ? ? 2、波特率:波特率指的是數(shù)據(jù)傳輸?shù)乃俾?,以位每秒(bps)為單位。

根據(jù)這兩個量,可以計算出數(shù)據(jù)傳輸?shù)臅r間,所需要的時鐘周期:、

? ? ? ? 例如:時鐘頻率100M,波特率115200bps

? ? ? ? ? ? ? ? bps_cnt = 100_000_000 / 9600 = 868?

? ? ? ? 可以得出:FPGA傳輸數(shù)據(jù),需要翻轉(zhuǎn)868個時鐘周期,才可以傳輸一位數(shù)據(jù)。

簡單一點就是時鐘頻率除以波特率就是需要的計數(shù)。

三、Verilog實現(xiàn)

1、UART_TX設(shè)計框圖?????????????

FPGA協(xié)議篇:UART通信及Verilog最易懂實現(xiàn)方式/通用于任何工程/帶握手信號 ----UART_TX,FPGA協(xié)議,fpga開發(fā),fpga,信息與通信

端口名稱 端口屬性 介紹
i_clk 輸入端口 FPGA輸入時鐘
i_reset 輸入端口 FPGA輸入復(fù)位,高有效
i_data[7:0] 輸入端口

UART發(fā)送數(shù)據(jù)

i_valid 輸入端口 輸入數(shù)據(jù)有效
o_ready 輸出端口 數(shù)據(jù)傳輸完成
o_txd 輸出端口 UART輸出接口

部分代碼:

module uart_tx #(
	parameter CHECK_BIT = "None",       //“None”無校驗  “Odd”奇校驗  “Even”偶校驗
	parameter BPS       = 115200,       //系統(tǒng)波特率 
	parameter CLK       = 25_000_000,   //系統(tǒng)時鐘頻率 hz 
	parameter DATA_BIT  = 8,            //數(shù)據(jù)位(6、7、8)
	parameter STOP_BIT  = 1             //停止位 (1、2、3... 整數(shù))
)(
	input	i_reset,
	input	i_clk,
	input	[DATA_BIT-1:0] i_data,
	input	i_valid,
	output	reg o_ready,
	output  reg o_txd
);

endmodule

2、UART_TX狀態(tài)轉(zhuǎn)移圖

?FPGA協(xié)議篇:UART通信及Verilog最易懂實現(xiàn)方式/通用于任何工程/帶握手信號 ----UART_TX,FPGA協(xié)議,fpga開發(fā),fpga,信息與通信

代碼中采用三段式狀態(tài)機:

IDLE:空閑狀態(tài),無數(shù)據(jù)傳輸,輸出高電平,當i_valid信號到來時跳轉(zhuǎn)到START狀態(tài);

START:起始位,無數(shù)據(jù)傳輸,輸出低電平為 ,無條件跳轉(zhuǎn)至DATA狀態(tài);

DATA:數(shù)據(jù)位,進行數(shù)據(jù)傳輸,先發(fā)送低比特,根據(jù)數(shù)據(jù)輸出高低電平,假如有校驗位,跳到CHECK狀態(tài),假如數(shù)據(jù)傳輸不設(shè)校驗位,跳轉(zhuǎn)到STOP狀態(tài);

CHECK:奇偶校驗位處理狀態(tài),根據(jù)CHECK_BIT參數(shù)進行添加校驗位值。

STOP:停止位狀態(tài),輸出STOP_BIT個高電平。?

部分代碼:

 reg [3:0] c_state, n_state;
    parameter   IDLE    = 0,
                STATE   = 1,
                DATA    = 2,
                CHECK   = 3,
                STOP    = 4;

///* FSM *3 *//
    always @(posedge i_clk, posedge i_reset) begin
        if (i_reset)
            c_state <= 0;
        else
            c_state <= n_state;
    end

    always @(*) begin
        case (c_state)
            IDLE    :   begin
                            if (tx_en && i_valid)
                                n_state = STATE;
                            else
                                n_state = IDLE;
            end  

            STATE   :   begin
                            if (tx_en)
                                n_state = DATA; 
                            else
                                n_state = STATE;
            end

            DATA    :   begin
                            if (tx_en && tx_cnt >= DATA_BIT && CHECK_BIT == "None")
                                n_state = STOP;
                            else if (tx_en && tx_cnt >= DATA_BIT)
                                n_state = CHECK;
                            else
                                n_state = DATA;
            end 

            CHECK   :   begin
                            if (tx_en)
                                n_state = STOP;
                            else
                                n_state = CHECK;
            end

            STOP    :   begin
                            if (tx_en && stop_cnt == 1)
                                n_state = IDLE;
                            else
                                n_state = STOP;
            end
            
            default :   n_state = 0;

        endcase
    end

3、發(fā)送數(shù)據(jù)格式

此模塊用于輔助大家更好的運用UART_TX模塊,展示了握手信號的工作方式,以及串口發(fā)送模塊的調(diào)用方法。

為了方便大家理解,給大家畫了一個發(fā)送數(shù)據(jù)的時序圖:

FPGA協(xié)議篇:UART通信及Verilog最易懂實現(xiàn)方式/通用于任何工程/帶握手信號 ----UART_TX,FPGA協(xié)議,fpga開發(fā),fpga,信息與通信

在數(shù)據(jù)發(fā)送過程中,握手信號的細致描述如下:(接收端即UART_TX模塊)

初始狀態(tài):發(fā)送端準備好發(fā)送數(shù)據(jù),并將VALID信號置高,表示數(shù)據(jù)有效。接收端處于等待狀態(tài),READY信號為低電平,表示接收端尚未準備好接收數(shù)據(jù)。

數(shù)據(jù)傳輸開始:發(fā)送端在VALID信號置高后,開始傳輸數(shù)據(jù)。發(fā)送端將要發(fā)送的數(shù)據(jù)值放置在DATA線上,并保持穩(wěn)定。VALID信號保持高電平,表示數(shù)據(jù)一直有效。

握手信號等待:接收端檢測到VALID信號置高后,開始等待READY信號的響應(yīng)。接收端會持續(xù)監(jiān)測READY信號狀態(tài),直到它被置高。

數(shù)據(jù)接收和響應(yīng):一旦接收端檢測到READY信號置高,它表示接收端已經(jīng)準備好接收數(shù)據(jù)。在READY信號置高后,發(fā)送端可以改變DATA的值,并且VALID信號也可以跟隨著改變。這表示發(fā)送端可以發(fā)送下一個數(shù)據(jù)。

握手信號完成:發(fā)送端發(fā)送數(shù)據(jù)后,繼續(xù)保持VALID信號的高電平,表示數(shù)據(jù)仍然有效。接收端在接收完數(shù)據(jù)后,如果準備好接收下一個數(shù)據(jù),則保持READY信號的高電平。這樣一個完整的握手信號周期就完成了。

通過這種握手信號的交互,發(fā)送端和接收端能夠進行同步的數(shù)據(jù)傳輸。VALID信號的高電平表示數(shù)據(jù)有效,READY信號的高電平表示接收端準備好接收數(shù)據(jù)。只有在READY信號置高后,發(fā)送端才能改變數(shù)據(jù)并發(fā)送下一個數(shù)據(jù)。

這種握手機制確保了數(shù)據(jù)的可靠傳輸,發(fā)送端和接收端在數(shù)據(jù)傳輸過程中能夠以協(xié)調(diào)的方式進行通信。

部分代碼:

module UART_tx_gen_data(
	input clk_a,
	input rst_n,
	output txd
);

	reg [7:0] temp_data;
	reg [7:0] tx_data;
	reg tx_valid;
	wire ready;


	reg [3:0] c_state, n_state;
	parameter S0 = 0,
				S1 = 1;

	uart_tx #(
	.CHECK_BIT ("None"	)	,       //“None”無校驗  “Odd”奇校驗  “Even”偶校驗
	.BPS       (115200	)	,       //系統(tǒng)波特率 
	.CLK       (25_000_000)	,   	//系統(tǒng)時鐘頻率 hz 
	.DATA_BIT  (8		)	,       //數(shù)據(jù)位(6、7、8)
	.STOP_BIT  (1       )   		//停止位
) TX (
	.i_reset(!rst_n),
	.i_clk(clk_a),
	.i_data(tx_data),
	.i_valid(tx_valid),
	.o_ready(ready),
	.o_txd(txd)
);

	always @(posedge clk_a, negedge rst_n) begin
		if (!rst_n)
			c_state <= 0;
		else 
			c_state <= n_state;
	end

四、下板驗證

通過上面兩個模塊,既可以對串口發(fā)送進行驗證,把UART_tx_gen_data置為頂層,然后對端口進行引腳約束,生成下載文件,然后下載到板卡:

FPGA協(xié)議篇:UART通信及Verilog最易懂實現(xiàn)方式/通用于任何工程/帶握手信號 ----UART_TX,FPGA協(xié)議,fpga開發(fā),fpga,信息與通信

同時打開串口調(diào)試助手,選擇波特率115200,數(shù)據(jù)位8,停止位1,校驗位none,按16進制顯示:

FPGA協(xié)議篇:UART通信及Verilog最易懂實現(xiàn)方式/通用于任何工程/帶握手信號 ----UART_TX,FPGA協(xié)議,fpga開發(fā),fpga,信息與通信

然后運行程序,即可在接收窗口收到連續(xù)變換的數(shù)據(jù):

FPGA協(xié)議篇:UART通信及Verilog最易懂實現(xiàn)方式/通用于任何工程/帶握手信號 ----UART_TX,FPGA協(xié)議,fpga開發(fā),fpga,信息與通信

這樣的話,此UART_TX設(shè)計已經(jīng)完全完成了,下一期將更新UART_RX的設(shè)計和講解。

如果感覺文章對您有用,麻煩三連支持一下,方便下次用到的時候,就可以快速找到我,非常感謝您的支持!?。?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-843664.html

到了這里,關(guān)于FPGA協(xié)議篇:UART通信及Verilog最易懂實現(xiàn)方式/通用于任何工程/帶握手信號 ----UART_TX的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【FPGA】FPGA實現(xiàn)UART串口通信回環(huán)

    【FPGA】FPGA實現(xiàn)UART串口通信回環(huán)

    關(guān)于UART協(xié)議的基礎(chǔ)理論部分已經(jīng)在上一篇文章中講述,不再重復(fù)介紹。 UART通信協(xié)議 本文主要介紹如何使用Verlilog編程,通過FPGA實現(xiàn)UART串口通信回環(huán)工程。在本工程中所使用的系統(tǒng)時鐘為50MHz,如果選擇115200的波特率進行數(shù)據(jù)傳輸,那么傳輸1bit所用的時鐘周期數(shù)就是50_000_

    2024年02月05日
    瀏覽(23)
  • FPGA實現(xiàn)UART通信(1)---發(fā)送數(shù)據(jù)

    FPGA實現(xiàn)UART通信(1)---發(fā)送數(shù)據(jù)

    1、基本概念 通用異步收發(fā)傳輸器,是一種異步收發(fā)傳輸器,在發(fā)送數(shù)據(jù)通過將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)進行傳輸,在接收數(shù)據(jù)時將串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)。 串行通信分為同步串行通信和異步串行通信。同步串行通信即需要時鐘的參與,通信雙方需要在同一時鐘的控制下,

    2024年02月04日
    瀏覽(20)
  • 【FPGA學習】狀態(tài)機實現(xiàn)UART通信

    【FPGA學習】狀態(tài)機實現(xiàn)UART通信

    ??在之前的文章中【FPGA學習】實例一、Cyclone IV串口通信(RS232)我們已經(jīng)能夠采用波形圖的方法,實現(xiàn)9600bps的Uart通信。近期筆者在整理了狀態(tài)機和計數(shù)器組合的設(shè)計方法以后,對狀態(tài)機的設(shè)計又有了新的感悟和體會,所以又把經(jīng)典的RS232協(xié)議拉出來當狀態(tài)機的例子練手了哈哈

    2023年04月11日
    瀏覽(19)
  • 【FPGA】UART串口通信——奇偶校驗實現(xiàn)

    【FPGA】UART串口通信——奇偶校驗實現(xiàn)

    奇偶校驗位是基于uart的數(shù)據(jù)上進行一個判斷 奇校驗:數(shù)據(jù)1個數(shù)為奇時,校驗為0,反之為1 偶校驗:數(shù)據(jù)0個數(shù)為偶時,校驗為0,反之為1 Uart回環(huán)在之前已經(jīng)實現(xiàn),現(xiàn)在需要基于uart增加一個奇偶校驗位的需求 uart及代碼:https://blog.csdn.net/weixin_59150966/article/details/128005066?spm=10

    2024年02月11日
    瀏覽(21)
  • FPGA-結(jié)合協(xié)議時序?qū)崿F(xiàn)UART收發(fā)器(一):UART協(xié)議、架構(gòu)規(guī)劃、框圖

    FPGA-結(jié)合協(xié)議時序?qū)崿F(xiàn)UART收發(fā)器(一):UART協(xié)議、架構(gòu)規(guī)劃、框圖

    記錄FPGA的UART學習筆記,以及一些細節(jié)處理,主要參考奇哥fpga學習資料。 本次UART主要采用計數(shù)器方法實現(xiàn),實現(xiàn)uart的穩(wěn)定性發(fā)送和接收功能,最后實現(xiàn)串口數(shù)據(jù)回環(huán)進行功能測試。 UART協(xié)議如圖。 包含:空閑位、起始位、數(shù)據(jù)位、校驗位、停止位、空閑位(一般沒有) 對于

    2024年02月08日
    瀏覽(23)
  • Verilog(1)UART串口通信

    Verilog(1)UART串口通信

    第一部分為uart串口通信的接收部分,用pc端虛擬串口來對其發(fā)送數(shù)據(jù)。 第三部分為uart串口通信的發(fā)送部分,用此部分對pc端虛擬串口發(fā)送數(shù)據(jù)。 第二部分loop,處理數(shù)據(jù),形成回環(huán),使發(fā)送部分有數(shù)據(jù)來源,以此來保證實驗的完成。 串口接收 :? 輸入:?sys_clk、sys_rst_n、u

    2024年02月03日
    瀏覽(19)
  • FPGA-結(jié)合協(xié)議時序?qū)崿F(xiàn)UART收發(fā)器(五):串口頂層模塊UART_TOP、例化PLL、UART_FIFO、uart_drive

    串口頂層模塊UART_TOP、例化PLL、UART_FIFO、uart_drive,功能實現(xiàn)。 對照代碼,串口發(fā)送模塊UART_TOP實現(xiàn)功能包括: PLL鎖相環(huán),實現(xiàn)穩(wěn)定系統(tǒng)輸入時鐘功能 UART_FIFO,數(shù)據(jù)先進先出,實現(xiàn)數(shù)據(jù)緩存功能,防止出現(xiàn)數(shù)據(jù)錯亂 w_clk_rst = ~w_system_pll_locked;保證復(fù)位電平是先高位再地位 r_use

    2024年02月08日
    瀏覽(34)
  • FPGA用verilog HDL實現(xiàn)串口通訊協(xié)議

    FPGA用verilog HDL實現(xiàn)串口通訊協(xié)議

    串口通信是一種通過串行傳輸數(shù)據(jù)的通信方式。它使用單個數(shù)據(jù)線將數(shù)據(jù)位逐個傳輸,而不是同時傳輸多個數(shù)據(jù)位。串口通信常用于連接計算機與外部設(shè)備,如打印機、調(diào)制解調(diào)器、傳感器等。 串口通信一般使用的是異步傳輸方式,即發(fā)送方和接收方的時鐘不同步。數(shù)據(jù)傳輸

    2024年02月05日
    瀏覽(33)
  • 【FPGA教程案例40】通信案例10——基于FPGA的簡易OFDM系統(tǒng)verilog實現(xiàn)

    FPGA教程目錄 MATLAB教程目錄 --------------------------------------------------------------------------------------- 目錄 1.軟件版本 2.OFDM原理 3.OFDM系統(tǒng)的verilog實現(xiàn)

    2024年02月12日
    瀏覽(31)
  • FPGA入門 —— FPGA UART 串口通信

    FPGA入門 —— FPGA UART 串口通信

    UART 通用異步收發(fā)傳輸器( Universal Asynchronous Receiver/Transmitter) ,通常稱作 UART。 UART 是一種通用的數(shù)據(jù)通信協(xié)議,也是異步串行通信口(串口)的總稱,它在發(fā)送數(shù)據(jù)時將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)來傳輸,在接收數(shù)據(jù)時將接收到的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)。 它包括了ch340、 RS232、

    2024年02月09日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包