引言
信息時代的日新月異,催促著各種各樣的數據信息快馬加鞭,人們在要求信息傳輸得越來越快的同時,還要求信息要來得更加及時,于是高速實時的數據傳輸就成為了電子信息領域里一個永遠不會過時的主題。但是,可以清楚地看到,當今動輒成百上千兆的數據流一股腦的涌入,任何一個高速數據傳輸系統的穩定性和安全性等方方面面的問題都面臨著極大的挑戰,稍有考慮不周之處就會引起各種各樣的問題,因此如何能安全高效的對高速數據進行實時接收、存儲、處理和發送正是此次設計方案的目的。
2.設計方案的硬件選定
鑒于當前高速數據傳輸系統的設計方案大多是現場可編程門陣列(FPGA)加片外存儲介質( SDRAM、SRAM、DDR等)的組合,于是本次設計方案同樣采用這種組合方式,具體為一片 FPGA、三片靜態存儲器( sram)和一片高速數據傳輸芯片。 FPGA具有管腳多、內部邏輯資源豐富、足夠的可用 IP核等優點,用作整個高速數據傳輸系統的控制模塊極為合適,此次方案中選用 Altera公司的高性價比 Cyclone[2]系列 FPGA;靜態存儲器具有昀大的優點就是數據讀取速度快,且控制信號簡單易操作,昀適用于高速數據存儲介質,方案選用 ISSI公司的 IS61LV51216型號的靜態存儲器 [3],其處理速度和存儲容量滿足系統設計的需要;TI公司的 TLK1501[4]是此次設計選用的高速數據傳輸芯片,其傳輸能力十分強大,不僅能滿足當前設計的傳輸速度需要,還留有充分的帶寬余量,為以后的系統改進提供了條件。上述三種芯片是此次高速數據傳輸系統所要用到的主要組成部件,其具體連接方式等問題不作討論。
3.具體設計方案
實現整個數據流從接收、存儲、轉換直到發送的過程由圖一可以看出,在接收端經由 DVI[1]解碼芯片傳輸的解碼數據包含 24bit并行像素數據和三個同步信號——像素時鐘 Pclk、數據使能信號 DE以及場同步信號 Vsy,fpga內部的寫緩沖區控制器則會根據以上三個數據同步信號生成寫緩沖區的寫入地址,控制 24bit的像素數據信號存入寫緩沖區中,并會在一段時間后向內存控制器發送讀請求( wcache_rreq)以讀出寫緩沖區內的已寫入數據,寫緩沖區是由 fpga自帶的 M4K塊配置生成的雙端口 RAM結構[2],采用乒乓操作,這樣整個內存讀取和緩沖區寫入過程是各自獨立進行的,保證所寫入數據的完整性,內存控制器在接收寫緩沖區控制器發送的讀請求后,按照相應的寫緩沖區地址讀取數據,并將其寫入片外靜態存儲器中,以上為像素數據的接收和存儲過程;在發送端,幀同步產生及高速數據傳輸控制器通過 fpga自帶的鎖相環產生數據時鐘 Dclk、幀同步 Fsy等信號,使讀緩沖區控制器產生對讀緩沖區的讀取地址,讀緩沖區控制器在產生讀地址的同時,還會在一段時間間隔后向內存控制器發送寫請求( rcache_wreq)以向被讀過的讀緩沖區部分寫入新數據,同樣讀緩沖區也是雙端口 RAM結構,采用乒乓操作,保證被發送數據的連續完整,被讀出的 24bit數據經過一個 24bit/16bit數據轉換器轉換為 16bit并行數據之后才能輸出給高速數據傳輸芯片,而內存控制器在接收讀緩沖區控制器的寫請求后在片外靜態存儲器中讀出相應地址的數據寫入讀緩沖區中,這樣整個數據的接收、存儲、轉換到發送的過程得以實現。
3.1 寫緩沖區控制器的設計
由 DVI[1]解碼芯片輸入給 fpga的像素時鐘信號 Pclk、數據使能信號 DE以及場同步信號 Vsy表示 24bit并行像素數據的同步信息。例如: 1024×512顯示分辨率的圖像,則在每兩個場同步信號 Vsy脈沖之間有 512個“DE=1”的數據有效信號,而在每個“ DE="1"”的數據有效信號中有 1024個 Pclk像素時鐘信號,如此可將輸送的像素數據同步。
寫緩沖區控制器直接接收輸入的 DVI數據同步信號,在每個 Vsy脈沖來時將寫緩沖區寫入地址清零,然后在“DE=1”時寫緩沖區控制器內的地址計數器計數有效,在每個 Pclk上升沿進行計數加 1操作,這樣在每個 DE有效時會產生一行的像素數據地址,再到下一個DE有效時地址計數器又會重新計數,如此循環,而寫緩沖區會按照對應的地址將輸入的 24bit并行像素數據同步寫入緩沖區內。寫緩沖區控制器會在地址計數器計數到半行數據地址的時候,向內存控制器發送寫緩沖區讀請求信號( wcache_rreq)和相應緩沖區地址,要求內存控制器對已寫入的半行像素數據以 48bit并行數據格式進行讀取,由于內存控制器的等效操作時鐘遠遠高于寫緩沖區的寫入時鐘,因此內存控制器會迅速的將已寫入的半行數據讀出并停止讀數,等待下一個 wcache_rreq的到來,如此便形成了對寫緩沖區的乒乓操作,保證了輸入像素數據的正確和連續接收,避免產生像素數據漏接和不同步的現象。讀緩沖區控制器的設計思路同上,不再贅述。
3.2 內存控制器的設計 [5] [6]
內存控制器里包含主狀態機和內存控制模塊,如圖二所示,主狀態機負責對兩個緩沖區和片外靜態存儲器的讀寫狀態控制,共有四個狀態——空閑狀態、寫緩沖區讀取狀態、讀緩沖區寫入狀態和讀寫交替狀態,用于控制狀態機狀態轉移的信號包括:寫緩沖區讀請求信號(wcache_rreq)、寫緩沖區讀取完成信號( r_over)、讀緩沖區寫請求信號( rcache_wreq)以及讀緩沖區寫入完成信號 (w_req)。狀態機在沒有任何操作請求下處于空閑狀態,而當其接收到“wcache_rreq”信號時,狀態就會隨之變為寫緩沖區讀取狀態并進行相應操作,而當讀取操作完成后會有“ r_over”信號傳入狀態機,狀態機又會轉入空閑狀態等待下一信號進入,而當狀態機處于寫緩沖區讀取狀態時接收到了“ rcache_wreq”信號,則狀態機轉入讀寫交替狀態,此時會對寫緩沖區和讀緩沖區進行交替操作,一旦有一個緩沖區操作完成時會輸入相應的操作完成信號,此時狀態機即轉入對另一緩沖區的單獨操作直至操作完成再次進入空閑狀態。整個狀態轉移過程保證了對讀寫緩沖區操作請求的及時響應,杜絕了由于狀態沖突導致的漏操作現象。
系統選用的片外靜態存儲器的地址總線為 19 位,數據總線為16 位,經公式(1)計算 可知采用三片內存的總容量正好可以存儲兩場1024×512 顯示分辨率的圖像,這樣可以對存 儲器進行乒乓操作,在存儲器內寫入一場數據,讀取另一場數據,兩者交替獨立進行。
內存控制模塊負責對片外存儲器進行控制,其控制信號是兩個低電平有效信號[3]:nWE 和nCS。nCS 為片選信號,當為高電平時存儲器處于非工作狀態,此時不能對存儲器進行任 何操作,低電平時為正常工作狀態,可以進行讀寫操作;nWE 為存儲器寫入信號,當置為 低電平時可以對存儲器執行寫入操作,置為高電平時則可以對存儲器執行讀取操作。內存控 制模塊按照主狀態機的當前狀態來設定兩個控制信號的高低電平對片外存儲器進行控制。圖 三為在QuartusII 硬件開發平臺上通過邏輯分析儀實際采樣出來的片外靜態存儲器工作時序 波形圖[6],以中圖為例,存儲器由寫入狀態轉為讀取狀態,存儲器的地址總線信號和數據總 線信號的變化就可看出存儲器狀態的變化,在寫入狀態時地址總線按時鐘周期發生變化,同 時會有48bit 并行數據寫入相應內存地址中,而在存儲器進入讀取狀態后,地址總線則變為 讀取地址,存儲器則會在延遲地址總線一個時鐘周期后將48bit 數據經由數據總線讀出。
3.3 24bit/16bit數據轉換器的設計 [5] [6]
片外高速數據傳輸芯片為 16位輸入數據總線 [4],而由 FPGA內部讀緩沖區讀出的是 24位并行數據,因此需要將 24bit數據轉換成 16bit數據再輸出。考慮到傳送 12個 16bit數據可以等效為 8個 24bit數據,故將數據輸出時鐘 Dclk用一個 0~11的計數器進行計數,然后取其中的 8個連續時鐘讀取 24bit數據,這樣就解決了 16bit數據和 24bit數據在傳輸上時鐘不匹配的問題。讀取的 24bit數據隨后被分成兩個 12bit數據依次裝入 16個 12bit移位寄存器中,再由 Dclk一位一位打出并拼裝成 16bit數據,發送給幀同步產生及高速傳輸芯片控制器進行碼頭加載,將自己編寫的 16bit數據頭校驗碼以及其他一組信息碼插入數據流中輸出給高速數據傳輸芯片,完成整個數據轉換和發送過程。
4.實際測試結果
用 TLK1501[4]高速數據傳輸芯片集成的數據接收端口接收其發送端傳輸的高速串行數據流,在芯片內部自解碼之后再恢復成 16bit數據傳給 fpga,通過比對發送數據和接收數據的一致性就可以對邏輯設計、時序等方面進行驗證,以保證設計正確。在實際測試時,用一組設計好的 24bitDVI數據取代實際傳輸的像素信號,而其他同步信號則仍為實際 DVI同步信號,這樣做的目的就是可以對發送數據進行控制,方便與接收數據進行比對,設計的發送數據為一串依次加“1”的規律 24bit數,因此如果接收回的數據信號仍為依次加 “1”的 24bit數,則說明邏輯設計和時序方面沒有問題,設計方案可以用于實際操作中。
圖四上為發送數據波形圖,圖四下為接收數據波形圖。由圖中對比可以看出,接收數據同發送數據均為依次加“1”的 24bit數據,實際測試結果證實整個高速實時數據傳輸系統設計滿足設計要求,可以用于實際操作中。
5.結語
本系統在實際測試中,發送端數據時鐘為 40MHz,由于高速數據傳輸芯片——TLK1501[4]可以傳輸 20倍頻的串行數據流,因此實際在信道中傳輸的數據速度可以達到 800MHz,如此高的傳輸速度可以滿足一般情況下的工程要求,而且本系統由于所選片外存儲器的容量和操作速度上限制,沒能將 TLK1501高速傳輸的特點充分發揮出來,相信在系統改進之后,傳輸速度達到 1G甚至更高的實時數據應該可以實現!