資源描述:
《Spartan-6系列FPGA UART數(shù)據(jù)接收模塊總結(jié).pdf》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Spartan-6系列FPGA的UART數(shù)據(jù)接收模塊總結(jié)一、準(zhǔn)備工作:1.UART通信協(xié)議(關(guān)鍵);2.開始的第一步,檢測到RX數(shù)據(jù)線上下降沿(起始位);3.調(diào)試助手發(fā)送數(shù)據(jù)的波特率設(shè)置,進而設(shè)計采樣頻率;4.對接收的數(shù)據(jù)進行處理,去頭去尾只留中間數(shù)據(jù)位(8位);5.對接收到的數(shù)據(jù)通過LED燈進行驗證。UART通信協(xié)議(一幀11位):圖1-1UART通信協(xié)議原理示意圖二、功能框圖:RXDetect_moduleH2L_Sig檢測RX下降沿RX_En_Sigrx_controlcontrol_moduleRX_D
2、one_Sig_moduleCount_Sig數(shù)據(jù)接收總控制模控制模塊RX_Data塊BPS_moduleBPS_CLK數(shù)據(jù)采集脈沖模塊LED燈rx_module圖1-2各模塊信息傳輸示意圖1.詳細(xì)過程說明:?瞭望員(detect_module):正在安逸的曬太陽,突然警報拉響(detect_module檢測到下降沿),瞭望員馬上升旗放狼煙(輸出H2L_Sig(HightoLow下降沿)為高),告訴后方人員有數(shù)據(jù)來襲(數(shù)據(jù)采取單個有序的進攻戰(zhàn)法),準(zhǔn)備好作戰(zhàn)(數(shù)據(jù)接受工作)。?戰(zhàn)地指揮中心(rx_control
3、_module):一旦看到升旗放狼煙,指揮中心馬上給第一團發(fā)指令(Count_Sig),?情報中心(數(shù)據(jù)采集脈沖模塊BPS_module):接收到指令后立即偵查敵情(數(shù)據(jù)傳輸波特率),并開始固定周期的不間斷掃描,以匹配對方來襲速度(波特率),一旦發(fā)現(xiàn)目標(biāo),就給戰(zhàn)地指揮中心發(fā)信號(BPS_CLK),然后戰(zhàn)地指揮中心指揮狙擊手逐個殲滅,并把殲滅和捕獲的數(shù)據(jù)記錄下來(存入RX_Data中)。?總指揮(control_module):戰(zhàn)爭結(jié)束后,戰(zhàn)地指揮中心向總指揮匯報指令(RX_Done_Sig),把殲滅和捕獲的數(shù)據(jù)
4、(RX_Data)上報給總指揮,然后總指揮根據(jù)數(shù)據(jù)(RX_Data)控制LED燈,以表嘉獎。戰(zhàn)地指揮中心服從總指揮,只有總指揮下達作戰(zhàn)命令(RX_En_Sig)后,戰(zhàn)地指揮中心才可以指揮狙擊手殲滅來襲數(shù)據(jù)。2.各模塊層級結(jié)構(gòu)圖如下:detect_module子模塊u0rx_moudelbps_module子模塊u1子模塊u1rx_moudel_demo頂層模塊rx_control_module子模塊u2control_module子模塊u2圖1-3各模塊層級結(jié)構(gòu)圖3.開發(fā)環(huán)境為ISE14.4,各模塊程序代碼如下
5、:?rx_moudel模塊程序代碼?etect_module模塊程序代碼(u0)?bps_module模塊程序代碼(u1)?rx_control_module模塊程序代碼(u2)?control_module模塊程序代碼?UCF配置文件(Spartan-6XC6SLX16-2CSG324,黑金AX516開發(fā)板)4.程序理解:程序代碼不再一一解釋,根據(jù)功能框圖,如果有Verilog基礎(chǔ),看懂代碼應(yīng)該不會有什么問題,下面主要討論一下,在學(xué)習(xí)的時候,一直困擾我的一個問題。兩個核心問題:一是assign和always并
6、行的理解;二是assign語句中的信號發(fā)生變化后,always語句中相應(yīng)信號的語句是在同一周期內(nèi)執(zhí)行,還是在下一個周期內(nèi)執(zhí)行?關(guān)于“并行”的理解,和我們平時用的C語言順序執(zhí)行的過程正好是相對的,在同一個時鐘周期內(nèi),一旦敏感信號有效,所有由同一個敏感信號控制的的always語句塊都是同時執(zhí)行的。例如:以下兩個always語句塊,當(dāng)檢測到CLK的上升沿和RSTn的下降沿時,兩個always語句塊同時觸發(fā),里面的begin-end語句塊將同時執(zhí)行。二是assign語句中的信號發(fā)生變化后,always語句中相應(yīng)信號的語
7、句是在同一周期內(nèi)執(zhí)行,還是在下一個周期內(nèi)執(zhí)行?例如:U1和U2兩個模塊程序,一旦檢測到CLK的上升沿,U1和U2模塊中的兩個always語句塊同時執(zhí)行,U1模塊中“Count_BPS<=Count_BPS+1”就會加1,當(dāng)Count_BPS=2604時,BPS_CLK=1,Count_BPS=2604和BPS_CLK=1是在同一個周期內(nèi)進行的。而U2模塊中“1:if(BPS_CLK)”語句也是在同一周期內(nèi)并行執(zhí)行判斷條件的,但是判斷條件BPS_CLK=0,并不是等于1??梢赃@樣理解,并行語句的賦值,先計算右側(cè)表
8、達式的值,是在這個時鐘周期結(jié)束的時候才賦給左側(cè)的變量,對右側(cè)變量值的引用相當(dāng)于“延遲”一個時鐘周期。以上為自己學(xué)習(xí)過程中的理解,程序等參考《黑金Verilog那些事兒系列教程》資料,如有錯誤,歡迎指正或留言,筆者將不勝感激!