VerilogRS232串口模塊實驗報告_第1頁
VerilogRS232串口模塊實驗報告_第2頁
VerilogRS232串口模塊實驗報告_第3頁
VerilogRS232串口模塊實驗報告_第4頁
VerilogRS232串口模塊實驗報告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、1 設計概述實驗功能:實現(xiàn)RS232的雙工通信。 實驗環(huán)境:1)硬件環(huán)境:PC機一臺、ml507PFGA開發(fā)套件;2)軟件環(huán)境:開發(fā)軟件ISE14.5、代碼編寫軟件Notepad+、仿真軟件Modelsim、調(diào)試軟件chipscope、串口調(diào)試工具。2 設計原理2.1 串行接口RS232工作原理串口用來連接FPGA和PC機,RS-232允許全雙工通信,即計算機在接收數(shù)據(jù)的同時可以發(fā)送數(shù)據(jù)。串口按位(bit)發(fā)送和接收字節(jié)。通常以8位數(shù)據(jù)為1組,先發(fā)送最低有效位,最后發(fā)送最高有效位。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時用另一根線接收數(shù)據(jù)。通信使用3根線完成

2、:(1)地線,(2)發(fā)送,(3)接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時在另一根線上接收數(shù)據(jù)。其他線用于握手,但不是必須的。數(shù)據(jù)的傳輸沒有時鐘信號,接收端必須采取某種方式,使之與接收數(shù)據(jù)同步。1)串行線纜的兩端先約定好串行傳輸?shù)膮?shù)(傳輸速度、傳輸格式等);2)當沒有數(shù)據(jù)傳輸?shù)臅r候,發(fā)送端向數(shù)據(jù)線上發(fā)送"1";3)每傳輸一個字節(jié)之前,發(fā)送端先發(fā)送一個"0"來表示傳輸已經(jīng)開始,這樣接收端便可以知道有數(shù)據(jù)到來了;圖1 數(shù)據(jù)幀結(jié)構(gòu)4)開始傳輸后,數(shù)據(jù)以約定的速度和格式傳輸,所以接收端可以與之同步;5)在串口總線上高電平是默認的狀態(tài),當一幀數(shù)據(jù)

3、開始傳輸必須先拉低電平,這就是起始位,起始位之后是8位數(shù)據(jù)位,最后是校驗位和停止位(可不加校驗位)。傳輸完成一個字節(jié)之后,都在其后發(fā)送一個停止位("1")。(圖1)2.2 波特率發(fā)生器波特率是串口傳輸?shù)膫鬏斔俣?;在微觀上就是一個位的周期。常用的波特率有9600bps和115200bps。“9600bps”表示每秒可以傳輸9600位。本次實驗我所選用的傳輸速率為9600bps。由于我們的FPGA通常運行在遠高于9600Hz的頻率上(100MHz),因此需要分頻產(chǎn)生接近9600Hz的時鐘信號。若FPGA時鐘為100MHz,則需要100M/9600=10416個時鐘周期置位一次就

4、可以得到9600Hz的時鐘。3 模塊組成 3.1接收模塊接收模塊示意圖(圖2)圖2 接收模塊示意圖串口接收包括三個模塊:電平檢測模塊,用來檢測數(shù)據(jù)開始,當檢測到輸入信號RX_Pin_In有下降沿時,可以判斷信號到來,H2L_Sig信號輸出為高電平通知接收控制模塊準備接收數(shù)據(jù);波特率定時模塊,用來產(chǎn)生波特率(9600bps);接收控制模塊,用來控制接收開始和結(jié)束。RX_En_Sig為高電平時,若電平檢測模塊檢測到有數(shù)據(jù)輸入,則發(fā)出H2L_Sig高電平信號,接收控制模塊輸出Count_Sig信號,波特率定時模塊開始計數(shù)。為了確保采集到的數(shù)據(jù)的準確性,數(shù)據(jù)采集都是在每位數(shù)據(jù)的中間進行著(圖3)。為使

5、采集信號出現(xiàn)在數(shù)據(jù)位中間,決定每次計數(shù)到5208產(chǎn)生一個采集信號BPS_CLK,持續(xù)一個時鐘周期,計數(shù)到10416時計數(shù)器清零并重新計數(shù),這樣采集信號周期不變,準確度提高。圖3 數(shù)據(jù)定時采集示意圖接收控制模塊將8位數(shù)據(jù)位并行輸出,輸出RX_Done_Sig信號表示一幀數(shù)據(jù)結(jié)束,發(fā)送模塊可以接收來自RX_Data的數(shù)據(jù)。3.1.1 detect_module.vdetect_module.v這個功能模塊是為了檢查電平由高變低。當檢測到電平又高變低,在第40行就會輸出高脈沖。 3.1.2 rx_bps_module.v波特率定時模塊,用來產(chǎn)生波特率,其原理同計數(shù)器。當rx_control_modu

6、le.v拉高Count_Sig, bps_module.v經(jīng)BPS_CLK對 rx_control_module.v 產(chǎn)生定時。3.1.3 rx_control_module.vrx_control_module.v是核心控制模塊,用來控制接收開始和結(jié)束。對串口的配置主要是1幀11位的數(shù)據(jù),重視八位數(shù)據(jù)位,無視起始位,校驗位和結(jié)束位。當RX_En_Sig拉高,這個模塊就開始工作,它將采集來自RX_Pin_In的數(shù)據(jù),當完成一幀數(shù)據(jù)接收的時候,就會產(chǎn)生一個高脈沖給 RX_Done_Sig。 4462行是rx_control_module.v的核心控制功能。當rx_control_module.v

7、模塊被使能,該模塊就會處于就緒狀態(tài),一旦detect_module.v檢查到又高變低的電平變化(47行),會使步驟i進入第0位采集,然而isCount 標志寄存器同時也會被設置為邏輯1,rx_bps_module.v 便會開始產(chǎn)生波特率的定時。 3.1.4 rx_module.vrx_module.v是一個組合模塊,主要是包含detect_module.v , bps_module.v和 rx_control_module.v,2個功能模塊,和1個組合模塊。完成對三個模塊的例化及信號傳遞。 3.2 發(fā)送模塊發(fā)送模塊示意圖(圖4)圖4 發(fā)送模塊示意圖發(fā)送模塊包括波特率定時模塊,當TX_En_Si

8、g低電平時不工作,高電平時開始計數(shù),然后產(chǎn)生一個高脈沖經(jīng)BPS_CLK輸出給發(fā)送控制模塊;發(fā)送控制模塊在TX_En_Sig高電平時,每收到一個BPS_CLK,將TX_Data的數(shù)據(jù),由TX_Pin_Out輸出。當一幀數(shù)據(jù)發(fā)送完畢后,產(chǎn)生一個TX_Done_Sig的高脈沖(圖5)。圖5 數(shù)據(jù)定時發(fā)送示意圖3.2.1 tx_bps_module.vtx_bps_module.v同樣是作為“定時”的功能。當TX_En_Sig拉低電平的時候,它是處于隨眠的狀態(tài)。一旦TX_En_Sig拉高電平,那么tx_bps_module.v就開始計數(shù)。然后定時產(chǎn)生一個高脈沖經(jīng)BPS_CLK給tx_control_m

9、odule.v。程序與rx_bps_module.v基本相同。3.2.2 tx_control_module.vtx_control_module.v控制模塊是最為中心的一部分,當TX_En_Sig拉高電平,同時間tx_bps_module.v也會開始計數(shù)。tx_control_module.v將TX_Data的值,按tx_bps_module.v產(chǎn)生的定時,有節(jié)奏的往TX_Pin_Out發(fā)送。當一幀數(shù)據(jù)發(fā)送完畢后,就產(chǎn)生一個TX_Done_Sig的高脈沖。 3.2.3 tx_module.v4 功能仿真4.1 接收模塊仿真4.1.1 接收模塊驗證程序增加一個control_module.v模

10、塊,一開始control_module.v會拉高 RX_En_Sig使能rx_module.v。當有一陣數(shù)據(jù)經(jīng)RX_Pin_In傳入,rx_module.v就會接收然后將輸出輸出致RX_Data , 再產(chǎn)生一個高脈沖給RX_Done_Sig。當control_module.v 接收到RX_Done_Sig的高脈沖,就會將RX_Data的“前四位”輸出致4位LED資源。rx_module_demo.v為一組合模塊,完成對control_module.v和rx_module.v的例化。tb_RX_DATA.v為測試文件。1)control_module.v一開始的時候(36行)就將isEn設置為邏

11、輯1, 這個標志寄存器在38行驅(qū)動著 RX_En_Sig,即此時的rx_module.v已經(jīng)進入就緒狀態(tài),control_module.v等待著 RX_Done_Sig的通知(34行)。一旦一幀數(shù)據(jù)接收完畢,RX_Done_Sig就會產(chǎn)生高脈沖, 然后rData被賦予RX_Data的值,同時isEn被設置為邏輯0(35行)。在下一瞬間, control_module.v再一次設置isEn為邏輯1,做好接收下一組數(shù)據(jù)的準備。 2)rx_module_demo.v(略)3)tb_RX_DATA.v測試文件輸出的數(shù)據(jù)為“1111_1111”。4.1.2 Modelsim的仿真仿真結(jié)果(圖6)圖6 接

12、收模塊驗證仿真結(jié)果可以看出,該程序能夠正確判斷數(shù)據(jù)幀的起始位和終止位,正確接收了數(shù)據(jù)幀“1111_1111”,并將高四位賦給了Number_Data,來控制四個LED燈。4.2 發(fā)送模塊仿真4.2.1 發(fā)送模塊驗證程序增加一個control_module.v模塊,主要是每秒往tx_module.v發(fā)送0x31的數(shù)據(jù)。一開始control_module.v往TX_Data輸出數(shù)據(jù),然后拉高TX_Done_Sig使 tx_module.v開始工作。當 tx_module.v 發(fā)往一幀數(shù)據(jù)以后,就會對 TX_Done_Sig 產(chǎn)生一個高脈沖,以示發(fā)送完畢。tx_module_demo.v為一組合模塊,完成對control_module.v和tx_module.v的例化。tb_TX_DATA.v為測試文件。1)control_module.v 第28行是1秒的定義常量,在3036行是1秒的定時器。control_module.v主要是每秒發(fā)送0x31的數(shù)據(jù),也就是每秒設置一次 isEn標志寄存器。當isEn被設置后,tx_module.v就會開始工作,發(fā)完一幀數(shù)據(jù)位TX_Done_Sig會產(chǎn)生高脈沖。這使得control_module.v會重新賦值rD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論