異步FIFO的VHDL設計
發布時間:2008/5/27 0:00:00 訪問次數:727
     皇甫偉 曾烈光 來源:《電子技術應用》
     摘要:給出了一個利用格雷碼對地址編碼的羿步fifo的實現方法,并給出了vhdl程序,以解決異步讀寫時鐘引起的問題。
    
    
     關鍵詞:fifo
     雙口ram 格雷碼 vhdl
     fifo(先進先出隊列)是一種在電子系統得到廣泛應用的器件,通常用于數據的緩存和用于容納異步信號的頻率或相位的差異。fifo的實現通常是利用雙口ram和讀寫地址產生模塊來實現的。fifo的接口信號包括異步的寫時鐘(wr_clk)和讀時鐘(rd_clk)、與寫時鐘同步的寫有效(wren)和寫數據(wr_data)、與讀時鐘同步的讀有效(rden)和讀數據(rd_data)。為了實現正確的讀寫和避免fifo的上溢或下溢,通常還應該給出與讀時鐘和寫時鐘同步的fifo的空標志(empty)和滿標志(full)以禁止讀寫操作。
     1 異步fifo功能描述
     圖1給出了fifo的接口信號和內部模塊圖。
     由圖1可以看出,寫地址產生模塊根據寫時鐘和寫有效信號產生遞增的寫地睛,讀地址產生模塊根據讀時鐘和讀有效信號產生遞增的讀地址。fifo的操作如下:在寫時鐘wr_clk的升沿,當wren有效時,將wr_data寫入雙口ram中寫地址對應的位置中;始終將讀地址對應的雙口ram中的數據輸出到讀數據總線上。這樣就實現了先進先出的功能。
    
    
    
    
    
     寫地址產生模塊還根據讀地址和寫地址關系產生fifo的滿標志。當wren有效時,若寫地址+2=讀地址時,full為1;當wren無效時,若寫地址+1=讀地址時,full為1。讀地址產生模塊還根據讀地址和寫地址的差產生fifo的空標志。當rden有效時,若寫地址-1=讀地址時,empty為1;當rden無效時,若寫地址=讀地址時,empty為1。按照以上方式產生標志信號是為了提前一個時鐘周期產生對應的標志信號。
     由于空標志和滿標志控制了fifo的操作,因此標志錯誤會引起操作的錯誤。如上所述,標志的產生是通過對讀寫地址的比較產生的,當讀寫時鐘完全異步時,對讀寫地址進行比較時,可能得出錯誤的結果。例如,在讀地址變化過程中,由于讀地址的各位變化并不同步,計算讀寫地址的差值,可能產生錯誤的差值,導致產生錯誤的滿標志信號。若將未滿標志置為滿標志時,可能降低了應用的性能,降低寫數據速率;而將滿置標志置為未滿時,執行一次寫操作,則可能產生溢出錯誤,這對于實際應用來說是絕對應該避免的。空標志信號的產生也可能產生類似的錯誤。
     2 異步fifo的改進設計
     從以上分析中可以看出,異步fifo之所以會發生錯誤是國為在地址變化時,由于多位地址各位變化時間不同,異步時鐘對其進行采樣時數值可能為不同于地址變化喪后數值的其他值,異步產生錯誤的空標志和滿標志,以致于產生fifo的操作錯誤。
     格雷碼是一種在相鄰計數值之間只有一位發生變化的編碼方式。可以看出,若讀寫地址采用格雷碼編碼方式,就可以解決上面的問題。
     為了應用的靈活,還增加了兩個標志信號,將滿(almosf_full)標志和空(almost_empty)標志分別定義如下:當寫地址與讀地址的距離小于某個預先定義數值時,almost_full為1;當讀地址與寫地址的距離小于這個預先定義的數值時,almost_empty為1。
     3 異步fifo的vhdl實現
     硬件描述語言vhdl(very-high speed ic
     hardware description language)是一種應用于電路設計的高層次描述語言,具有行為級、寄存器傳輸級和門級等多層次描述,并且具有簡單、易讀、易修改和與工藝無關等優點。目前vhdl語言已經得到多種eda工具的支持,綜合工具得到迅速發展,vhdl語言的
     皇甫偉 曾烈光 來源:《電子技術應用》
     摘要:給出了一個利用格雷碼對地址編碼的羿步fifo的實現方法,并給出了vhdl程序,以解決異步讀寫時鐘引起的問題。
    
    
     關鍵詞:fifo
     雙口ram 格雷碼 vhdl
     fifo(先進先出隊列)是一種在電子系統得到廣泛應用的器件,通常用于數據的緩存和用于容納異步信號的頻率或相位的差異。fifo的實現通常是利用雙口ram和讀寫地址產生模塊來實現的。fifo的接口信號包括異步的寫時鐘(wr_clk)和讀時鐘(rd_clk)、與寫時鐘同步的寫有效(wren)和寫數據(wr_data)、與讀時鐘同步的讀有效(rden)和讀數據(rd_data)。為了實現正確的讀寫和避免fifo的上溢或下溢,通常還應該給出與讀時鐘和寫時鐘同步的fifo的空標志(empty)和滿標志(full)以禁止讀寫操作。
     1 異步fifo功能描述
     圖1給出了fifo的接口信號和內部模塊圖。
     由圖1可以看出,寫地址產生模塊根據寫時鐘和寫有效信號產生遞增的寫地睛,讀地址產生模塊根據讀時鐘和讀有效信號產生遞增的讀地址。fifo的操作如下:在寫時鐘wr_clk的升沿,當wren有效時,將wr_data寫入雙口ram中寫地址對應的位置中;始終將讀地址對應的雙口ram中的數據輸出到讀數據總線上。這樣就實現了先進先出的功能。
    
    
    
    
    
     寫地址產生模塊還根據讀地址和寫地址關系產生fifo的滿標志。當wren有效時,若寫地址+2=讀地址時,full為1;當wren無效時,若寫地址+1=讀地址時,full為1。讀地址產生模塊還根據讀地址和寫地址的差產生fifo的空標志。當rden有效時,若寫地址-1=讀地址時,empty為1;當rden無效時,若寫地址=讀地址時,empty為1。按照以上方式產生標志信號是為了提前一個時鐘周期產生對應的標志信號。
     由于空標志和滿標志控制了fifo的操作,因此標志錯誤會引起操作的錯誤。如上所述,標志的產生是通過對讀寫地址的比較產生的,當讀寫時鐘完全異步時,對讀寫地址進行比較時,可能得出錯誤的結果。例如,在讀地址變化過程中,由于讀地址的各位變化并不同步,計算讀寫地址的差值,可能產生錯誤的差值,導致產生錯誤的滿標志信號。若將未滿標志置為滿標志時,可能降低了應用的性能,降低寫數據速率;而將滿置標志置為未滿時,執行一次寫操作,則可能產生溢出錯誤,這對于實際應用來說是絕對應該避免的。空標志信號的產生也可能產生類似的錯誤。
     2 異步fifo的改進設計
     從以上分析中可以看出,異步fifo之所以會發生錯誤是國為在地址變化時,由于多位地址各位變化時間不同,異步時鐘對其進行采樣時數值可能為不同于地址變化喪后數值的其他值,異步產生錯誤的空標志和滿標志,以致于產生fifo的操作錯誤。
     格雷碼是一種在相鄰計數值之間只有一位發生變化的編碼方式。可以看出,若讀寫地址采用格雷碼編碼方式,就可以解決上面的問題。
     為了應用的靈活,還增加了兩個標志信號,將滿(almosf_full)標志和空(almost_empty)標志分別定義如下:當寫地址與讀地址的距離小于某個預先定義數值時,almost_full為1;當讀地址與寫地址的距離小于這個預先定義的數值時,almost_empty為1。
     3 異步fifo的vhdl實現
     硬件描述語言vhdl(very-high speed ic
     hardware description language)是一種應用于電路設計的高層次描述語言,具有行為級、寄存器傳輸級和門級等多層次描述,并且具有簡單、易讀、易修改和與工藝無關等優點。目前vhdl語言已經得到多種eda工具的支持,綜合工具得到迅速發展,vhdl語言的
上一篇:六氟化硫開關與真空開關的比較