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