在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于FPGA的FIFO實現

FPGA設計論壇 ? 來源:CSDN技術社區 ? 2025-04-09 09:55 ? 次閱讀

一、FIFO

1.1 定義

FIFO(First in First out)為先進先出隊列,具有存儲功能,可用于不同時鐘域間傳輸數據以及不同的數據寬度進行數據匹配。如其名稱,數據傳輸為單向,從一側進入,再從另一側出來,出來的順序和進入的順序相同。

1.2 實現方式

FIFO可由多種不同的實現方式,可以用塊狀RAM,分布式RAM來實現,也可直接使用IP核,當數據較小時,建議使用分布式RAM實現,數據較大時,用塊狀RAM實現。

1.3 實現原理

FIFO組成包含存儲單元,寫時鐘,讀時鐘,滿標志,空標志,讀寫控制信號,當讀時鐘和寫時鐘都是同一個時鐘時,則為同步FIFO,否則為異步FIFO。

a.首先,在復位操作后,在寫時鐘控制下,如果狀態非滿狀態,數據可寫入到FIFO中。每寫一次數據,寫指針加一,寫滿后將不允許再寫入;

b.當FIFO中數據非空時,在讀時鐘的控制下,數據可從FIFO中讀出。每讀一次數據,讀時鐘加一,位于下一個讀取的位置,在空狀態下,將不能繼續讀數據;

無論是同步FIFO還是異步FIFO,都是以雙口RAM為基礎來實現。

二、代碼實現

代碼為書籍《FPGA應用技術及實踐》中5.3.3 FIFO設計中的代碼,相比原代碼中,對read/write為00時,對count的值變化進行了修改,修改為count<=count更合理,設計為實現4X16的同步FIFO

module FIFO_V(rst,clk,data_in,data_out,read,write,empty,full );

input rst,clk;

input [15:0] data_in;

output reg [15:0] data_out;

input read,write;

output empty,full;

parameter depth=2,max_count=2'b11;

reg empty,full;

reg [depth-1:0] tail;

reg [depth-1:0] head;

reg [depth-1:0] count;

reg [15:0] fifomem [0:max_count];

//讀空判斷

always@(posedge clk)

begin

if(rst==1)

begin

data_out<=16'h0000;

end

else if(read==1'b1&&empty==1'b0)

begin

data_out<=fifomem[tail];

end

end

//寫滿判斷

always@(posedge clk)

begin

if(rst==1'b0&&write==1'b1&&full==1'b0)

fifomem[head]<=data_in;

end

//寫操作

always@(posedge clk)

begin

if(rst==1)

head<=2'b00;

else

begin

if(write==1'b1&&full==1'b0)

head<=head+1;

end

end

//讀操作

always@(posedge clk)

begin

if(rst==1)

begin

tail<=2'b00;

end

else if(read==1'b1&&empty==1'b0)

begin

tail<=tail+1;

end

end

//讀寫操作下的計數

always@(posedge clk)

begin

if(rst==1)

begin

count<=2'b00;

end

else

begin

case({read,write})

2'b00:count<=count;

2'b01:if(count!=max_count) count<=count+1;

2'b10:if(count!=2'b00) count<=count-1;

2'b11:count<=count;

endcase

end

end

//隊列空狀態判斷

always@(posedge clk)

begin

if(count==2'b00)

empty<=1'b1;

else

empty<=1'b0;

end

//隊列滿狀態判斷

always@(posedge clk)

begin

if(count==max_count)

full<=1'b1;

else

full<=1'b0;

end

endmodule

測試代碼

對于read和write信號,盡量避免在時鐘上升沿時進行狀態變化,如此處write翻轉在201ns,read翻轉在#252,即避免了和時鐘的上升沿同步,也避免了和write翻轉的同步

`timescale 1ns / 1ps

module FIFO_tb( );

reg clk,rst,write,read;

reg [15:0] data_in;

wire [15:0] data_out;

wire empty,full;

FIFO_V FIFO_test (.clk(clk),.rst(rst),.data_in(data_in),.write(write),.read(read),.empty(empty),.full(full),.data_out(data_out));

//初始狀態賦值

initial

begin

clk=0;

rst=1;

data_in=16'h1111;

#51 rst=0;

end

//寫操作

initial

begin

write=1;

#201 write=1;

#30 write=0;

#200 write=1;

#85 write=0;

//#10 write=1;

//#60 write=0;

end

//讀操作

initial

begin

read=0;

#252 read=1;

#200 read=0;

#100 read=1;

end

//輸入信號與時鐘信號生成

always #20 data_in=data_in+16'h1111;

always #10 clk=~clk;

endmodule

三、仿真結果

3.1 復位階段

在起始的50ns內,復位信號rst(紅色標注)為1時,進行復位操作,如黃色定位線所示,輸出data_out為0,empty和full標志為0;

3fa3b540-1057-11f0-9310-92fbcf53809c.png

3.2 寫入階段

在110.1ns時開始寫入,時間點不是110ns而是多了0.1ns是由于modelsim默認的開始時刻是0.1ns開始;因為count原先一直處于初始化狀態2'b00,在此時因為寫入進行了empty的邏輯判斷,因為empty為0;

在clk信號中1、2、3、4上升沿位置,即為寫入4個值:6666,7777,8888,9999,寫完后剛好寫滿,因此full標志位在170.1ns處變為1,表示已寫滿無法再寫入。

3fb92ea2-1057-11f0-9310-92fbcf53809c.png

3.3 讀取階段

在270.1ns時,read/write的值為1/0開始從FIFO中進行數據讀取,在clk信號的1,2,3,4讀取了4個數值,根據data_out可知為6666,7777,8888,9999。讀出順序與寫入順序一致,即先入先出。

3fd07c06-1057-11f0-9310-92fbcf53809c.png

3.4 同時讀寫或不讀不寫

在450ns時,read/write都為1,讀寫同時進行,并且empty為1,可知不進行讀操作,count的邏輯。但因full為0,可以進行寫入,此時進行寫入,在4個clk周期寫滿,因此在530.1ns時full標志位為1

3ff1a958-1057-11f0-9310-92fbcf53809c.png

在530ns和550ns時,read/write都為0,此時不讀也不寫入,因此輸出狀態不變,一直為9999,

4011bd56-1057-11f0-9310-92fbcf53809c.png

原文鏈接:https://blog.csdn.net/zyp626/article/details/131620099

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1640

    文章

    21897

    瀏覽量

    611343
  • 存儲
    +關注

    關注

    13

    文章

    4457

    瀏覽量

    86836
  • 仿真
    +關注

    關注

    51

    文章

    4199

    瀏覽量

    134989
  • fifo
    +關注

    關注

    3

    文章

    396

    瀏覽量

    44426
  • 代碼
    +關注

    關注

    30

    文章

    4874

    瀏覽量

    69933

原文標題:FPGA基礎之FIFO實現

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于FPGA的異步FIFO實現

    大家好,又到了每日學習的時間了,今天我們來聊一聊基于FPGA的異步FIFO實現。 一、FIFO簡介 FIFO是英文First In Fir
    的頭像 發表于 06-21 11:15 ?6706次閱讀
    基于<b class='flag-5'>FPGA</b>的異步<b class='flag-5'>FIFO</b>的<b class='flag-5'>實現</b>

    異步FIFO結構及FPGA設計

    首先介紹異步FIFO 的概念、應用及其結構,然后分析實現異步FIFO的難點問題及其解決辦法; 在傳統設計的基礎上提出一種新穎的電路結構并對其進行綜合仿真和FPGA
    發表于 04-16 09:25 ?46次下載

    基于PCI接口芯片外擴FIFOFPGA實現

    介紹了PCI 9054 接口芯片的性能及數據傳輸特點,提出了一種基于PCI 9054 外擴異步FIFO(先進先出)的FPGA(現場可編程門陣列)實現方法。由于PCI 9054 內部FIFO
    發表于 01-06 15:20 ?44次下載

    高速異步FIFO的設計與實現

    本文主要研究了用FPGA 芯片內部的EBRSRAM 來實現異步FIFO 設計方案,重點闡述了異步FIFO 的標志信號——空/滿狀態的設計思路,并且用VHDL 語言
    發表于 01-13 17:11 ?40次下載

    基于FPGAFIFO設計和應用

    基于FPGAFIFO設計和應用 引 言   在利用DSP實現視頻實時跟蹤時,需要進行大量高速的圖像采集。而DSP本身自帶的FIFO并不足以支持系統中大量數據的暫時存儲
    發表于 11-20 11:25 ?2263次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>FIFO</b>設計和應用

    基于VHDL和FPGA的非對稱同步FIFO設計實現

    本文采用VHDL描述語言,充分利用Xilinx公司Spartan II FPGA的系統資源,設計實現了一種非對稱同步FIFO,它不僅提供數據緩沖,而且能進行數據總線寬度的轉換。
    發表于 01-13 11:33 ?2031次閱讀

    LabVIEW FPGA模塊實現FIFO深度設定

    為了解決基于LabVIEWFPGA模塊的DMAFIFO深度設定不當帶來的數據不連續問題,結合LabVIEWFPGA的編程特點和DMA FIFO的工作原理,提出了一種設定 FIFO 深度
    發表于 09-26 13:45 ?7601次閱讀
    LabVIEW <b class='flag-5'>FPGA</b>模塊<b class='flag-5'>實現</b><b class='flag-5'>FIFO</b>深度設定

    異步FIFOFPGA與DSP通信中的運用

    文中給出了異步FIFO實現代碼和FPGA與DSP的硬件連接電路。經驗證,利用異步FIFO的方法,在FPGA與DSP通信中的應用,具有傳輸速
    發表于 12-12 14:28 ?51次下載
    異步<b class='flag-5'>FIFO</b>在<b class='flag-5'>FPGA</b>與DSP通信中的運用

    基于FPGAFIFO設計和應用

    實現目標識別與跟蹤的應用目的 ,在基于 TMS320DM642 的 FIFO 基礎上擴展存儲空間 ,提出一種基于 FPGA實現 SDRAM 控制器的方法。分析所用 SDRAM 的特
    發表于 10-29 14:05 ?2次下載

    異步FIFO結構及FPGA設計

    異步FIFO結構及FPGA設計,解決亞穩態的問題
    發表于 11-10 15:21 ?4次下載

    異步FIFOFPGA與DSP通信中的應用解析

    摘要 利用異步FIFO實現FPGA與DSP進行數據通信的方案。FPGA在寫時鐘的控制下將數據寫入FIFO,再與DSP進行握手后,DSP通過E
    發表于 10-30 11:48 ?2次下載
    異步<b class='flag-5'>FIFO</b>在<b class='flag-5'>FPGA</b>與DSP通信中的應用解析

    FPGAFIFO實現過程

    FIFO隊列有兩個位置指示指針。一個是寫指針,指向隊列的第一個存儲單元。一個讀指針,指向隊列的最后一個存儲單元。當有寫命令的時候,數據寫入寫指針指向的存儲單元,然后指針加一。當有讀命令的時候,讀指針
    發表于 06-29 08:51 ?1.6w次閱讀

    FPGA實現自行FIFO設計的方法

    設計工程師通常在FPGA實現FIFO(先進先出寄存器)的時候,都會使用由芯片提供商所提供的FIFO。但是,由于其通用性使得其針對性變差,某些情況下會變得不方便或者將增加硬件成本。此時
    的頭像 發表于 11-28 08:10 ?7775次閱讀
    在<b class='flag-5'>FPGA</b>上<b class='flag-5'>實現</b>自行<b class='flag-5'>FIFO</b>設計的方法

    FPGA電路FIFO設計的源代碼

    FPGA電路FIFO設計的源代碼
    發表于 07-08 17:34 ?15次下載
    <b class='flag-5'>FPGA</b>電路<b class='flag-5'>FIFO</b>設計的源代碼

    如何在Altera FPGA中使用FIFO實現功能設計?

    一:fifo是什么 FIFO的完整英文拼寫為FirstIn First Out,即先進先出。FPGA或者ASIC中使用到的FIFO一般指的是對數據的存儲具有先進先出特性的一個存儲器,常
    的頭像 發表于 03-12 16:30 ?3427次閱讀
    如何在Altera <b class='flag-5'>FPGA</b>中使用<b class='flag-5'>FIFO</b><b class='flag-5'>實現</b>功能設計?
    主站蜘蛛池模板: 4438x成人网全国最大 | 日本一卡二卡3卡四卡网站精品 | 精品亚洲综合在线第一区 | 亚洲国产人久久久成人精品网站 | 噜噜噜噜噜久久久久久91 | 黄色网址 在线播放 | www.青草视频 | 大又大又粗又爽又黄毛片女人 | 国产精品伦理久久久久 | 国产chinesetube| 网址色 | 福利视频一区二区三区 | 一级一片免费视频播放 | 在线看一区二区 | 天天槽天天槽天天槽 | 扒开双腿疯狂进出爽爽爽 | 欧美日本视频一区 | 亚洲乱码中文字幕综合 | 亚洲日本黄色 | 狠狠操天天 | 久久精品草 | 在线观看免费国产 | 五月婷六月 | 大尺度免费高清在线观看视频 | 欧美性爽xxxⅹbbbb | 日b毛片 | 国产成人精品一区二区三区 | 高h上错人1v1| 国产在线视频不卡 | 亚洲国产成人在人网站天堂 | 欧美色视频在线观看 | 亚洲国产成a人v在线观看 | 一本到午夜92版免费福利 | 天天做天天爱夜夜爽毛片毛片 | 日日夜夜天天久久 | 黄网免费 | 亚洲一区视频 | 欧美a在线| 久久久久国产精品 | 97一区二区三区 | 成人在线黄色 |