多路同步串口的FPGA傳輸實(shí)現
當接收模塊有請求時(shí),發(fā)送模塊即將接收模塊采集到的數據寫(xiě)入發(fā)送模塊的緩存FIFO中,將其稱(chēng)之為S_FIFO。每輪從R_FIFO中傳輸的8個(gè)數據均依次存入S_FIFO中。
本文引用地址:http://dyxdggzs.com/article/94602.htm因為DSP的8個(gè)同步串口均同時(shí)工作,可以認為當有一個(gè)輸入模塊的數據接收完畢時(shí), 8個(gè)端口的數據均應該接收完畢,保險起見(jiàn),可以延時(shí)若干時(shí)鐘周期后開(kāi)始接收數據。從端口0至端口7為一輪,若此時(shí)有端口沒(méi)有數據,即可認為此端口暫無(wú)數據輸出,用數據0替代,發(fā)送模塊繼續接收下一個(gè)端口的數據。用狀態(tài)機來(lái)實(shí)現此功能,如圖4所示。
圖4 S_FIFO寫(xiě)操作的狀態(tài)機圖
發(fā)送模塊完成FPGA向ARM的數據傳輸,當FPGA發(fā)送模塊S_FIFO中的數據達到一定數量時(shí),FPGA即向ARM發(fā)出發(fā)送數據請求,ARM即開(kāi)始對FPGA進(jìn)行數據的讀取。
FPGA中的S_FIFO同樣也是異步FIFO。寫(xiě)時(shí)鐘由鎖相環(huán)提供100MHz;讀時(shí)鐘由ARM的讀取使能信號OE取反得到,讀使能由ARM的片選信號NGCS取反得到。ARM讀取數據會(huì )產(chǎn)生NGCS與OE低電平信號,無(wú)操作時(shí)置高。每次讀取數據時(shí)NGCS與OE先后置低,取反接至S_FIFO讀端口分別為NGCS_N與OE_N。對S_FIFO讀取時(shí),每當讀時(shí)鐘OE_N為上升沿,讀使能NGCS_N必為1,完成一次讀取操作。
這樣實(shí)現了ARM與FPGA之間的跨時(shí)鐘域數據傳輸。FPGA發(fā)送數據采取乒乓操作, ARM可以源源不斷的將S_FIFO中的數據讀取出來(lái)。FPGA和ARM的數據傳輸原理圖如圖5所示。
評論