【正文】
end Behavioral。 else state=r_sample。 rt:=0。 else rxd_sync=39。library IEEE。 else xt16:=xt16+1。 end if。 then state=x_start。end transfer。X_START狀態(tài):n 在這個(gè)狀態(tài)下,UART的發(fā)送器一個(gè)位時(shí)間寬度的邏輯0信號(hào)至TXD,即起始位。 bclk=39。use 。n txdbuf:in std_logic_vector(7 downto 0)。波特率發(fā)生器就是專門產(chǎn)生一個(gè)遠(yuǎn)遠(yuǎn)高于波特率的本地時(shí)鐘信號(hào)對(duì)輸入RXD不斷采樣,使接收器與發(fā)送器保持同步n 文件名:。UART接收邏輯通過檢測(cè)TxD上起始位的下降沿作為幀同步標(biāo)準(zhǔn),這樣就相當(dāng)于把每個(gè)位分成了16份,為了避免干擾取16份中位于中部的8三個(gè)采樣進(jìn)行判別,以它們中兩個(gè)或兩個(gè)以上相同的值作為采樣結(jié)果。起止式異步協(xié)議的特點(diǎn)是以每一個(gè)字符為單位進(jìn)行傳輸,字符之間沒有固定的時(shí)間間隔要求,每個(gè)字符都以起始位開始,以停止位結(jié)束。 UART。2 UART的設(shè)計(jì)與實(shí)現(xiàn) UART發(fā)送器串行發(fā)送數(shù)據(jù)時(shí)每秒鐘發(fā)送的比特個(gè)數(shù)稱之為波特率,常用串行口波特率有9600、19200、115200等多種。完成這種功能的裝置就是超聲波傳感器,習(xí)慣上稱為超聲換能器,或者超聲探頭。 接收數(shù)據(jù)緩沖n end top。 頂層映射n u2:reciever n port map(bclkr=b,resetr=reset,rxdr=rxd,r_ready=rec_ready,n rbuf=rec_buf)。 then t:=0。如果起始位的確是16個(gè)bclk周期長(zhǎng),那么接下來的數(shù)據(jù)將在每個(gè)位的中點(diǎn)處被采樣。use 。 then state=x_idle。039。 then state=x_idle。end process。architecture Behavioral of reciever istype states is (r_start,r_center,r_wait,r_sample,r_stop)。 then state=r_start。 else count:=count+1。139。6..參考文獻(xiàn)[1] 1].鄭亞民,【M】.北京:國(guó)防工業(yè)出版社,[2] 潘松,黃繼業(yè). EDA技術(shù)實(shí)驗(yàn)教程(第二版)【M】.北京:科學(xué)出版社,2005[3] 江國(guó)強(qiáng). 數(shù)字系統(tǒng)的VHDL設(shè)計(jì)【M】.北京:機(jī)械工業(yè)出版社,[4] 李莉,路而紅. 電子設(shè)計(jì)自動(dòng)化(EDA)課程設(shè)計(jì)與項(xiàng)目實(shí)例【M】.北京:中國(guó)電力出版社。 state=r_wait。 then if count=0100 then state=r_wait。begin if resetr=39。 rbuf:out std_logic_vector(7 downto 0))。 end if。 狀態(tài)4,將待發(fā)數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換 when x_stop= 狀態(tài)5,停止位發(fā)送狀態(tài) if xt16=01111 then if xmit_cmd_p=39。 else xt16:=xt16+1。begin if resett=39。 UART發(fā)收器程序設(shè)計(jì)library IEEE。然而,為了避免毛刺影響,能夠得到正確的起始位信號(hào),必須要求接收到的起始位在波特率時(shí)鐘采樣的過程中至少有一半都是屬于邏輯0才可認(rèn)定接收到的是起始位。begin if resetb=39。n signal b:std_logic。 n txdbuf_in:in std_logic_vector(7 downto 0)。 UART設(shè)計(jì)總模塊將發(fā)送器和接收器模塊組裝起來,就能較容易地實(shí)現(xiàn)通用異步收發(fā)器總模塊,而且硬件實(shí)現(xiàn)不需要很多資源,尤其能較靈活地嵌入到FPGA/CPLD的開發(fā)中。UART串行數(shù)據(jù)傳輸?shù)氖疽鈭D如圖二所示:19圖二 串行數(shù)據(jù)傳輸發(fā)送數(shù)據(jù)過程:空閑狀態(tài),線路處于高電位,當(dāng)收到發(fā)送數(shù)據(jù)指令后,拉低線路一個(gè)數(shù)據(jù)位的時(shí)間T,接著數(shù)據(jù)按低位到高位依次發(fā)送,數(shù)據(jù)發(fā)送完畢后,接著發(fā)送奇偶校驗(yàn)位和停止位(停止位為高電位),一幀數(shù)據(jù)發(fā)送結(jié)束。1 . UART簡(jiǎn)介UART(即Universal Asynchronous Receiver Transmitter 通用異步收發(fā)器)是一種應(yīng)用廣泛的短距離串行傳輸接口。特別是進(jìn)入20世紀(jì)90年代后,電子系統(tǒng)已經(jīng)從電路板級(jí)系統(tǒng)集成發(fā)展成為包括ASIC、FPGA/CPLD和嵌入系統(tǒng)的多種模式。停止位和空閑位都規(guī)定為高電平,這樣就保證了起始位開始處一定有一個(gè)下降沿。圖九是4 位數(shù)碼掃描顯示電路,4個(gè)數(shù)碼管分別由4個(gè)選通信號(hào)k1~k4來選擇。n library IEEE。n txd_done:out std_logic)。use 。 end if。n XCNT16是bclk的計(jì)數(shù)器 X_WAIT狀態(tài)n 同UART接收狀態(tài)機(jī)中的R_WAIT狀態(tài)類似。 定義個(gè)子狀態(tài)signal state:stat