<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>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 基于Verilog HDL的異步FIFO設計與實(shí)現

基于Verilog HDL的異步FIFO設計與實(shí)現

作者:山東大學(xué) | 信息科學(xué)與工程學(xué)院 魏 芳 劉志軍 馬克杰 時(shí)間:2008-05-26 來(lái)源:電子技術(shù)應用 收藏

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

本文引用地址:http://dyxdggzs.com/article/83024.htm

        

       
  讀寫(xiě)地址異步相比較產(chǎn)生低電平有效的空/滿(mǎn)標志,其中異步滿(mǎn)信號(afull)要同步到寫(xiě)時(shí)鐘域 (wclk),異步空信號(aempty)要同步到讀時(shí)鐘域(rclk),以消除的影響,并向外界輸出同步的空/滿(mǎn)信號。下面以滿(mǎn)信號 (wfull)為例說(shuō)明同步信號的產(chǎn)生過(guò)程:滿(mǎn)信號afull是因為寫(xiě)地址追上了讀地址并比讀地址多循環(huán)一次所產(chǎn)生,此時(shí)不能再向FIFO中寫(xiě)入數據,否則會(huì )造成FIFO寫(xiě)溢出。由于寫(xiě)地址(wptr)的變化產(chǎn)生FIFO滿(mǎn)標志afull,即afull的下降沿與wptr同屬于寫(xiě)時(shí)鐘域。當讀地址增加時(shí),表明已經(jīng)從FIFO中讀走了一個(gè)數據,afull由有效的低電平變?yōu)闊o(wú)效的高電平,即afull的上升沿與rptr同屬于讀時(shí)鐘域??梢?jiàn),afull由高變低與寫(xiě)時(shí)鐘(wclk)同步,而由低變高則與讀時(shí)鐘(rclk)同步。由于滿(mǎn)標志afull只影響FIFO的寫(xiě)入,故將其同步到寫(xiě)時(shí)鐘域。如圖6所示,采用雙鎖存器法將afull過(guò)渡到寫(xiě)時(shí)鐘域,最后得到的滿(mǎn)信號wfull就屬于寫(xiě)時(shí)鐘域。同理可以得到空標志信號rempty。用Verilog代碼實(shí)現如下:
  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 };

  異步比較法的關(guān)鍵是用異步比較結果的信號的下降沿作為最終比較結果的復位信號,而其上升沿則用傳統的雙鎖存器法進(jìn)行同步[5]。最終得到的信號的上升沿與下降沿都屬于同一個(gè)時(shí)鐘域。與傳統的先將地址信號同步再進(jìn)行同步比較的方法相比,異步比較法避免了使用大量的同步寄存器,而效率則更高,實(shí)現也更簡(jiǎn)單。

  2.3 保守的空/滿(mǎn)標志

  設計中FIFO空/滿(mǎn)標志的設置是保守的,即FIFO空/滿(mǎn)標志的置位是立即有效的,而其失效則是在一段時(shí)間之后。例如一旦讀指針追上寫(xiě)指針,就會(huì )立即聲明一個(gè)低電平有效的異步空信號aempty。此信號會(huì )立即把圖6所示的set觸發(fā)器置位,使觸發(fā)器輸出為1,即向外部輸出同步的空信號rempty,并且保證了FIFO一旦為空,讀指針就不增加,避免了FIFO的讀溢出。當寫(xiě)地址增加時(shí),表明FIFO已經(jīng)非空,空標志aempty由低變高,此時(shí) 可以進(jìn)行安全的讀操作。aempty信號的失效與寫(xiě)時(shí)鐘同步??招盘杛empty是在讀時(shí)鐘域中同步aempty信號得到的。由于同步器使用了兩個(gè)觸發(fā)器,因此空信號rempty的失效要經(jīng)過(guò)至少兩個(gè)時(shí)鐘周期的延遲。所以,空信號的聲明是及時(shí)的,而空信號的失效是保守的。也就是說(shuō),雖然FIFO已經(jīng)非空了,但是空信號rempty要經(jīng)過(guò)幾個(gè)周期的延遲才能變?yōu)闊o(wú)效。滿(mǎn)信號也有類(lèi)似的情況。

  雖然空/滿(mǎn)標志的設置是保守的,但這并不影響FIFO功能的正確性,經(jīng)驗證保守的空/滿(mǎn)標志能夠滿(mǎn)足FIFO的設計要求。

  3 仿真驗證和綜合

  根據以上分析,以深度為16、數據寬度為8位的異步FIFO為例,用編寫(xiě)了各個(gè)模塊,并采用Synopsys公司的仿真工具VCS進(jìn)行了仿真驗證。設寫(xiě)時(shí)鐘(wclk)周期為100MHz,讀時(shí)鐘(rclk)周期為 133MHz,FIFO寫(xiě)、讀時(shí)序仿真結果分別如圖7、圖8所示。當FIFO寫(xiě)滿(mǎn)時(shí),滿(mǎn)標志wfull馬上由0變1,禁止寫(xiě)數據并且寫(xiě)地址也不再增加, FIFO只讀不寫(xiě);當FIFO讀空時(shí),空標志rempty馬上由0變1,禁止讀數據并且讀地址也不再增加,FIFO只寫(xiě)不讀???滿(mǎn)信號的變化情況滿(mǎn)足設計要求。

        

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

       

  為了解決數據在不同時(shí)鐘域間傳遞所產(chǎn)生的問(wèn)題,本文討論了一種新穎的異步FIFO設計方案。采用以及由頂向下的模塊設計方法實(shí)現了這種方案。經(jīng)驗證該方案能安全地實(shí)現數據跨時(shí)鐘域的傳遞,并且性能比傳統方案有了明顯的改善。

  參考文獻

  1 Ciletti MD. Advanced digital design with the verilog HDL[M].影印版.北京:電子工業(yè)出版社,2004:1l5~ll9
  2 朱永峰,陸生禮,茆邦琴.SoC設計中的多時(shí)鐘域處理[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 楊宗凱.數字專(zhuān)用集成電路的設計與驗證[M].北京:電子工業(yè)出版社,2004:214~225


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: FIFO 異步 Verilog HDL IC 亞穩態(tài)

評論


相關(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>