曰本美女∴一区二区特级A级黄色大片, 国产亚洲精品美女久久久久久2025, 页岩实心砖-高密市宏伟建材有限公司, 午夜小视频在线观看欧美日韩手机在线,国产人妻奶水一区二区,国产玉足,妺妺窝人体色WWW网站孕妇,色综合天天综合网中文伊,成人在线麻豆网观看

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

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

3天內(nèi)不再提示

基于FPGA的FIFO實現(xiàn)

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

一、FIFO

1.1 定義

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

1.2 實現(xiàn)方式

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

1.3 實現(xiàn)原理

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

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

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

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

二、代碼實現(xiàn)

代碼為書籍《FPGA應用技術及實踐》中5.3.3 FIFO設計中的代碼,相比原代碼中,對read/write為00時,對count的值變化進行了修改,修改為count<=count更合理,設計為實現(xiàn)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

//讀寫操作下的計數(shù)

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

//隊列空狀態(tài)判斷

always@(posedge clk)

begin

if(count==2'b00)

empty<=1'b1;

else

empty<=1'b0;

end

//隊列滿狀態(tài)判斷

always@(posedge clk)

begin

if(count==max_count)

full<=1'b1;

else

full<=1'b0;

end

endmodule

測試代碼

對于read和write信號,盡量避免在時鐘上升沿時進行狀態(tài)變化,如此處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));

//初始狀態(tài)賦值

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內(nèi),復位信號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原先一直處于初始化狀態(tài)2'b00,在此時因為寫入進行了empty的邏輯判斷,因為empty為0;

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

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

3.3 讀取階段

在270.1ns時,read/write的值為1/0開始從FIFO中進行數(shù)據(jù)讀取,在clk信號的1,2,3,4讀取了4個數(shù)值,根據(jù)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,此時不讀也不寫入,因此輸出狀態(tài)不變,一直為9999,

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

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

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

    關注

    1643

    文章

    21925

    瀏覽量

    612618
  • 存儲
    +關注

    關注

    13

    文章

    4478

    瀏覽量

    86962
  • 仿真
    +關注

    關注

    51

    文章

    4216

    瀏覽量

    135147
  • fifo
    +關注

    關注

    3

    文章

    397

    瀏覽量

    44523
  • 代碼
    +關注

    關注

    30

    文章

    4882

    瀏覽量

    70090

原文標題:FPGA基礎之FIFO實現(xiàn)

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    基于FPGA的異步FIFO實現(xiàn)

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

    異步FIFO結構及FPGA設計

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

    基于PCI接口芯片外擴FIFOFPGA實現(xiàn)

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

    高速異步FIFO的設計與實現(xiàn)

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

    基于FPGAFIFO設計和應用

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

    基于VHDL和FPGA的非對稱同步FIFO設計實現(xiàn)

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

    LabVIEW FPGA模塊實現(xiàn)FIFO深度設定

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

    異步FIFOFPGA與DSP通信中的運用

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

    基于FPGAFIFO設計和應用

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

    異步FIFO結構及FPGA設計

    異步FIFO結構及FPGA設計,解決亞穩(wěn)態(tài)的問題
    發(fā)表于 11-10 15:21 ?4次下載

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

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

    FPGAFIFO實現(xiàn)過程

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

    FPGA實現(xiàn)自行FIFO設計的方法

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

    FPGA電路FIFO設計的源代碼

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

    如何在Altera FPGA中使用FIFO實現(xiàn)功能設計?

    一:fifo是什么 FIFO的完整英文拼寫為FirstIn First Out,即先進先出。FPGA或者ASIC中使用到的FIFO一般指的是對數(shù)據(jù)的存儲具有先進先出特性的一個存儲器,常
    的頭像 發(fā)表于 03-12 16:30 ?3470次閱讀
    如何在Altera <b class='flag-5'>FPGA</b>中使用<b class='flag-5'>FIFO</b><b class='flag-5'>實現(xiàn)</b>功能設計?