Virtex-5FPGA設(shè)計(jì)Gbps無(wú)線通信基站
圖2 接收模塊的仿真波形
2.2.3 發(fā)送器模塊設(shè)計(jì)
發(fā)送器模塊將8位并行數(shù)據(jù)串行發(fā)出,用wr寫(xiě)信號(hào)裝載并行進(jìn)來(lái)的8位數(shù)據(jù)到9位移位寄存器(shift_reg)的低8位,最高位置為0,表示數(shù)據(jù)的起始位,數(shù)據(jù)發(fā)送完后發(fā)送1。
數(shù)據(jù)發(fā)送前先發(fā)送1表示等待數(shù)據(jù)的到來(lái)。等待16個(gè)clk16x之后,先發(fā)送一個(gè)1,再過(guò)16個(gè)clk16x之后,發(fā)送起始位0;以后每過(guò)16個(gè)clk16x,發(fā)送一位數(shù)據(jù),直到數(shù)據(jù)發(fā)送完。16個(gè)clk16x用計(jì)數(shù)器設(shè)計(jì),數(shù)據(jù)發(fā)送用狀態(tài)機(jī)實(shí)現(xiàn)。為了避免時(shí)序問(wèn)題以及保證可測(cè)試性,采用單時(shí)鐘沿同步觸發(fā),在15個(gè)clk16x到來(lái)時(shí),將clk1x置1,在下一個(gè)clk16x時(shí)鐘的上升沿到來(lái)后發(fā)送一位數(shù)據(jù),由于clk1x為高電平持續(xù)時(shí)間為一個(gè)clk16時(shí)鐘周期,也就是在clk1x的下降沿把一位數(shù)據(jù)發(fā)送出去。即
always@(posedge clk16x)
…………
if(clk1x==1)
…………
圖3給出發(fā)送模塊的仿真波形。由波形可以看出,當(dāng)輸入的并行數(shù)據(jù)是70H,串行輸出正確,其中state、reset、clk1 x、flag和dout分別是狀態(tài)機(jī)、 復(fù)位信號(hào)、使異步的時(shí)鐘同步、數(shù)據(jù)發(fā)送出去的標(biāo)志和串行數(shù)據(jù)輸出,而div8和ask分別是4位計(jì)數(shù)器和中斷請(qǐng)求信號(hào)。
圖3 發(fā)送模塊的仿真波形
3 UART 核的仿真、驗(yàn)證與綜合、優(yōu)化
3.1 UART 核的仿真和驗(yàn)證
UART的功能仿真與驗(yàn)證通過(guò)測(cè)試平臺(tái)(testbench)使用SYNOPSYS軟件的VCS工具,其流程如圖4所示[5]。接收和發(fā)送數(shù)據(jù)的正確性已通過(guò)圖2和3所示仿真波形驗(yàn)證了。
圖4 基于testbench 的仿真流程
3.2 UART 核的綜合、優(yōu)化
3.2.1 綜合存在的問(wèn)題
一般在UART設(shè)計(jì)中,采用多時(shí)鐘,電平觸發(fā),并且判斷數(shù)據(jù)的起始和停止采用額外的存儲(chǔ)器或計(jì)數(shù)器,這必然給驗(yàn)證和綜合優(yōu)化帶來(lái)時(shí)序上的問(wèn)題,同時(shí)會(huì)產(chǎn)生毛刺和亞穩(wěn)態(tài),使得電路設(shè)計(jì)不夠完善。
3.2.2 毛刺的解決
在通常的UART設(shè)計(jì)中存在組合邏輯,當(dāng)輸入的信號(hào)由高電平變低電平而其它某個(gè)信號(hào)由低電平變高電平時(shí),由于在信號(hào)變化的瞬間,組合邏輯的輸出并非同時(shí)變化,而是有先后之分,將導(dǎo)致輸出出現(xiàn)尖脈沖,即產(chǎn)生毛刺。本文采用時(shí)鐘沿(上升沿)觸發(fā),即將組合邏輯輸出端通過(guò)加到寄存器后輸出,從而避免毛刺的產(chǎn)生。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論