国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Verilog基礎(chǔ)之十四、FIFO實現(xiàn)

這篇具有很好參考價值的文章主要介紹了Verilog基礎(chǔ)之十四、FIFO實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、FIFO

1.1 定義

1.2 實現(xiàn)方式

1.3 實現(xiàn)原理??

二、代碼實現(xiàn)

三、仿真結(jié)果

3.1 復(fù)位階段

3.2 寫入階段

3.3?讀取階段

3.4?同時讀寫或不讀不寫

四、參考資料


一、FIFO

1.1 定義

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

1.2 實現(xiàn)方式

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

1.3 實現(xiàn)原理??

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

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

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

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

二、代碼實現(xiàn)

?????代碼為書籍《FPGA應(yīng)用技術(shù)及實踐》中5.3.3 FIFO設(shè)計中的代碼,相比原代碼中,對read/write為00時,對count的值變化進行了修改,修改為count<=count更合理,設(shè)計為實現(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翻轉(zhuǎn)在201ns,read翻轉(zhuǎn)在#252,即避免了和時鐘的上升沿同步,也避免了和write翻轉(zhuǎn)的同步

`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

三、仿真結(jié)果

3.1 復(fù)位階段

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

Verilog基礎(chǔ)之十四、FIFO實現(xiàn),Verilog學(xué)習(xí)筆記,FPGA所知所見所解,Vivado,fpga開發(fā),FIFO,modelsim

?

3.2 寫入階段

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

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

Verilog基礎(chǔ)之十四、FIFO實現(xiàn),Verilog學(xué)習(xí)筆記,FPGA所知所見所解,Vivado,fpga開發(fā),FIFO,modelsim

?

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。讀出順序與寫入順序一致,即先入先出。

Verilog基礎(chǔ)之十四、FIFO實現(xiàn),Verilog學(xué)習(xí)筆記,FPGA所知所見所解,Vivado,fpga開發(fā),FIFO,modelsim

3.4?同時讀寫或不讀不寫

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

Verilog基礎(chǔ)之十四、FIFO實現(xiàn),Verilog學(xué)習(xí)筆記,FPGA所知所見所解,Vivado,fpga開發(fā),FIFO,modelsim

?

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

Verilog基礎(chǔ)之十四、FIFO實現(xiàn),Verilog學(xué)習(xí)筆記,FPGA所知所見所解,Vivado,fpga開發(fā),FIFO,modelsim

?

四、參考資料

書籍《FPGA應(yīng)用技術(shù)及實踐》中5.3.3 FIFO設(shè)計章節(jié)

????文章來源地址http://www.zghlxwxcb.cn/news/detail-543324.html

到了這里,關(guān)于Verilog基礎(chǔ)之十四、FIFO實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • FPGA學(xué)習(xí)筆記——FIFO讀寫

    FPGA學(xué)習(xí)筆記——FIFO讀寫

    【實驗任務(wù)】向FIFO中以50MHz的頻率按順序?qū)懭?~254,再從FIFO中以5Hz的頻率按順序讀出0~254,輸出到LED中點亮。 FIFO全稱為“First-In-First-Out”,是FPGA內(nèi)部的存儲數(shù)據(jù)的緩沖器,讀寫數(shù)據(jù)具有先入先出的特點,與數(shù)據(jù)結(jié)構(gòu)中的“隊列”有異曲同工之妙。 本博客例化紫光同創(chuàng)官方提

    2024年02月15日
    瀏覽(19)
  • FPGA學(xué)習(xí)筆記(3):FIFO

    FPGA學(xué)習(xí)筆記(3):FIFO

    FIFO是First Input First Output的英文簡寫 代表先進的數(shù)據(jù)先出 ,后進的數(shù)據(jù)后出。 FIFO存儲器是系統(tǒng)的緩沖環(huán)節(jié),如果沒有FIFO存儲器,整個系統(tǒng)就不可能正常工作。 FIFO的功能可以概括為 (1)對連續(xù)的數(shù)據(jù)流進行緩存,防止在進機和存儲操作時丟失數(shù)據(jù); (2)數(shù)據(jù)集中起來進行

    2024年01月19日
    瀏覽(24)
  • Verilog基礎(chǔ)之十一、移位寄存器實現(xiàn)

    Verilog基礎(chǔ)之十一、移位寄存器實現(xiàn)

    目錄 一、前言 二、工程設(shè)計 ?2.1 工程代碼 2.2 綜合結(jié)果 2.3 仿真結(jié)果 ????移位寄存器SRL在工程中屬于使用頻率較高個模塊,可用于存儲數(shù)據(jù),實現(xiàn)串并轉(zhuǎn)換;根據(jù)數(shù)據(jù)移動方向可分為左移寄存器,右移寄存器,左移是向數(shù)據(jù)高位移動,右移是向數(shù)據(jù)低位移動。? 工程中包

    2024年02月11日
    瀏覽(25)
  • FPGA學(xué)習(xí)筆記:verilog基礎(chǔ)代碼與modelsim仿真(六)——vga顯示模塊

    FPGA學(xué)習(xí)筆記:verilog基礎(chǔ)代碼與modelsim仿真(六)——vga顯示模塊

    VGA顯示 目標(biāo):實現(xiàn)屏幕紅、橙、黃、綠、青、藍、紫、黑、白、灰條形顯示 1. 模塊框圖與波形圖 vga_colorbar是實現(xiàn)目標(biāo)功能的總體模塊框圖,為了實現(xiàn)對應(yīng)的輸出,我們使用三個具體功能模塊實現(xiàn)功能。 (1) clk_gen——使用pll鎖相環(huán)實現(xiàn)時鐘分頻 (2)vga_ctrl——圖像控制與輸出模

    2024年02月04日
    瀏覽(20)
  • FPGA 學(xué)習(xí)筆記:Verilog 實現(xiàn)LED流水燈控制

    在初步了解 Xilinx Vivado 的使用后,開啟了FPGA Hello World 程序:LED 流水燈控制 在嵌入式MCU中,流水燈需要延時來實現(xiàn),F(xiàn)PGA的延時,使用外部晶振來實現(xiàn) 實現(xiàn) 3個 LED 流水燈控制,也就是循環(huán)依次點亮, LED 低電平亮, 高電平滅,F(xiàn)PGA 有一個40MHz的外部晶振,作為系統(tǒng)時鐘輸入開

    2023年04月08日
    瀏覽(32)
  • FPGA學(xué)習(xí)筆記(1):使用Verilog實現(xiàn)常見的加法器

    FPGA學(xué)習(xí)筆記(1):使用Verilog實現(xiàn)常見的加法器

    本文使用VerilogHDL實現(xiàn)一些簡單的加法器,本人水平有限,希望大佬能夠多指證 Quartus Prime(18.0) Modelsim 半加器可以用于計算兩個單比特二進制數(shù)的和,C表征進位輸出,S表述計算的結(jié)果。 半加器的真值表 化簡以后的邏輯表達式可以表達為: s = a’b+ab’ c = ab Verilog 代碼塊 全加

    2024年02月09日
    瀏覽(14)
  • FPGA的Verilog設(shè)計(二)——異步FIFO

    FPGA的Verilog設(shè)計(二)——異步FIFO

    閱讀本文前,建議先閱讀下面幾篇文章: 同步FIFO 二進制轉(zhuǎn)格雷碼的實現(xiàn) ??在上篇文章同步FIFO中簡要介紹了FIFO的基本概念以及同步FIFO的實現(xiàn)。本篇文章將重點介紹異步FIFO的工作原理以及硬件實現(xiàn)。 ??異步FIFO的讀寫時鐘不同,F(xiàn)IFO的讀寫需要進行異步處理, 異步FIFO常用

    2024年02月04日
    瀏覽(22)
  • FPGA的通用FIFO設(shè)計verilog,1024*8bit仿真,源碼和視頻

    FPGA的通用FIFO設(shè)計verilog,1024*8bit仿真,源碼和視頻

    名稱:FIFO存儲器設(shè)計1024*8bit 軟件:Quartus 語言:Verilog 本代碼為FIFO通用代碼,其他深度和位寬可簡單修改以下參數(shù)得到 代碼功能: 設(shè)計一個基于FPGA的FIFO存儲器,使之能提供以下功能? 1.存儲空間至少1024 儲器? 2.存儲位寬8bit? 3.拓展功能:存儲器空、滿報警 演示視頻:http://

    2024年02月06日
    瀏覽(26)
  • FIFO設(shè)計筆記(雙口RAM、同步FIFO、異步FIFO)Verilog及仿真

    FIFO設(shè)計筆記(雙口RAM、同步FIFO、異步FIFO)Verilog及仿真

    0.1、FIFO FIFO (First-In-First-Out) 是一種先進先出的數(shù)據(jù)緩存器,在數(shù)字ASIC設(shè)計中常常被使用。在實際開發(fā)中,多數(shù)都是直接使用公司經(jīng)過top-out驗證的FIFO IP或者是ISE/Vivado工具自帶的FIFO IP,并不需要自己造輪子。但是,作為設(shè)計者,必須要掌握FIFO的設(shè)計方法,這樣可以適配于各種

    2023年04月09日
    瀏覽(88)
  • FPGA學(xué)習(xí)筆記-知識點3-Verilog語法1

    FPGA學(xué)習(xí)筆記-知識點3-Verilog語法1

    按其功能可分為以下幾類: 1) 算術(shù)運算符(+,-,×,/,%) 2) 賦值運算符(=,=) 3) 關(guān)系運算符(,,=,=) 4) 邏輯運算符(,||,!) 5) 條件運算符( ? :) 6) 位運算符(,|,^,,^) 7) 移位運算符(,) 8) 拼接運算符({ }) 9) 其它 按其所帶操作數(shù)的個數(shù)運算符可分為三種: 1) 單目運算符(unary operator):可以帶一個

    2024年02月06日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包