<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > Camera Link接口的異步FIFO設計與實(shí)現

Camera Link接口的異步FIFO設計與實(shí)現

作者: 時(shí)間:2011-07-17 來(lái)源:網(wǎng)絡(luò ) 收藏

FIFO(First In First Out)是一種常用于數據緩存的電路器件,可應用于高速數據采集、多處理器接口和視頻信號的時(shí)序控制等領(lǐng)域。在Camera Link接口中,需要將28 bit的TTL/CMOS信號同時(shí)送給Camera Link接口芯片,其中28 bit信號包括24 bit數據信號和4 bit控制信號(幀有效FVAL信號和行有效LVAL信號等)。而進(jìn)入FPGA中的只有數據信號,所以,異步FIFO要有在控制圖像數據時(shí)序的同時(shí),生成FVAL和LVAL同步控制信號的功能。在這種情況下,目前常用的FIFO器件很難滿(mǎn)足系統的要求。文中采用Verilog HDL語(yǔ)言設計了一種異步FIFO,它不僅提供數據緩沖,而且能夠匹配Camera Link接口標準。
1 異步FIFO設計
異步FIFO由FIFO主控模塊(包含存儲單元)、讀地址及空標志產(chǎn)生模塊、寫(xiě)地址及滿(mǎn)標志產(chǎn)生模塊、異步比較模塊4部分組成,結構圖如圖1所示。整個(gè)FIFO分為2個(gè)獨立的時(shí)鐘域,即讀時(shí)鐘域和寫(xiě)時(shí)鐘域,FIFO的存儲介質(zhì)為一塊雙口RAM,可以同時(shí)進(jìn)行讀寫(xiě)操作。在寫(xiě)時(shí)鐘域部分,由寫(xiě)地址及滿(mǎn)標志模塊產(chǎn)生寫(xiě)地址和寫(xiě)滿(mǎn)標志信號,寫(xiě)時(shí)鐘信號和寫(xiě)使能信號由系統數據生成模塊給出,寫(xiě)入的數據由主控模塊存儲在雙端口RAM中;在讀時(shí)鐘域部分,由讀地址及空標志模塊產(chǎn)生讀地址和讀空標志信號,讀時(shí)鐘信號由系統時(shí)鐘通過(guò)分頻器得到,讀使能使用視頻同步信號中的行同步LVAL信號,讀出數據由主控制模塊從雙端口RAM中讀出并連同視頻同步信號一起發(fā)送到Camera Link接口。由異步比較模塊對讀、寫(xiě)地址進(jìn)行比較,并產(chǎn)生將滿(mǎn)(nfull_n)、將空(nempty_n)信號。


2 設計的難點(diǎn)
對于通用的FIFO,不能直接應用到Camera Link接口中,也不能通過(guò)簡(jiǎn)單修改現成的FIFO模塊而得到,這是因為異步FIFO的設計存在以下難點(diǎn):
(1)亞穩態(tài)問(wèn)題:在信號傳輸中,每種觸發(fā)器都有時(shí)序要求,并在工作過(guò)程中存在數據的建立時(shí)間和保持時(shí)間。對于使用上升沿觸發(fā)的觸發(fā)器來(lái)說(shuō),建立時(shí)間(Setup Time)是在時(shí)鐘上升沿到來(lái)之前,觸發(fā)器數據保持穩定的最小時(shí)間;而保持時(shí)間(Hold Time)是在時(shí)鐘上升沿到來(lái)之后,觸發(fā)器數據還應該保持的最小時(shí)間。在時(shí)鐘上升沿前后的這個(gè)窗口內數據應該保持不變,否則會(huì )使觸發(fā)器工作在一個(gè)不確定的狀態(tài),即亞穩態(tài)。如圖2所示。當觸發(fā)器處于亞穩態(tài),且處于亞穩態(tài)的時(shí)間超過(guò)了一個(gè)時(shí)鐘周期時(shí),這種不確定的狀態(tài)將會(huì )影響到下一級的觸發(fā)器,最終導致連鎖反應,從而使整個(gè)系統功能失常。

(2)FIFO空、滿(mǎn)標志產(chǎn)生邏輯:一個(gè)好的FIFO設計的基本要求是:寫(xiě)滿(mǎn)不溢出;讀空又不多讀。傳統的異步FIFO把讀寫(xiě)地址信號同步后再進(jìn)行比較以產(chǎn)生空滿(mǎn)標志,由于讀寫(xiě)地址的每一位都需要兩級同步電路,大量使用寄存器必然要占用很大的面積。這種方法不適合設計大容量的FIFO。當讀、寫(xiě)指針相等也就是指向同一個(gè)內存位置時(shí),FIFO可能處于滿(mǎn)或空兩種狀態(tài),必須區分FIFO是處于空狀態(tài)還是滿(mǎn)狀態(tài)。
(3)Camera Link接口的匹配:由于異步FIFO在控制數據時(shí)序的同時(shí),還要產(chǎn)生視頻同步控制信號,并按照控制信號的時(shí)序將數據讀出。設計中,只用到Camera Link接口中的幀有效信號FVAL和行有效信號LVAL,當FVAL和LVAL信號為高時(shí),才能將數據讀出,為低時(shí),數據不能讀出。所以雙重的時(shí)序控制很難穩定,Camera Link接口的匹配也很難達到要求。
3 問(wèn)題的解決
(1)高速的格雷碼指針:對于亞穩態(tài)問(wèn)題,采用高速的格雷碼指針來(lái)解決。設計中讀、寫(xiě)地址采用格雷碼,用兩組寄存器作為格雷碼指針。一組二進(jìn)制計數器,而另一組用來(lái)存放二進(jìn)制碼到格雷碼轉換(Binary-to-Gray)的值。圖3是高速格雷碼計數器的示意圖。加法器的附加條件分別是讀(或寫(xiě))使能和空(或滿(mǎn))標志。當讀(或寫(xiě))使能有效(高電平)且FIFO存儲器處在非空(或非滿(mǎn))狀態(tài)時(shí)就對二進(jìn)制序列加一,否則二進(jìn)制序列加零(保持不變);然后通過(guò)Binary-to-Gray電路將二進(jìn)制bnext轉換為格雷碼gnext,這個(gè)轉換電路是由n個(gè)二輸入異或門(mén)組成,在下一個(gè)時(shí)鐘沿gnext被存到格雷碼指針中。

(2)空滿(mǎn)狀態(tài)產(chǎn)生邏輯:對于空、滿(mǎn)標志,設計中采用的解決方法是將地址空間劃分為4個(gè)連續區間,將取自每個(gè)指針最高位和次高位的4位地址狀態(tài)進(jìn)行譯碼,以判定當2個(gè)指針相等時(shí)FIFO存儲器是處于滿(mǎn)狀態(tài)還是空狀態(tài)。如圖4和5所示,如果寫(xiě)指針落后于讀指針一個(gè)區間,說(shuō)明FIFO存儲器將可能為滿(mǎn)狀態(tài);如果讀指針落后于寫(xiě)指針一個(gè)信號區,說(shuō)明FIFO存儲器將可能為空狀態(tài)。利用一個(gè)狀態(tài)鎖存器,當寫(xiě)指針在讀指針后一個(gè)地址空間時(shí)將鎖存器置位;當讀指針在寫(xiě)指針后一個(gè)地址空間時(shí)將鎖存器清零。在讀指針與寫(xiě)指針相等時(shí),如果鎖存器值為1,FIFO存儲器是滿(mǎn)狀態(tài);如果鎖存器值為0,FIFO存儲器是空狀態(tài)。由圖4和5可以寫(xiě)出狀態(tài)鎖存器的置位和復位的邏輯關(guān)系:

(2)空滿(mǎn)狀態(tài)產(chǎn)生邏輯:對于空、滿(mǎn)標志,設計中采用的解決方法是將地址空間劃分為4個(gè)連續區間,將取自每個(gè)指針最高位和次高位的4位地址狀態(tài)進(jìn)行譯碼,以判定當2個(gè)指針相等時(shí)FIFO存儲器是處于滿(mǎn)狀態(tài)還是空狀態(tài)。如圖4和5所示,如果寫(xiě)指針落后于讀指針一個(gè)區間,說(shuō)明FIFO存儲器將可能為滿(mǎn)狀態(tài);如果讀指針落后于寫(xiě)指針一個(gè)信號區,說(shuō)明FIFO存儲器將可能為空狀態(tài)。利用一個(gè)狀態(tài)鎖存器,當寫(xiě)指針在讀指針后一個(gè)地址空間時(shí)將鎖存器置位;當讀指針在寫(xiě)指針后一個(gè)地址空間時(shí)將鎖存器清零。在讀指針與寫(xiě)指針相等時(shí),如果鎖存器值為1,FIFO存儲器是滿(mǎn)狀態(tài);如果鎖存器值為0,FIFO存儲器是空狀態(tài)。由圖4和5可以寫(xiě)出狀態(tài)鎖存器的置位和復位的邏輯關(guān)系:

對于空、滿(mǎn)標志的置位和復位,設計中采用異步比較的方法實(shí)現。如圖6所示,aempty_n和afull_n是由異步信號比較產(chǎn)生的。aempty_n有效(低電平)是由讀指針增加引起的,所以它是發(fā)生在讀時(shí)鐘的上升沿;aempty_n信號釋放(無(wú)效)是由寫(xiě)指針增加引起的,所以它發(fā)生在寫(xiě)時(shí)鐘的上升沿。類(lèi)似地,afull_n信號變?yōu)橛行?低電平)是由寫(xiě)指針增加引起的,所以它發(fā)生在寫(xiě)時(shí)鐘的上升沿;釋放(無(wú)效)是由讀指針增加引起的,所以它發(fā)生在讀時(shí)鐘的上升沿??諣顟B(tài)標志是用于阻止下一個(gè)讀時(shí)鐘周期繼續讀取數據,aempty_n的有效沿(下降沿)與讀時(shí)鐘同步,但是它的上升沿卻與寫(xiě)時(shí)鐘同步,所以aempty_n的上升沿要經(jīng)過(guò)同步器才能傳遞到讀時(shí)鐘域中。afull_n信號與此類(lèi)似。

(3)Camera Link接口匹配邏輯:Camera Link接口有基本架構(Base Configuration)、中階架構(Medium Configuration)及完整架構(Full Configuration)3種。設計中采用基本架構,配置A口和B口作為圖像數據的輸入,其中A口、B口都為8 bit;控制信號使用幀有效信號FVAL和行有效信號LVAL。當FVAL和LVAL信號都為高電平時(shí),數據在圖像時(shí)鐘信號的控制下依次發(fā)送。
由于對FIFO的讀要嚴格按照控制信號的時(shí)序,依次將寫(xiě)入到雙端口RAM中的像素數據讀出,也就是當幀有效信號FVAL為高電平,行有效信號LVAL由低電平跳變到高電平時(shí),讀出的是該行的第一個(gè)像素數據;并依次按照行頻和幀頻將像素數據發(fā)送到Camera Link接口中。所以要解決以下幾個(gè)問(wèn)題:
首先是讀時(shí)鐘信號與寫(xiě)時(shí)鐘信號的匹配問(wèn)題。設計中采用分頻器將系統時(shí)鐘分頻,并與寫(xiě)時(shí)鐘相近,作為讀時(shí)鐘,這樣可以避免頻繁產(chǎn)生空、滿(mǎn)信號。
其次,讀操作控制信號的確定。通常的設計中,讀出數據和讀地址加一都在讀使能信號的控制下完成。但設計中增加FVAL和LVAL信號后,數據的讀出和讀地址的增加都是在LVAL和FVAL信號為高時(shí)完成,因此就不能用通常設計中的讀使能信號作為讀操作的控制信號,設計中用LVAL做為讀操作的控制信號,從圖1中也可以看出。這樣,當LVAL為高電平時(shí),就可以實(shí)現每次地址加一,讀出一個(gè)數據。當LVAL為低電平時(shí),地址不增加,數據也不被讀出。
最后,FVAL和LVAL信號的產(chǎn)生。設計中通過(guò)計數來(lái)實(shí)現,那么觸發(fā)計數的信號如何選取呢?通過(guò)上面分析知道,讀地址的增加和數據的讀出都是在LVAL信號的控制下完成的,而LVAL信號也要與讀出的數據一一對應,也就是說(shuō)LVAL計數每次加一就會(huì )有一個(gè)數據讀出,所以采用通常設計中的讀使能信號作為L(cháng)VAL和FVAL計數的觸發(fā)信號,便可以實(shí)現Camera Link接口的控制信號對圖像數據的控制。
4 驗證結果
將程序下載到FPGA中,使用開(kāi)發(fā)工具Quartus II6.0中自帶的邏輯分析儀SignalTap對FIFO中的信號進(jìn)行采樣監測,采樣結果如圖7、圖8所示。結果表明信號時(shí)序準確,數據和地址無(wú)毛刺現象。從圖7可以看出,當LVAL信號為低時(shí),讀地址不增加并停止讀,滿(mǎn)足時(shí)序要求。圖8中rdata為讀出數據,值為0~9,lval_count為L(cháng)VAL信號的計數寄存器,計數值為0~369,其中高電平為0~319。從圖中看出:讀出數據值和lval_count的尾數值一一對應,也就是說(shuō)LVAL與讀出數據一一對應。結果表明其可以為Camera Link接口提供穩定的數據及控制信號。

本文設計了一種異步FIFO,并成功應用在Camera Link接口中。分析和解決了異步FIFO設計中存在的2個(gè)關(guān)鍵問(wèn)題:用高速的格雷碼指針作為讀寫(xiě)地址編碼,有效降低了亞穩態(tài)出現的概率;通過(guò)劃分地址空間和增加標志位解決了空、滿(mǎn)信號問(wèn)題。同時(shí)還解決了與Camera Link接口的時(shí)序匹配問(wèn)題。設計中增加了電路的面積,但避免了復雜的組合邏輯,提高了系統的工作頻率。
參考文獻
[1] 夏宇聞.Verilog數字系統設計教程[M].北京航空航天大學(xué)出版社,2003.
[2] 魏芳,劉志軍,馬克杰.基于Verilog HDL的異步FIFO設計與實(shí)現[J].電子技術(shù)應用,2006(7):97-99.
[3] 陳驥,王鑫,曹久大.高速CCD激光移位傳感器[J].光學(xué)精密工程,2008(4):611-616.
[4] 劉洪波,龍娟.異步FIFO狀態(tài)判斷的研究與設計[J].微電子學(xué)與計算機,2007,24(3).
[5] 黃平,何虎剛,徐定杰.導航接收機的非對稱(chēng)異步FIFO設計[J].彈箭與制導學(xué)報,2008,28(1).
[6] 萬(wàn)秋華,孫瑩,王樹(shù)浩,等.雙讀數系統的航天級絕對式光電編碼器設計[J].光學(xué)精密工程,2009(6):52-57.

存儲器相關(guān)文章:存儲器原理


分頻器相關(guān)文章:分頻器原理


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>