版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
clkrstrxdtxd:OUTstd_logic;--clkrstrxdtxd:OUTstd_logic;--串行數(shù)據(jù)發(fā)送端基于vhdl的fpga串口通信-本模塊的功能是驗(yàn)證實(shí)現(xiàn)和pc機(jī)進(jìn)行差不多的串口通信的功能。需要在-PC機(jī)上安裝一個(gè)串口調(diào)試工具來(lái)驗(yàn)證程序的功能。-程序?qū)崿F(xiàn)了一個(gè)收發(fā)一幀10個(gè)bit(即無(wú)奇偶校驗(yàn)位)的串口控-制器,10個(gè)bit是1位起始位,8個(gè)數(shù)據(jù)位,1個(gè)終止-位。串口的波特律由程序中定義的div_par參數(shù)決定,更換該參數(shù)能夠?qū)?現(xiàn)相應(yīng)的波特率。程序當(dāng)前設(shè)定的div_par的值是0x104,對(duì)應(yīng)的波特率是-9600。用一個(gè)8倍波特率的時(shí)鐘將發(fā)送或同意每一位bit的周期時(shí)刻-劃分為8個(gè)時(shí)隙以使通信同步.-程序的工作過(guò)程是:串口處于全雙工工作狀態(tài),按動(dòng) key2,CPLD向PC發(fā)送阜elcome"-字符串(串口調(diào)試工具設(shè)成按ASCII碼同意方式);PC可隨時(shí)向CPLD發(fā)送0-F的十六進(jìn)制--數(shù)據(jù),CPLD同意后顯示在7段數(shù)碼管上。libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYUARTISPORT(:INstd_logic;:INstd_logic;:INstd_logic;--串行數(shù)據(jù)接收端enOUTstd_logic_vector(7downtoen:OUTstd_logic_vector(7DOWNTO:INstd_logic:OUTstd_logic_vector(7DOWNTO:INstd_logic--按鍵輸入0);--數(shù)碼管數(shù)據(jù)key_input);ENDUART;ARCHITECTUREarchOFUARTIS--//////////////////innerreg////////////////////SIGNALdiv_reg:std_logic_vector(15DOWNTO0);--分頻計(jì)數(shù)器,分頻值由波特率決定。分頻后得到頻率 8倍波特率的時(shí)鐘SIGNALdiv8_tras_reg:std_logic_vector(2DOWNTO0);--該寄存器的計(jì)數(shù)值對(duì)應(yīng)發(fā)送時(shí)當(dāng)前位于的時(shí)隙數(shù)SIGNALdiv8_rec_reg:std_logic_vector(2DOWNTO0);--寄存器的計(jì)數(shù)值對(duì)應(yīng)接收時(shí)當(dāng)前位于的時(shí)隙數(shù)SIGNALstate_trasOSIGNALstate_trasO0);--發(fā)送狀態(tài)寄存器SIGNALstate_recO0);--同意狀態(tài)寄存器SIGNALclkbaud_tras率的發(fā)送使能信號(hào)SIGNALclkbaud_rec率的同意使能信號(hào)std_logic_vector(3DOWNTstd_logic_vector(3DOWNTstd_logic;--以波特率為頻std_logic;--以波特率為頻SIGNALclkbaud8x:std_logic;--以8倍波特率為頻率的時(shí)鐘,它的作用是將發(fā)送或同意一個(gè)bit的時(shí)鐘周期分為8個(gè)時(shí)隙 _SIGNALrecstart: s也10gg--開(kāi)始發(fā)送標(biāo)志SIGNALrecstart_tmp: std_1ogic;--開(kāi)始同意標(biāo)志SIGNALtrasstart:SIGNALrxd_reg1SIGNALrxd_reg2SIGNALtrasstart:SIGNALrxd_reg1SIGNALrxd_reg2因?yàn)榻邮諗?shù)據(jù)為異步信號(hào),故用兩級(jí)緩存SIGNALtxd_regSIGNALrxd_bufTO0);--同意數(shù)據(jù)緩存SIGNALtxd_bufTO0);--發(fā)送數(shù)據(jù)緩存SIGNALsend_state:O0);--每次按鍵給PC發(fā)送"We1come"字符串,SIGNALcnt_delayNTO0);--延時(shí)去抖計(jì)數(shù)器SIGNALstart_delaycnt標(biāo)志SIGNALkey_entry1下曛?SIGNALkey_entry2下標(biāo)志std_logic;:std_logic;--接收寄存器1:std_logic;--接收寄存器2,:std_logic;--發(fā)送寄存器:std_logic_vector(7DOWN:std_logic_vector(7DOWNstd_logic_vector(2DOWNT這是發(fā)送狀態(tài)寄存器:std_logic_vector(19DOWstd_logic;--開(kāi)始延時(shí)計(jì)數(shù):std_logic;--確定有鍵按:std_logic;--確定有鍵按--//////////////////////////////////////////////CONSTANTdiv_par std_logic_vector(15DOWNTO0):="0000000100000100";--分頻參數(shù),其值由對(duì)應(yīng)的波特率運(yùn)算而得,按此參數(shù)分頻的時(shí)鐘頻率是波倍特率的8倍,此處值對(duì)應(yīng)9600的波特率,即分頻出的時(shí)鐘頻率是9600*8SIGNALtxd_xhdl3 :std_logic;BEGINen〈=”01010101”;--7段數(shù)碼管使能信號(hào)賦值txd<=txd_xhdl3;txd_xhdl3<=txd_reg;PROCESS(clk,rst)BEGINIF(NOTrst='1')THENcnt_delay<=”00000000000000000000”;start_delaycnt<='0';ELSIF(clk'EVENTANDclk='1')THENIF(start_delaycnt='1')THENIF(cnt_delay/=”11000011010100000000”)THENcnt_delay+”00000000000000000001”;cnt_delay<=ELSEcnt_delay<=”00000000000000000000”;start_delaycnt<='0';ENDIF;ELSEIF((NOTkey_input='1')AND(cnt_delay=”00000000000000000000”))THENstart_delaycnt<='1';ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS(clk,rst)BEGINIF(NOTrst='1')THENkey_entry1<='0';ELSIF(clk'EVENTANDclk='1')THENIF(key_entry2='1')THENkey_entry1<='0';ELSEIF(cnt_delay="11000011010100000000")THENIF(NOTkey_input='1')THENkey_entry1<='1';ENDIF;ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS(clk,rst)BEGINIF(NOTrst='1')THENdiv_reg<="0000000000000000";ELSIF(clk'EVENTANDclk='1')THENIF(div_reg=div_par-"0000000000000001")THENdiv_reg<="0000000000000000";ELSEdiv_reg<=div_reg+"0000000000000001";ENDIF;ENDIF;ENDPROCESS;PROCESS(clk,rst)--分頻得至I」8倍波特率的時(shí)鐘BEGINIF(NOTrst='1')THENclkbaud8x<='0';ELSIF(clk'EVENTANDclk='1')THENIF(div_reg=div_par-"0000000000000001")THENclkbaud8x<=NOTclkbaud8x;ENDIF;ENDIF;ENDPROCESS;PROCESS(clkbaud8x,rst)BEGINIF(NOTrst='1')THENdiv8_rec_reg<="000";ELSEIF(clkbaud8x'EVENTANDclkbaud8x='1')THENIF(recstart='1')THEN--接收開(kāi)始標(biāo)志div8_rec_reg<=div8_rec_reg+"001";--接收開(kāi)始后,時(shí)隙數(shù)在8倍波特率的時(shí)鐘下加1循環(huán)ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS(clkbaud8x,rst)BEGINIF(NOTrst='1')THENdiv8_tras_reg<="000";ELSEIF(clkbaud8x'EVENTANDclkbaud8x='1')THENIF(trasstart='1')THENdiv8_tras_reg<=div8_tras_reg+"001";--發(fā)送開(kāi)始后,時(shí)隙數(shù)在8倍波特率的時(shí)鐘下加1循環(huán)ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS(div8_rec_reg)BEGINIF(div8_rec_reg="111")THENclkbaud_rec<='1';---在第7個(gè)時(shí)隙,接收鼓芐藕龐行 B荽蛉?ELSEclkbaud_rec<='0';ENDIF;ENDPROCESS;PROCESS(div8_tras_reg)BEGINIF(div8_tras_reg="111")THENclkbaud_tras<='1';--在第7個(gè)時(shí)隙,發(fā)送使能信號(hào)有效,將數(shù)據(jù)發(fā)出ELSEclkbaud_tras<='0';ENDIF;ENDPROCESS;PROCESS(clkbaud8x,rst)BEGINIF(NOTrst='1')THENtxd_reg<='1';trasstart<='0';txd_buf<="00000000";state_tras<="0000";send_state<="000";key_entry2<='0';ELSEIF(clkbaud8x'EVENTANDclkbaud8x='1')THENIF(NOTkey_entry2='1')THENIF(key_entry1='1')THENkey_entry2<='1';txd_buf<="01110111";--"w"ENDIF;ELSECASEstate_trasISWHEN"0000"=>--發(fā)送起始位IF((NOTtrasstart='1')AND(send_state<"111"))"111"))THENtrasstart<='1';ELSEIF(send_statetrasstart<='1';ELSEIF(send_state<"111")THENIF(clkbaud_tras='1')THENtxd_reg<='0';state_tras<=state_tras+"0001ENDIF;ELSEkey_entry2<='0';state_tras<="0000";ENDIF;ENDIF;WHEN"0001"=>--發(fā)送第1位IF(clkbaud_tras='1')THENtxd_reg<=txd_buf(0);txd_buf(6DOWNTO0)<=txd_buf(7DOWNTODOWNTO1);state_tras<=state_tras+"0001";ENDIF;WHEN"0010"=>--發(fā)送第2位IF(clkbaud_tras='1')THENtxd_reg<=txd_buf(0);txd_buf(6DOWNTO0)<=txd_buf(7DOWNTO1);state_tras<=state_trasDOWNTO1);ENDIF;WHEN"0011"=>--發(fā)送第3位IF(clkbaud_tras='1')THENtxd_reg<=txd_buf(0);txd_buf(6DOWNTO0)<=txd_buf(7DOWNTO1);state_tras<=state_tras+"0001";ENDIF;WHEN"0100"=>--發(fā)送第4位IF(clkbaud_tras='1')THENtxd_reg<=txd_buf(0);txd_buf(6DOWNTO0)<=txd_buf(7DOWNTO1);state_tras<=state_tras+"0001";ENDIF;WHEN"0101"=>--發(fā)送第5位IF(clkbaud_tras='1')THENtxd_reg<=txd_buf(0);txd_buf(6DOWNTO0)<=txd_buf(7DOWNTO1);state_tras<=state_tras+"0001";ENDIF;WHEN"0110"=>--發(fā)送第6位IF(clkbaud_tras='1')THENtxd_reg<=txd_buf(0);txd_buf(6DOWNTO0)<=txd_buf(7DOWNTO1);state_tras<=state_tras+"0001";ENDIF;WHEN"0111"=>--發(fā)送第7位IF(clkbaud_tras='1')THENtxd_reg<=txd_buf(0);txd_buf(6DOWNTO0)<=txd_buf(7DOWNTO1);state_tras<=state_tras+"0001";ENDIF;WHEN"1000"=>--發(fā)送第8位IF(clkbaud_tras='1')THENtxd_reg<=txd_buf(0);txd_buf(6DOWNTO0)<=txd_buf(7DOWNTO1);state_tras<=state_tras+"0001";ENDIF;WHEN"1001"=>--發(fā)送停止位IF(clkbaud_tras='1')THENtxd_reg<='1';txd_buf<="01010101";state_tras<=state_tras+"0001";ENDIF;WHEN"1111"=>IF(clkbaud_tras='1')THENstate_tras<=state_tras+"0001";send_state<=send_state+"001";trasstart<='0';CASEsend_stateISWHEN"000"=>txd_buf<="01100101";WHEN"001"=>txd_buf<="01101100";"l"WHEN"010"=>txd_buf<="01100011";--"c"WHEN"011"=>txd_buf<="01101111";"o"WHEN"100"=>txd_buf<="01101101";--"m"WHEN"101"=>txd_buf<="01100101";"e"WHENOTHERS=>txd_buf<="00000000";ENDCASE;ENDIF;WHENOTHERS=>IF(clkbaud_tras='1')THENstate_tras<=
state_tras+"0001";trasstart<='1';ENDIF;ENDCASE;ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS(clkbaud8x,rst)--同意PC機(jī)的數(shù)據(jù)BEGINIF(NOTrst='1')THENrxd_reg1<='0';rxd_reg2<='0';rxd_buf<="00000000";state_rec<="0000";recstart<='0';recstart_tmp<='0';ELSEIF(clkbaud8x'EVENTANDclkbaud8x='1')THENrxd_reg1<=rxd;rxd_reg2<=rxd_reg1;IF(state_rec="0000")THENIF(recstart_tmp='1')THENrecstart<='1';recstart_tmp<='0';state_rec<=state_rec+"0001";ELSEIF((NOTrxd_reg1ANDrxd_reg2)='1')THEN--檢測(cè)到起始位的下降沿,進(jìn)入同意狀態(tài)recstart_tmp<='1';ENDIF;ENDIF;ELSEIF(state_rec>="0001"ANDstate_rec<="1000")THENIF(clkbaud_rec='1')THENrxd_buf(7)<=rxd_reg2;rxd_buf(6DOWNTO0)<=rxd_buf(7DOWNTO1);state_rec<=state_rec+"0001";ENDIF;ELSEIF(state_rec="1001")THENIF(clkbaud_rec='1')THENstate_rec<="0000";recstart<='0';ENDIF;ENDIF;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度建筑工程施工合同合同附件范本匯編5篇
- 家庭教育新理念親子成長(zhǎng)與指導(dǎo)策略
- 二零二五年度建筑工程安全風(fēng)險(xiǎn)評(píng)估合同3篇
- 2025年度環(huán)保型沙石材料運(yùn)輸服務(wù)合同范本3篇
- 二零二五年度工業(yè)用地廠房出租合同協(xié)議書(shū)(含土地使用權(quán))3篇
- 企業(yè)組織架構(gòu)調(diào)整及人力資源管理咨詢服務(wù)協(xié)議
- 家政服務(wù)中的節(jié)能環(huán)保知識(shí)與技能培訓(xùn)
- 二零二五年度安全生產(chǎn)事故賠償協(xié)議書(shū)范本
- 智能交通違章監(jiān)測(cè)系統(tǒng)合同
- 企業(yè)數(shù)字化轉(zhuǎn)型中的對(duì)公業(yè)務(wù)策略研究
- 門診護(hù)理人員三基理論試卷附有答案
- 高考體育特長(zhǎng)生培訓(xùn)
- 兒童及青少年知情同意書(shū)版本
- 廣東省肇慶市2024屆高三第二次教學(xué)質(zhì)量檢測(cè)數(shù)學(xué)試題(解析版)
- 部門預(yù)算編制培訓(xùn)課件
- 關(guān)于安全教育的主題班會(huì)課件
- 財(cái)務(wù)用發(fā)票分割單原始憑證 發(fā)票分割單范本
- 醫(yī)院精神科護(hù)理培訓(xùn):出走行為的防范與護(hù)理
- 《建筑基坑工程監(jiān)測(cè)技術(shù)標(biāo)準(zhǔn)》(50497-2019)
- 【環(huán)評(píng)文件】蚌埠市康城醫(yī)療廢物集中處置有限公司25噸日微波消毒處置醫(yī)療廢物項(xiàng)目
- 人教版初中物理八年級(jí)上冊(cè)全冊(cè)期末復(fù)習(xí)知識(shí)點(diǎn)
評(píng)論
0/150
提交評(píng)論