




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實(shí)現(xiàn)功能,F(xiàn)PGA里實(shí)現(xiàn)從PC串口接收數(shù)據(jù),接著把接收到的數(shù)據(jù)發(fā)回去。波特率可選9600bps,可調(diào) 1bit起始位,8bit數(shù)據(jù),1bit停止位,無校驗位。 參考VHDL硬件描述語言與和數(shù)字邏輯電路設(shè)計模塊介紹如下一、串口數(shù)據(jù)接收模塊:特別注意一個數(shù)據(jù)位占4個clk_bps_4時鐘周期。串口數(shù)據(jù)接收控制當(dāng)數(shù)據(jù)接收端rxd出現(xiàn)起始位低電平,啟動接收控制計數(shù)器rx_cnt,置位為8b0111_00(28),即rx_cnt5:2= 4b0111(7),rx_cnt1:0 = 2'b00(0);一個計數(shù)周期開始,伴隨clk_bps_4, rx_cnt加1(每一個數(shù)據(jù)位加4)串口接收數(shù)據(jù)移位控
2、制(關(guān)鍵采樣點(diǎn)的選取)每當(dāng)rx_cnt1:0 = 2'b01,為了保證在rxd一位數(shù)據(jù)靠近中間位置采樣;每4個clk_bps_4, rx_cnt5:2加1當(dāng)rx_cnt5:2 = 8,9,10.15,完成8位的數(shù)據(jù)采樣,串并變換置位標(biāo)志位rxdF數(shù)據(jù)接收標(biāo)志 rxd出現(xiàn)起始位低電平, rxdF置1,表示數(shù)據(jù)接收開始;當(dāng)rx_cnt計數(shù)到8b1111_11(63),數(shù)據(jù)接收完成, rxdF置0置位標(biāo)志位rdFULL;/接收鎖存器滿標(biāo)志空閑時rdFULL置0,當(dāng)數(shù)據(jù)接收完成,數(shù)據(jù)鎖存到do_latch,同時 rdFULL置1,向上層模塊表示數(shù)據(jù)以準(zhǔn)備OK,可以來讀??;rd置0,表示上層模塊
3、開始讀取數(shù)據(jù),rdFULL置0,表示數(shù)據(jù)已讀走二、串口數(shù)據(jù)發(fā)送模塊:數(shù)據(jù)發(fā)送依賴于wr(低電平有效)空閑時wr置1,數(shù)據(jù)發(fā)送時wr產(chǎn)生低電平脈沖,wr上升沿將數(shù)據(jù)鎖存到din_latch;串口數(shù)據(jù)發(fā)送控制:wr由0跳變?yōu)?后,啟動發(fā)送控制計數(shù)器tx_cnt,置位為8b0111_00(28),即tx_cnt5:2= 4b0111(7), tx_cnt1:0 = 2'b00(0);一個計數(shù)周期開始,伴隨clk_bps_4, tx_cnt加1(每一個數(shù)據(jù)位加4)串口發(fā)送數(shù)據(jù)移位控制 每4個clk_bps_4, tx_cnt5:2加1當(dāng)tx_cnt5:2 =7,8,9,10.15,完成一位起始
4、位,8位的數(shù)據(jù)位發(fā)送,隨后txd置1(停止位),完成并串轉(zhuǎn)換置位標(biāo)志位txdF,tdEMPTY /發(fā)送完成標(biāo)志當(dāng)寫數(shù)據(jù)到發(fā)送寄存器din_latch時,txdF,tdEMPTY置0; 當(dāng)tx_cnt計數(shù)到8b1111_11(63),數(shù)據(jù)發(fā)送完成,txdF,tdEMPTY置1;三、串口數(shù)據(jù)自收發(fā)控制模塊 當(dāng)rdFULL = 1&& tdEMPTY = 1(rdFULL = 1表示數(shù)據(jù)準(zhǔn)備OK,tdEMPTY = 1表示上次發(fā)送已完成) ,rd,wr產(chǎn)生低脈沖,rd置0,數(shù)據(jù)讀取到DATA,wr置0使能發(fā)送數(shù)據(jù)控制,低脈沖將DATA鎖存到din_latch四、波特率發(fā)生模塊:針對9
5、600bps,生成4倍于波特率38.4KHz的時鐘信號,用于采樣代碼如下:串口數(shù)據(jù)自收發(fā)控制模塊module UART(clk, rst_n, rxd, txd, LED1 );input clk; /時鐘周期50MHzinput rst_n; /低電平復(fù)位 input rxd; /串口引腳輸入<-接收<-PCoutput txd; /串口引腳輸出->發(fā)送->PCoutput reg LED1;/lED測試用/*/wire tdEMPTY;/發(fā)送寄存器空標(biāo)志reg wr;/發(fā)送使能信號reg 7:0DATA;wire clk_bps_4;/4倍于波特率時鐘信號reg1:
6、0 wr_cnt;/wr低電平計數(shù)reg rd;/讀接收鎖存器信號wire7:0 do_latch;/接收數(shù)據(jù)鎖存wire rdFULL;/接收鎖存器滿標(biāo)志reg1:0 rd_cnt;/rd低電平計數(shù)/*當(dāng)rdFULL = 1&& tdEMPTY = 1(rdFULL = 1表示接收鎖鎖存器數(shù)據(jù)準(zhǔn)備OK,tdEMPTY = 1表示上次發(fā)送已完成),rd,wr產(chǎn)生低脈沖,rd置0,do_latch數(shù)據(jù)讀取到DATA,wr置0用于使能發(fā)送數(shù)據(jù)控制,低脈沖將DATA鎖存到din_latch*/always(posedge clk_bps_4 or negedge rst_n)begi
7、n if(!rst_n) beginrd <= 1;wr <= 1;wr_cnt <= 0;rd_cnt <= 0;endelse beginif(rdFULL = 1)begin rd <= 0;wr <= 0;wr_cnt <= 0;rd_cnt <= 0;DATA <= do_latch;end if(rd = 0)/產(chǎn)生rd低電平 2個clk_bps_4周期begin rd_cnt <= rd_cnt + 1;if(rd_cnt = 3)rd <= 1;endif(wr = 0)/產(chǎn)生wr低電平 2個clk_bps_4周
8、期begin wr_cnt <= wr_cnt + 3;if(wr_cnt = 1)wr <= 1;endendend/*發(fā)送*/Uart_TX tx( .rst_n(rst_n), .clk_bps_4(clk_bps_4),.wr(wr),.tdEMPTY(tdEMPTY), .DATA(DATA), .txd(txd) );/output to tx_m /*接收*/ Uart_RX rx( .rst_n(rst_n), .clk_bps_4(clk_bps_4),.rd(rd), .rdFULL(rdFULL),.do_latch(do_latch), .rxd(rxd)
9、);/*針對9600bps,生成38.4KHz的時鐘信號,用于接收數(shù)據(jù)采樣與數(shù)據(jù)發(fā)送*/Baudrate baud(.clk(clk), .rst_n(rst_n), .clk_bps_4(clk_bps_4); Endmodule串口數(shù)據(jù)接收模塊:module Uart_RX(rst_n, clk_bps_4, rd, rdFULL, do_latch, rxd);input rst_n; /低電平復(fù)位 input clk_bps_4; /4倍于波特率時鐘信號即一個數(shù)據(jù)位占4個時鐘周期input rd;/接收使能,低電平有效output reg7:0 do_latch;/接收數(shù)據(jù)鎖存outp
10、ut reg rdFULL;/接收鎖存器滿標(biāo)志input rxd;/串口引腳輸入reg7:0 data_r = 8'bx; /接收數(shù)據(jù)寄存器reg5:0 rx_cnt;reg rxdF;/數(shù)據(jù)接收標(biāo)志,RX模塊內(nèi)部信號/*當(dāng)數(shù)據(jù)接收端rxd出現(xiàn)起始位低電平,啟動接收控制計數(shù)器rx_cnt,置位為8b0111_00(28),即rx_cnt5:2= 4b0111(7),rx_cnt1:0 = 2'b00(0);一個計數(shù)周期開始,伴隨clk_bps_4, rx_cnt加1(每一個數(shù)據(jù)位加4)*/always(posedge clk_bps_4 or negedge rst_n)beg
11、inif(!rst_n) begin rx_cnt <= 0; endelse if(rx_cnt <= 27 && rxd = 0) begin rx_cnt <= 28; end else if(rx_cnt <= 27 && rxd = 1)/串口無數(shù)據(jù)時,rx_cnt保持0 begin rx_cnt <= 0; end else begin rx_cnt <= rx_cnt + 1;endend/*空閑時rdFULL置0,當(dāng)數(shù)據(jù)接收完成,數(shù)據(jù)鎖存到do_latch,同時 rdFULL置1,向上層模塊表示數(shù)據(jù)以準(zhǔn)備OK,
12、可以來讀取;rd置0,表示上層模塊開始讀取數(shù)據(jù),rdFULL置0,表示數(shù)據(jù)已讀走*/always(posedge clk_bps_4 or negedge rst_n)/置位標(biāo)志位 rdFULLbegin if(!rst_n) begin rdFULL <= 0; endelse if(rd = 0) begin rdFULL <= 0; end else if(rxdF = 1 && rx_cnt = 63) begindo_latch <= data_r;/數(shù)據(jù)鎖存rdFULL <= 1;/鎖存器數(shù)據(jù)準(zhǔn)備OK endend/*rxd出現(xiàn)起始位低電平,
13、 rxdF置1,表示數(shù)據(jù)接收開始;當(dāng)rx_cnt計數(shù)到8b1111_11(63),數(shù)據(jù)接收完成, rxdF置0*/always(posedge clk_bps_4 or negedge rst_n)/置位標(biāo)志位 rxdFbegin if(!rst_n)begin rxdF <= 0; end else if(rxd = 0)/拉低表示有數(shù)據(jù)來begin rxdF <= 1;end else if(rxdF = 1 && rx_cnt = 63)begin rxdF <= 0;endend/*每當(dāng)rx_cnt1:0 = 2'b01,為了保證在rxd一位數(shù)
14、據(jù)靠近中間位置采樣;每4個clk_bps_4, rx_cnt5:2加1當(dāng)rx_cnt5:2 = 8,9,1015,完成8位的數(shù)據(jù)采樣,串并變換*/always(posedge clk_bps_4)/數(shù)據(jù)接收 begin if( rx_cnt1:0 = 2'b01 )case(rx_cnt5:2) /4'd7:rxd=0;起始位4'd8:data_r0 <= rxd;/ 低第1位4'd9:data_r1 <= rxd;/ 第2位4'd10:data_r2 <= rxd;/ 第3位4'd11:data_r3 <= rxd;/
15、第4位4'd12:data_r4 <= rxd;/ 第5位4'd13:data_r5 <= rxd;/ 第6位4'd14:data_r6 <= rxd;/ 第7位4'd15:data_r7 <= rxd;/高第8位 endcaseendendmodule串口數(shù)據(jù)發(fā)送模塊:module Uart_TX(rst_n, clk_bps_4,wr,tdEMPTY, DATA, txd);input rst_n; /低電平復(fù)位 input clk_bps_4; /4倍于波特率時鐘信號input 7:0DATA;input wr;/發(fā)送使能信號out
16、put reg tdEMPTY;/發(fā)送寄存器空標(biāo)志 對外輸出output txd;/串口引腳輸出reg txdF;/發(fā)送完成標(biāo)志 模塊內(nèi)部信號reg txd_r; /發(fā)送寄存器reg7:0 din_latch;/發(fā)送數(shù)據(jù)鎖存reg5:0 tx_cnt;/發(fā)送計數(shù)器/*空閑時wr置1,數(shù)據(jù)發(fā)送時wr產(chǎn)生低電平脈沖,wr上升沿將數(shù)據(jù)鎖存到din_latch;*/always(posedge wr)begin /din_latch <= 8'hAB; din_latch <= DATA; end/*wr由0跳變?yōu)?后,啟動發(fā)送控制計數(shù)器tx_cnt,置位為8b0111_00(28
17、),即tx_cnt5:2= 4b0111(7), tx_cnt1:0 = 2'b00(0);一個計數(shù)周期開始,伴隨clk_bps_4, tx_cnt加1(每一個數(shù)據(jù)位加4)*/always(posedge clk_bps_4 or negedge rst_n)beginif(!rst_n) begin tx_cnt <= 0; endelse if(tx_cnt <= 27) beginif(tdEMPTY = 0 && wr = 1) begintx_cnt <= 28;endelse begin tx_cnt <= 0; endend els
18、e begin tx_cnt <= tx_cnt + 1;endend/*當(dāng)寫數(shù)據(jù)到發(fā)送寄存器din_latch時,txdF,tdEMPTY置0; 當(dāng)tx_cnt計數(shù)到8b1111_11(63),數(shù)據(jù)發(fā)送完成,txdF,tdEMPTY置1;*/ always(posedge clk_bps_4 or negedge rst_n)begin if(!rst_n) begin txdF <= 1;tdEMPTY <= 1;endelse if(wr = 0) begintxdF <= 0;tdEMPTY <= 0;end else if(txdF = 0 &&
19、amp; tx_cnt = 63) begintxdF <= 1;tdEMPTY <= 1; end end/*每4個clk_bps_4, tx_cnt5:2加1當(dāng)tx_cnt5:2 =7,8,9,1015,完成一位起始位,8位的數(shù)據(jù)位發(fā)送,隨后txd置1(停止位),完成并串轉(zhuǎn)換*/always(posedge clk_bps_4 or negedge rst_n)if(!rst_n) begin txd_r <= 1;endelse begincase(tx_cnt5:2)4'd7:txd_r <= 1'b0; /起始位04'd8:txd_r <= din_latch0; /低第1位4'd9:txd_r <= din_latch1; / 第2位4'd10:txd_r <= din_latch2;/ 第3位4'd11:txd_r <= din_latch3;/ 第4位4'd12:txd_r <= din_latch4;/ 第5位4'd13:txd_r <= din_latch5;/ 第6位4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第2.6講 指數(shù)與指數(shù)函數(shù)(原卷版)-2024年高考數(shù)學(xué)一輪復(fù)習(xí)精講精練寶典(新高考專用)
- 菏澤黃底真石漆施工方案
- 第三單元課外古詩詞教學(xué)設(shè)計 2024-2025學(xué)年七年級上冊同步
- 博物館拆遷合同范本
- 優(yōu)化公司供應(yīng)商管理的工作計劃
- 構(gòu)建班級學(xué)習(xí)共同體的工作策略計劃
- 老年肺炎區(qū)別護(hù)理
- 公司生產(chǎn)工作計劃改善生產(chǎn)線平衡性
- 農(nóng)業(yè)發(fā)展安全服務(wù)保障藍(lán)圖計劃
- 小班集體游戲的安排與實(shí)施計劃
- 對外漢語初級水果教學(xué)課件
- 電工技術(shù)基礎(chǔ)與技能教案(第3版)
- 二年級《書聲朗朗》
- 有效溝通技巧課件
- 3.《東施效顰》課件PPT
- 幼兒園小班語言《娃娃開門》課件
- 梯籠安裝施工方法
- JIS G4304-2021 熱軋不銹鋼板材、薄板材和帶材
- 浮針療法之頸椎病的治療ppt課件
- 五防、后臺調(diào)試報告
- VISIO圖標(biāo)大全(完整版)
評論
0/150
提交評論