基于FPGA的UART模塊的設(shè)計(jì)
信號(hào)檢測(cè)器用于對(duì)RS 232的輸入信號(hào)進(jìn)行實(shí)時(shí)監(jiān)測(cè),一旦發(fā)現(xiàn)新的數(shù)據(jù)則立即通知UART內(nèi)核。信號(hào)檢測(cè)器的仿真波形如圖3所示。
其中,RxD第一次為低時(shí),new_data信號(hào)闡述輸出,之后RxD又變低,但由于信號(hào)檢測(cè)器處于鎖定狀態(tài),所以 new_data信號(hào)并沒有輸出;最后,reset_n信號(hào)將信號(hào)檢測(cè)器復(fù)位,RxD再次變低時(shí),new_data又有輸出??梢娦盘?hào)檢測(cè)器的實(shí)現(xiàn)完全正確,其功能完全符合設(shè)計(jì)要求。
2.2 移位寄存器模塊
移位寄存器模塊的作用是存儲(chǔ)輸入或者輸出數(shù)據(jù)。當(dāng)UART接收RS 232輸入時(shí),移位寄存器在波特率模式下采集RS 232輸入信號(hào),且保存結(jié)果;當(dāng)進(jìn)行RS 232輸出時(shí),UART內(nèi)核首先將數(shù)據(jù)加載到移位寄存器內(nèi),再使移位寄存器在波特率模式下將數(shù)據(jù)輸出到RS 232輸出端口上。移位寄存器的仿真波形圖如圖4所示。本文引用地址:http://butianyuan.cn/article/192086.htm
如圖4所示,移位寄存器在復(fù)位后的每個(gè)時(shí)鐘的上升沿工作。由于數(shù)據(jù)發(fā)送時(shí)是先發(fā)送有效數(shù)據(jù)的最低位,因此移位寄存器是將接收的數(shù)據(jù)由高位向低位移動(dòng),dout輸出移位寄存器的最低位。圖中的regs數(shù)據(jù)用16進(jìn)制表示。
2.3 波特率發(fā)生器模塊
波特率發(fā)生器的功能是產(chǎn)生和RS 232通信所采用的波特率同步的時(shí)鐘,這樣才能方便地按照RS 232串行通信的時(shí)序要求進(jìn)行數(shù)據(jù)接收或者發(fā)送。比如,波特率為9 600 b/s,即每秒傳輸9 600 b數(shù)據(jù),則同步的波特率時(shí)鐘頻率為9 600 Hz,周期為1/9 600=O.104 17。設(shè)計(jì)波特率時(shí)鐘的基本思路就是設(shè)計(jì)一個(gè)計(jì)數(shù)器,該計(jì)數(shù)器工作在速度很高的系統(tǒng)時(shí)鐘下,當(dāng)計(jì)數(shù)器計(jì)數(shù)到某數(shù)值時(shí)將輸出置高,再計(jì)數(shù)到一定的數(shù)值后再將輸出置低,如此反復(fù)便能夠得到所需的波特率時(shí)鐘。該系統(tǒng)所用的FPGA系統(tǒng)時(shí)鐘為50 MHz,RS 232通信的波特率為9 600 b/s,則波特率時(shí)鐘的每個(gè)周期相當(dāng)于5 208個(gè)系統(tǒng)時(shí)鐘周期。假如要得到占空比為50%的波特率時(shí)鐘,只要使得計(jì)數(shù)器在計(jì)數(shù)到1 604時(shí)將輸出置高,之后在計(jì)數(shù)到5 208時(shí)將輸出置低并且重新計(jì)數(shù),就能實(shí)現(xiàn)和9 600波特率同步的時(shí)鐘。
為了便于仿真,使計(jì)數(shù)器計(jì)到2時(shí)將輸出置高,之后計(jì)到4時(shí)將輸出置地并且重新計(jì)數(shù)。波特率發(fā)生器的仿真波形圖如圖5所示。
觀察波形可以看到波特率發(fā)生器每經(jīng)過4個(gè)時(shí)鐘周期輸出1個(gè)完整的波特率時(shí)鐘周期,占空比為1/2,并且在每次輸出波特率時(shí)鐘周期之后輸出1 個(gè)系統(tǒng)時(shí)鐘脈寬的提示信號(hào)indicator,UART通過此信號(hào)來了解波特率發(fā)生器已輸出的波特率時(shí)鐘周期個(gè)數(shù)。由波形圖可見波特率發(fā)生器的工作完全滿足設(shè)計(jì)的要求。
2.4 計(jì)數(shù)器模塊
計(jì)數(shù)器模塊的功能是可控的,在輸入時(shí)鐘的驅(qū)動(dòng)下進(jìn)行計(jì)數(shù),當(dāng)達(dá)到計(jì)數(shù)上閾時(shí)給UART內(nèi)核一個(gè)提示信號(hào)。在不同的工作狀態(tài)下,計(jì)數(shù)器模塊的輸入時(shí)鐘是不同的。UART在數(shù)據(jù)發(fā)送之前需要進(jìn)行數(shù)據(jù)加載(即將串行序列保存在移位寄存器內(nèi)),在此工程中計(jì)數(shù)器模塊的輸入時(shí)鐘為系統(tǒng)時(shí)鐘,因?yàn)榇藭r(shí)移位寄存器也工作在系統(tǒng)時(shí)鐘下。除了數(shù)據(jù)加載,另外2個(gè)需要計(jì)數(shù)器模塊的過程是數(shù)據(jù)接收和數(shù)據(jù)發(fā)送。
由于這兩個(gè)過程中移位寄存器工作在波特率時(shí)鐘下,所以計(jì)數(shù)器模塊的時(shí)鐘就是與波特率時(shí)鐘同步的波特率發(fā)生器提示信號(hào)iladicator,這樣每輸出1個(gè)完整的波特率時(shí)鐘周期計(jì)數(shù)器就能增加1。
計(jì)數(shù)器的仿真波形圖如圖6所示。
計(jì)數(shù)器在復(fù)位后并且ce有效時(shí)開始計(jì)數(shù),并且在第10個(gè)時(shí)鐘周期輸出提示信號(hào)overflow。
2.5 發(fā)送數(shù)據(jù)緩沖器模塊
評(píng)論