基于FPGA高速實(shí)時(shí)數據傳輸系統設計方案
由 DVI[1]解碼芯片輸入給 fpga的像素時(shí)鐘信號 Pclk、數據使能信號 DE以及場(chǎng)同步信號 Vsy表示 24bit并行像素數據的同步信息。例如: 1024×512顯示分辨率的圖像,則在每?jì)蓚€(gè)場(chǎng)同步信號 Vsy脈沖之間有 512個(gè)“DE=1”的數據有效信號,而在每個(gè)“ DE=1”的數據有效信號中有 1024個(gè) Pclk像素時(shí)鐘信號,如此可將輸送的像素數據同步。
寫(xiě)緩沖區控制器直接接收輸入的 DVI數據同步信號,在每個(gè) Vsy脈沖來(lái)時(shí)將寫(xiě)緩沖區寫(xiě)入地址清零,然后在“DE=1”時(shí)寫(xiě)緩沖區控制器內的地址計數器計數有效,在每個(gè) Pclk上升沿進(jìn)行計數加 1操作,這樣在每個(gè) DE有效時(shí)會(huì )產(chǎn)生一行的像素數據地址,再到下一個(gè)DE有效時(shí)地址計數器又會(huì )重新計數,如此循環(huán),而寫(xiě)緩沖區會(huì )按照對應的地址將輸入的 24bit并行像素數據同步寫(xiě)入緩沖區內。寫(xiě)緩沖區控制器會(huì )在地址計數器計數到半行數據地址的時(shí)候,向內存控制器發(fā)送寫(xiě)緩沖區讀請求信號( wcache_rreq)和相應緩沖區地址,要求內存控制器對已寫(xiě)入的半行像素數據以 48bit并行數據格式進(jìn)行讀取,由于內存控制器的等效操作時(shí)鐘遠遠高于寫(xiě)緩沖區的寫(xiě)入時(shí)鐘,因此內存控制器會(huì )迅速的將已寫(xiě)入的半行數據讀出并停止讀數,等待下一個(gè) wcache_rreq的到來(lái),如此便形成了對寫(xiě)緩沖區的乒乓操作,保證了輸入像素數據的正確和連續接收,避免產(chǎn)生像素數據漏接和不同步的現象。讀緩沖區控制器的設計思路同上,不再贅述。
3.2 內存控制器的設計 [5] [6]
內存控制器里包含主狀態(tài)機和內存控制模塊,如圖二所示,主狀態(tài)機負責對兩個(gè)緩沖區和片外靜態(tài)存儲器的讀寫(xiě)狀態(tài)控制,共有四個(gè)狀態(tài)――空閑狀態(tài)、寫(xiě)緩沖區讀取狀態(tài)、讀緩沖區寫(xiě)入狀態(tài)和讀寫(xiě)交替狀態(tài),用于控制狀態(tài)機狀態(tài)轉移的信號包括:寫(xiě)緩沖區讀請求信號(wcache_rreq)、寫(xiě)緩沖區讀取完成信號( r_over)、讀緩沖區寫(xiě)請求信號( rcache_wreq)以及讀緩沖區寫(xiě)入完成信號 (w_req)。狀態(tài)機在沒(méi)有任何操作請求下處于空閑狀態(tài),而當其接收到“wcache_rreq”信號時(shí),狀態(tài)就會(huì )隨之變?yōu)閷?xiě)緩沖區讀取狀態(tài)并進(jìn)行相應操作,而當讀取操作完成后會(huì )有“ r_over”信號傳入狀態(tài)機,狀態(tài)機又會(huì )轉入空閑狀態(tài)等待下一信號進(jìn)入,而當狀態(tài)機處于寫(xiě)緩沖區讀取狀態(tài)時(shí)接收到了“ rcache_wreq”信號,則狀態(tài)機轉入讀寫(xiě)交替狀態(tài),此時(shí)會(huì )對寫(xiě)緩沖區和讀緩沖區進(jìn)行交替操作,一旦有一個(gè)緩沖區操作完成時(shí)會(huì )輸入相應的操作完成信號,此時(shí)狀態(tài)機即轉入對另一緩沖區的單獨操作直至操作完成再次進(jìn)入空閑狀態(tài)。整個(gè)狀態(tài)轉移過(guò)程保證了對讀寫(xiě)緩沖區操作請求的及時(shí)響應,杜絕了由于狀態(tài)沖突導致的漏操作現象。
本文引用地址:http://dyxdggzs.com/article/169485.htm
系統選用的片外靜態(tài)存儲器的地址總線(xiàn)為 19位,數據總線(xiàn)為 16位,經(jīng)公式( 1)計算可知采用三片內存的總容量正好可以存儲兩場(chǎng) 1024×512顯示分辨率的圖像,這樣可以對存儲器進(jìn)行乒乓操作,在存儲器內寫(xiě)入一場(chǎng)數據,讀取另一場(chǎng)數據,兩者交替獨立進(jìn)行。(1)
內存控制模塊負責對片外存儲器進(jìn)行控制,其控制信號是兩個(gè)低電平有效信號[3]:nWE和 nCS。nCS為片選信號,當為高電平時(shí)存儲器處于非工作狀態(tài),此時(shí)不能對存儲器進(jìn)行任何操作,低電平時(shí)為正常工作狀態(tài),可以進(jìn)行讀寫(xiě)操作;nWE為存儲器寫(xiě)入信號,當置為低電平時(shí)可以對存儲器執行寫(xiě)入操作,置為高電平時(shí)則可以對存儲器執行讀取操作。內存控制模塊按照主狀態(tài)機的當前狀態(tài)來(lái)設定兩個(gè)控制信號的高低電平對片外存儲器進(jìn)行控制。圖三為在 QuartusII硬件開(kāi)發(fā)平臺上通過(guò)邏輯分析儀實(shí)際采樣出來(lái)的片外靜態(tài)存儲器工作時(shí)序波形圖[6],以中圖為例,存儲器由寫(xiě)入狀態(tài)轉為讀取狀態(tài),存儲器的地址總線(xiàn)信號和數據總線(xiàn)信號的變化就可看出存儲器狀態(tài)的變化,在寫(xiě)入狀態(tài)時(shí)地址總線(xiàn)按時(shí)鐘周期發(fā)生變化,同時(shí)會(huì )有 48bit并行數據寫(xiě)入相應內存地址中,而在存儲器進(jìn)入讀取狀態(tài)后,地址總線(xiàn)則變?yōu)樽x取地址,存儲器則會(huì )在延遲地址總線(xiàn)一個(gè)時(shí)鐘周期后將 48bit數據經(jīng)由數據總線(xiàn)讀出。
評論