新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于FPGA的高速串行傳輸系統的設計

        基于FPGA的高速串行傳輸系統的設計

        作者: 時間:2016-12-20 來源:網絡 收藏

        點擊放大圖片

        圖4 操作時序

        當S_LOAD置為低且nP_LOAD置為高之后,數據在S_CLOCK的上升沿處寄存在緩沖器中,在S_LOAD的下降沿處將數據鎖存到寄存器M,N中。

        由于AURORA光纖通信的輸出時鐘頻率設定的是125 MHz,結合硬件電路的設計,硬件晶振的頻率為20 MHz,因此選擇M值為000011001(25),N的值為10(4),故時鐘芯片的時鐘輸出頻率為:

        點擊放大圖片

        時鐘控制模塊的實測時鐘信號如圖5所示。

        點擊放大圖片

        圖5 實測時鐘信號

        圖5是用Chipscope在線邏輯分析儀得到的波形,由于Chipscope在線邏輯分析儀的觸發時鐘是100 MHz,因此在抓取125 MHz的時鐘信號時,在圖上顯示的時鐘信號占空比不定,若將時鐘芯片產生的時鐘頻率降低,則此現象消失。

        2.2 AURORA發送模塊

        在生成AURORA IP CORE時,同時生成了一個基于AURORA協議的例示程序。因此,要實現基于AURORA協議的光纖通信,在發送端只需要在frame_gen_i模塊將要發送的數據打包,然后通過AURORA模塊發送出去。因此該模塊著重介紹如何將上一級傳送過來的數據進行打包壓縮,形成適合AURORA協議的數據幀,通過AURORA協議發送到接收端。圖6為frame_gen_i模塊的RTL級模型圖。

        點擊放大圖片

        圖6 frame_gen_i模塊的RTL級模型圖

        考慮到上一級傳輸數據速率可能會與AURORA傳輸的時鐘頻率不同,因此在發送端建立一個FIFO來做緩沖器。并且AURORA協議的發送時序圖如圖7所示。可以看出,TX_SOF_N為數據包幀的開始標志,TX_EOF_N為數據包幀的結束.標志,TX_REM[0:r(n)]記錄最后的傳輸數據的線程,TX_SRC_RDY_N為低代表數據有效,TX_DST_RDY_N為低代表準備好接受數據,TX_D[0:(8n-1)]是此模塊的輸出數據。以上信息是AURORA協議的發送時序,在使用FIFO做緩沖時也應該遵循這樣的協議。

        點擊放大圖片

        圖7 AURORA協議發送時序圖

        發送端的FIFO模塊分別包括FIFO的復位信號、FIFO空、FIFO滿、以及讀/寫時鐘、使能和數據信號線。因此應該根據FIFO的標志位empty和full來產生AURORA的發送時序,參考模型如圖8所示:當RESET信號到來之時,首先將S0置為高電平,將S1置為低電平,同時根據FULL和EM-PTY的狀態確定接下來的S0和S1的狀態,進而根據以上邏輯關系得到TX_SOF_N,TX_EOF_N,TX_SRC_RDY_N等邏輯信號,并且根據數據X_DST_RDY_N和TX_SRC_RDY_N生成FIFO的讀使能。由以上邏輯可以看出,只有在FULL為1,EMPTY為0時,FIFO的讀使能才能被打開。TX_SOF_N為數據包的幀頭標志,TX_EOF_N為數據包的幀尾標志,TX_STC_RDY_N為低時代表數據有效,TX_DST_RDY_N為輸入信號,根據此輸入信號確定FIFO的讀寫時序。

        點擊放大圖片

        圖8 參考模型

        對FIFO時序操作需要根據上述電路圖所產生。在上述電路圖中,有一個D觸發器,其RESET信號是復位信號,復位既是將觸發器輸出端口清零,即將S0置1,將S1置0。在之前的程序中誤將這里寫反,即RESET信號到來之后,將S0置0,S1置1。這樣導致的結果是在最開始輸入的一段數據丟失,之后的結果輸出正常。經過仿真分析之后檢查出問題并已改正。

        2.3 AURORA接收模塊

        同樣在AURORA協議模塊中,要實現對數據的接收,只需在frame_check模塊中對接收的代碼加以修改,增加自己所需要的內容,完成對數據的解碼提取,剔除冗余信息,并完成數據的緩存。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 云林县| 宁乡县| 庄浪县| 澜沧| 分宜县| 南溪县| 衡阳县| 邻水| 华安县| 阳谷县| 东辽县| 出国| 元谋县| 安庆市| 高平市| 西和县| 福建省| 灵武市| 威海市| 和平区| 禹州市| 乡城县| 江源县| 洛阳市| 阿克陶县| 屯昌县| 稻城县| 酉阳| 墨江| 临猗县| 吐鲁番市| 克什克腾旗| 志丹县| 错那县| 囊谦县| 道孚县| 咸丰县| 万载县| 二连浩特市| 台南县| 恩施市|