《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 基于Verilog HDL的異步FIFO設計與實現

基于Verilog HDL的異步FIFO設計與實現

2008-05-07
作者:魏 芳, 劉志軍, 馬克杰

  摘 要: 異步FIFO是一種不同時鐘域之間傳遞數據的常用方法。本文提出一種新穎的異步FIFO設計方案。此方案避免了使用大量的同步寄存器,減小了芯片面積并且提高了工作頻率" title="工作頻率">工作頻率。DC綜合的結果表明,用此方法設計的FIFO性能有了顯著提高。
  關鍵詞: 多時鐘域 亞穩態 異步 FIFO Verilog HDL


  在現代IC設計中,特別是在模塊與外圍芯片的通信設計中,多時鐘域的情況不可避免。當數據從一個時鐘域傳遞到另一個域,并且目標時鐘域與源時鐘域不相關時,這些域中的動作是不相關的,從而消除了同步操作的可能性,并使系統重復地進入亞穩定狀態[1]。在有大量的數據需要進行跨時鐘域傳輸且對數據傳輸速度要求比較高的場合,異步FIFO是一種簡單、快捷的解決方案。
  異步FIFO用一種時鐘寫入數據,而用另外一種時鐘讀出數據。讀寫指針的變化動作由不同的時鐘產生。因此,對FIFO空或滿的判斷是跨時鐘域的。如何根據異步的指針信號產生正確的空、滿標志,是異步FIFO設計成敗的關鍵。本文提出一種新穎的異步FIFO設計方案,它通過先比較讀寫地址并結合象限檢測法產生異步的空/滿標志,再把異步的空/滿標志同步到相應的時鐘域。通過仿真驗證" title="仿真驗證">仿真驗證,該方法是穩定有效的。
1 異步信號傳輸問題的分析
  在一個ASIC或FPGA庫中,每種觸發器都有時序要求。對于使用上升沿" title="上升沿">上升沿觸發的觸發器來說,建立時間(Setup Time)是在時鐘上升沿到來之前,觸發器數據保持穩定的最小時間;而保持時間(Hold Time)是在時鐘上升沿到來之后,觸發器數據還應該保持的最小時間[2]。如圖1所示,在時鐘上升沿前后的這個窗口內數據應該保持不變,否則會使觸發器工作在一個不確定的狀態,即亞穩態。當觸發器處于亞穩態,且處于亞穩態的時間超過了一個時鐘周期時,這種不確定的狀態將會影響到下一級的觸發器,最終導致連鎖反應,從而使整個系統功能失常。當一個信號跨越某個時鐘域時,對新時鐘域的電路來說它就是一個異步信號。由于異步信號之間的時序是毫無關系的,因此必然存在Setup Time/Hold Time沖突。為了避免亞穩態問題,采用如圖2所示的雙鎖存器" title="鎖存器">鎖存器法[3],即在一個信號進入另一個時鐘域前,將該信號用兩個鎖存器連續鎖存兩次,最后得到的采樣結果就可以消除亞穩態。

?


  消除亞穩態只是保證了信號電平的穩定,要在不同時鐘域中準確傳輸數據還需要一個接口電路。異步FIFO就是一種不同時鐘域之間傳遞多位數據的常用方法。
2 異步FIFO設計
  異步FIFO是一種先進先出電路,用在需要實時數據接口的部分,用來存儲、緩沖在兩個異步時鐘之間的數據傳輸。主要由雙口存儲器、讀地址產生邏輯、寫地址產生邏輯、空/滿標志產生邏輯四部分構成。圖3是一種常用的異步FIFO設計方案,其中,讀地址(rptr)和空標志(rempty)由讀時鐘(rclk)產生,而寫地址(wptr)和滿標志(wfull)由寫時鐘(wclk)產生。把寫地址與讀地址相互比較以產生空/滿標志。由于讀寫地址的變化由不同的時鐘產生,所以對FIFO空或滿的判斷是跨時鐘域的。如何避免異步傳輸帶來的亞穩態以及正確地產生空/滿標志是設計異步FIFO的難點。


2.1 讀寫地址產生邏輯
  讀寫地址線一般有多位,如果在不同的時鐘域內直接同步二進制碼的地址指針,則有可能產生亞穩態。例如,讀指針從011變化到100時,所有位都要變化,讀指針的每一位在讀時鐘的作用下,跳變不一致,即產生毛刺。如果寫時鐘恰好在讀指針的變化時刻采樣,得到的采樣信號可能是000~111中的任何一個,從而導致空/滿信號判斷錯誤。由實踐可知,同步多個異步輸入信號出現亞穩態的概率遠遠大于同步一個異步信號的概率[3]。解決這一問題的有效方法是采用格雷碼" title="格雷碼">格雷碼。格雷碼的主要特點是相鄰的兩個編碼之間只有一位變化。圖4是格雷碼產生的邏輯框圖。在讀使能或寫使能信號有效、并且空/滿標志無效的情況下,讀寫指針開始累加,進行FIFO讀或寫操作。二進制碼與格雷碼的轉換是一個“異或”運算:gnext=(bnext>>1)^bnext。格雷碼gnext經寄存器輸出格雷碼指針ptr。這種方法采用了兩組寄存器,雖然面積較大,但是有助于提高系統的工作頻率。
2.2 空/滿標志產生邏輯
  正確地產生空/滿標志是設計任何類型FIFO的關鍵點???滿標志產生的原則是:寫滿而不溢出,能讀空而不多讀。傳統的異步FIFO把讀寫地址信號同步后再進行同步比較以產生空滿標志,由于讀寫地址的每一位都需要兩級同步電路,大量使用寄存器必然要占用很大的面積。這種方法不適合設計大容量的FIFO。當讀、寫指針相等也就是指向同一個內存位置時,FIFO可能處于滿或空兩種狀態,必須區分FIFO是處于空狀態還是滿狀態。傳統的做法是把讀、寫地址寄存器擴展一位,最高位設為狀態位,其余低位作為地址位。當讀寫指針的地址位和狀態位全部吻合時,FIFO處于空狀態;當讀寫指針的地址位相同而狀態位相反時, FIFO處于滿狀態。傳統的異步FIFO工作頻率低、面積大。下面將介紹一種產生空/滿標志的新方法。


  通過異步比較讀寫指針ptr以及讀寫指針的最高兩位進行判斷,產生兩個異步的空/滿標志信號(aempty/afull)送入讀寫模塊進行同步,最后向外部輸出兩個同步的空/滿信號(rempty/wfull)???滿信號的產生過程:如圖5所示,對于深度是2n的異步FIFO,按照其讀指針rptr[n:0]和寫指針wptr[n:0]最高兩位的不同取值,可把地址空間分為四個像限[4]。當寫指針比讀指針落后一個像限時,意味著寫指針即將從后面追上讀指針,FIFO處于“可能將滿”狀態,在圖6所示的空滿信號產生邏輯框圖中聲明一個direction信號并把它置為1;當讀寫指針完全相等并且direction為1時,則FIFO處于滿狀態并且把滿信號afull置為0(低電平有效);當讀指針比寫指針落后一個像限時,意味著讀指針即將追上寫指針,FIFO處于“可能將空”狀態,或者當寫操作復位信號wrst有效時,再進行讀操作,則FIFO也處于“可能將空”狀態,此時把direction信號置為0;當讀寫指針完全相等并且direction為0時,則FIFO處于空狀態,空標志信號aempty置為0。

?


  讀寫地址異步相比較產生低電平有效的空/滿標志,其中異步滿信號(afull)要同步到寫時鐘域(wclk),異步空信號(aempty)要同步到讀時鐘域(rclk),以消除亞穩態的影響,并向外界輸出同步的空/滿信號。下面以滿信號(wfull)為例說明同步信號的產生過程:滿信號afull是因為寫地址追上了讀地址并比讀地址多循環一次所產生,此時不能再向FIFO中寫入數據,否則會造成FIFO寫溢出。由于寫地址(wptr)的變化產生FIFO滿標志afull,即afull的下降沿與wptr同屬于寫時鐘域。當讀地址增加時,表明已經從FIFO中讀走了一個數據,afull由有效的低電平變為無效的高電平,即afull的上升沿與rptr同屬于讀時鐘域。可見,afull由高變低與寫時鐘(wclk)同步,而由低變高則與讀時鐘(rclk)同步。由于滿標志afull只影響FIFO的寫入,故將其同步到寫時鐘域。如圖6所示,采用雙鎖存器法將afull過渡到寫時鐘域,最后得到的滿信號wfull就屬于寫時鐘域。同理可以得到空標志信號rempty。用Verilog代碼實現如下:
  wire dirset=~((wptr[n]^rptr[n-1]) & ~(wptr[n-1]^rptr[n]));
  wire dirrst=~((~(wptr[n]^rptr[n-1]) & (wptr[n-1]^rptr[n])) |~wrst);
  always @(posedge high or negedge dirset or negedge dirrst)
  if (!dirrst) direction <= 1′b0;
  else if (!dirset) direction <= 1′b1;
  else direction <= high;
  assign aempty=~((wptr==rptr) && !direction);
  assign afull=~((wptr==rptr) && direction);
  always @(posedge rclk or negedge aempty)
  if (!aempty) {rempty,rempty2} <= 2′b11;
  else {rempty,rempty2} <= {rempty2,~aempty};
  always @(posedge wclk or negedge afull)
  if (!afull) {wfull,wfull2} <= 2′b11;
  else {wfull,wfull2} <= {wfull2,~afull };
  異步比較法的關鍵是用異步比較結果的信號的下降沿作為最終比較結果的復位信號,而其上升沿則用傳統的雙鎖存器法進行同步[5]。最終得到的信號的上升沿與下降沿都屬于同一個時鐘域。與傳統的先將地址信號同步再進行同步比較的方法相比,異步比較法避免了使用大量的同步寄存器,而效率則更高,實現也更簡單。
2.3 保守的空/滿標志
  設計中FIFO空/滿標志的設置是保守的,即FIFO空/滿標志的置位是立即有效的,而其失效則是在一段時間之后。例如一旦讀指針追上寫指針,就會立即聲明一個低電平有效的異步空信號aempty。此信號會立即把圖6所示的set觸發器置位,使觸發器輸出為1,即向外部輸出同步的空信號rempty,并且保證了FIFO一旦為空,讀指針就不增加,避免了FIFO的讀溢出。當寫地址增加時,表明FIFO已經非空,空標志aempty由低變高,此時可以進行安全的讀操作。aempty信號的失效與寫時鐘同步??招盘杛empty是在讀時鐘域中同步aempty信號得到的。由于同步器使用了兩個觸發器,因此空信號rempty的失效要經過至少兩個時鐘周期的延遲。所以,空信號的聲明是及時的,而空信號的失效是保守的。也就是說,雖然FIFO已經非空了,但是空信號rempty要經過幾個周期的延遲才能變為無效。滿信號也有類似的情況。
  雖然空/滿標志的設置是保守的,但這并不影響FIFO功能的正確性,經驗證保守的空/滿標志能夠滿足FIFO的設計要求。
3 仿真驗證和綜合
  根據以上分析,以深度為16、數據寬度為8位的異步FIFO為例,用Verilog HDL編寫了各個模塊,并采用Synopsys公司的仿真工具VCS進行了仿真驗證。設寫時鐘(wclk)周期為100MHz,讀時鐘(rclk)周期為133MHz,FIFO寫、讀時序仿真結果分別如圖7、圖8所示。當FIFO寫滿時,滿標志wfull馬上由0變1,禁止寫數據并且寫地址也不再增加,FIFO只讀不寫;當FIFO讀空時,空標志rempty馬上由0變1,禁止讀數據并且讀地址也不再增加,FIFO只寫不讀???滿信號的變化情況滿足設計要求。


  仿真驗證通過后,采用Synopsys公司的Design Compiler工具進行綜合。把采用異步比較法設計的FIFO與傳統的先將地址信號同步再進行比較設計的FIFO相比較,在中芯國際0.35μm庫上DC綜合結果如表1所示??梢娤鄬τ趥鹘y的異步FIFO,改進后的異步FIFO電路速度快、面積小,從而降低了功耗,提高了系統的穩定性。


  為了解決數據在不同時鐘域間傳遞所產生的亞穩態問題,本文討論了一種新穎的異步FIFO設計方案。采用Verilog HDL以及由頂向下的模塊設計方法實現了這種方案。經驗證該方案能安全地實現數據跨時鐘域的傳遞,并且性能比傳統方案有了明顯的改善。
參考文獻
1 Ciletti MD. Advanced digital design with the verilog HDL[M].影印版.北京:電子工業出版社,2004:1l5~ll9
2 朱永峰,陸生禮,茆邦琴.SoC設計中的多時鐘域處理[J].電子工程師,2003;(11):60~61
3 Cummings C E, Alfke P. Simulation and synthesis techniques for asynchronous FIFO design with asynchronous pointer comparisons [Z]. SNUG, 2002;1~18
4 Cummings C E. Synthesis and scripting techniques for designing multi-asynchronous clock designs[Z]. SNUG,2001:1~26
5 楊宗凱.數字專用集成電路的設計與驗證[M].北京:電子工業出版社,2004:214~225

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲午夜一区二区| 影院欧美亚洲| 亚洲一级电影| 激情国产一区二区| 欧美一激情一区二区三区| 国产日韩av在线播放| 国产噜噜噜噜噜久久久久久久久| 欧美日韩dvd在线观看| 亚洲国产成人久久综合| 欧美一级二级三级蜜桃| 国产精品综合不卡av| 久久久久se| 在线观看视频一区二区欧美日韩| 欧美性猛交视频| 99国产精品视频免费观看一公开| 一区二区三区欧美在线| 亚洲精品乱码久久久久久蜜桃91| 亚洲婷婷国产精品电影人久久| 久久久久一区二区| 欧美精品三区| 国产日产精品一区二区三区四区的观看方式| 亚洲无限av看| 在线亚洲国产精品网站| 欧美电影打屁股sp| 国产精品高清在线观看| 一区二区三区自拍| 免费看的黄色欧美网站| 亚洲国产一区视频| 先锋影音久久| 国产日韩欧美综合精品| 国产精品一区二区久久| 欧美日韩在线视频观看| 国产亚洲精品资源在线26u| 销魂美女一区二区三区视频在线| 亚洲国产成人午夜在线一区| 国产精品乱人伦中文| 国产精品一级久久久| 欧美一区二区三区久久精品茉莉花| 欧美在线你懂的| 国产精品久久久久9999高清| 国产精品www| 亚洲在线观看视频网站| 久久久一二三| 在线亚洲+欧美+日本专区| 91久久视频| 欧美国产亚洲视频| 久久精品亚洲热| 99人久久精品视频最新地址| 国产伦精品一区二区三区视频孕妇| 国产一区二区中文字幕免费看| 免费一级欧美片在线播放| 国产精品免费一区二区三区观看| 一区二区三区国产在线观看| 国产午夜久久久久| 久久中文欧美| 欧美激情一区二区三区成人| 久久精品国产99国产精品澳门| 久久精品视频在线看| 亚洲九九九在线观看| 欧美精选午夜久久久乱码6080| 国产日韩欧美另类| 精品96久久久久久中文字幕无| 亚洲欧美国产毛片在线| 韩国一区二区三区在线观看| 亚洲精品无人区| 中文精品一区二区三区| 欧美www视频| 亚洲高清在线精品| 久久久精品动漫| 在线看视频不卡| 国产综合久久| 国产麻豆91精品| 亚洲人成精品久久久久| 亚洲天堂黄色| 欧美精品一区二区三| 久久夜色精品国产欧美乱| 国产精品久久久久77777| 亚洲免费观看高清完整版在线观看熊| 香蕉亚洲视频| 亚洲男人的天堂在线| 久久婷婷av| 欧美视频一二三区| 国产亚洲欧美日韩精品| 亚洲国产精品ⅴa在线观看| 久久国内精品自在自线400部| 久久精品国产91精品亚洲| 亚洲国产精品成人一区二区| 久久久久久久欧美精品| 欧美性片在线观看| 欧美一区二区三区四区在线| 久久精品亚洲热| 欧美精品在线观看| 老色批av在线精品| 欧美一区亚洲二区| 欧美日韩国产在线播放| 欧美色精品在线视频| 国产精品一区免费视频| 国产精品一区二区在线| 欧美精品国产一区| 欧美日韩一区二区免费在线观看| 女人香蕉久久**毛片精品| 国产精品一区免费观看| 国产一区二区中文字幕免费看| 国产精品女同互慰在线看| 亚洲一级一区| 蜜桃精品久久久久久久免费影院| 亚洲人成免费| 久久久999国产| 欧美日韩视频在线观看一区二区三区| 欧美在线影院在线视频| 美女视频网站黄色亚洲| 久久精品夜色噜噜亚洲a∨| 麻豆精品一区二区综合av| 欧美成人中文| 久久综合九色综合网站| 这里只有精品丝袜| 欧美韩日一区| 亚洲精品免费网站| 亚洲精品欧美日韩专区| 亚洲校园激情| 欧美精品一区视频| 亚洲综合丁香| 99国产精品视频免费观看一公开| 日韩写真视频在线观看| 韩国一区二区三区美女美女秀| 欧美激情四色| 在线亚洲免费| 欧美体内谢she精2性欧美| 亚洲欧洲偷拍精品| 久久国产日本精品| 久久久久在线| 亚洲色图制服丝袜| ●精品国产综合乱码久久久久| 亚洲日产国产精品| 欧美一区2区三区4区公司二百| 国产日韩精品在线| 亚洲巨乳在线| 在线日韩一区二区| 最新成人av网站| 亚洲视频 欧洲视频| 欧美伊人久久久久久久久影院| 亚洲欧洲精品成人久久奇米网| 欧美午夜电影在线观看| 一区二区免费在线视频| 亚洲欧美日韩视频二区| 欧美人与禽性xxxxx杂性| 亚洲电影毛片| 国产精品v欧美精品∨日韩| 久久久久久久成人| 欧美日韩国产在线播放| 欧美肉体xxxx裸体137大胆| 欧美刺激午夜性久久久久久久| 日韩视频免费观看高清在线视频| 国产精品视频你懂的| 国产精品香蕉在线观看| 亚洲福利视频在线| 亚洲一区二区三区四区中文| 一区二区三区日韩精品视频| 在线精品国产欧美| 欧美高清视频一区| 精品粉嫩aⅴ一区二区三区四区| 国产亚洲一区在线| 在线免费观看欧美| 激情六月综合| 亚洲专区一区| 一区二区国产在线观看| 欧美午夜精品电影| 欧美日韩精品三区| 亚洲精品午夜精品| 国产精品久久777777毛茸茸| 久久精品国产96久久久香蕉| 国产精品视频免费在线观看| 美女脱光内衣内裤视频久久网站| 久久影视三级福利片| 国产亚洲精品一区二区| 国产精品影音先锋| 欧美成人精品一区| 韩国三级电影久久久久久| 快播亚洲色图| 欧美连裤袜在线视频| 欧美在线日韩在线| 欧美r片在线| 久久久综合网站| 亚洲丝袜av一区| 午夜欧美不卡精品aaaaa| 久久精品99无色码中文字幕| 男人的天堂亚洲在线| 亚洲电影在线看| 欧美日韩日韩| 国内精品视频在线播放| 国产欧美一区二区精品忘忧草| 一区二区视频免费完整版观看| 久久婷婷一区| 99视频精品全国免费| 国产精品久久久久9999高清| 亚洲国产精品国自产拍av秋霞| 亚洲国产成人av| 极品尤物一区二区三区| 欧美激情一区二区久久久| 国产美女精品一区二区三区| 在线观看欧美日韩国产| 午夜在线成人av| 亚洲精品综合在线| 国产精品亚洲综合| 狠狠干成人综合网| 久久综合色一综合色88| 国产精品视频久久久| 欧美午夜视频| 日韩视频一区| 国产欧美1区2区3区| 亚洲三级视频在线观看| 国产亚洲精品久久久久久| 欧美日韩一区综合| 欧美成人在线免费观看| 欧美日韩一区二区国产| 亚洲免费网站| 亚洲福利视频专区| 久久久久久一区| 久久国产一区二区| 亚洲亚洲精品三区日韩精品在线视频| 欧美日韩国产一区二区三区地区| 欧美激情视频在线免费观看 欧美视频免费一| 黄色国产精品| 亚洲国产午夜| 久久性天堂网| 欧美精品日韩综合在线| 欧美与欧洲交xxxx免费观看| 在线亚洲成人| 国产一区久久| 在线亚洲激情| 欧美性猛片xxxx免费看久爱| 亚洲人久久久| 国产农村妇女精品一二区| 米奇777在线欧美播放| 久久精品国产清高在天天线| 一区二区三区蜜桃网| 欧美乱大交xxxxx| 久久另类ts人妖一区二区| 欧美一级网站| 91久久精品国产91性色tv| 欧美日韩高清免费| 亚洲毛片在线| 亚洲精品乱码久久久久久日本蜜臀| 亚洲精品国产品国语在线app| 国产精品99久久久久久宅男| 一区二区免费在线播放| 欧美电影美腿模特1979在线看| 国产喷白浆一区二区三区| 亚洲欧美精品在线| 裸体丰满少妇做受久久99精品| 久久精品视频在线免费观看| 黄色在线成人| 亚洲一级黄色片| 一本到高清视频免费精品| 亚洲人成网站色ww在线| 红杏aⅴ成人免费视频| 老司机凹凸av亚洲导航| 亚洲一区图片| 日韩一级黄色av| 国产精品久久999| 欧美大片va欧美在线播放| 欧美ed2k| 国产精品―色哟哟| 国产真实乱偷精品视频免| 久久久久国色av免费看影院| 欧美国产一区二区三区激情无套| 亚洲欧美日韩国产综合| 在线看不卡av| 国产一区二区三区成人欧美日韩在线观看| 玖玖在线精品| 久久久高清一区二区三区| 欧美区高清在线| 久久免费高清| 亚洲一区二区三区精品动漫| 亚洲欧美日韩直播| 久久精品国产久精国产爱| 在线看日韩av| 欧美美女bb生活片| 亚洲视频在线一区| 午夜在线精品| 国产拍揄自揄精品视频麻豆| 亚洲精品一区二区三区av| 久久久青草婷婷精品综合日韩| 亚洲电影观看| 午夜精品久久久久影视| 欧美一二三区精品| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲免费在线看| 国产日韩欧美另类| 欧美福利在线观看| 国产欧美短视频| 欧美日韩国产经典色站一区二区三区| 国产精品美女久久久久久免费| aa日韩免费精品视频一| 免费美女久久99| 亚洲深夜福利在线| 国产精品久久7| 一本色道久久综合精品竹菊| 99在线热播精品免费99热| av成人免费| 1024欧美极品| 中国av一区| 99国产精品视频免费观看一公开| 久久本道综合色狠狠五月| 免费一级欧美片在线播放| 亚洲在线成人| 狠狠色丁香久久综合频道| 在线亚洲免费视频| 国产精品99久久久久久www| 亚洲精品人人| 欧美日本二区| 欧美午夜宅男影院在线观看| 欧美一区二区在线观看| 国产综合香蕉五月婷在线| 亚洲一区二区综合| 亚洲午夜电影网| 欧美成人日本| 国产精品久久久久久久午夜片| 欧美韩日精品| 亚洲大胆人体在线| 欧美激情成人在线| 国产精品国产三级国产普通话三级| 欧美午夜在线一二页| 亚洲视频999| 久久久久国产一区二区| 欧美性猛交xxxx免费看久久久| 一区二区三区日韩欧美精品| 亚洲美女福利视频网站|