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

【FPGA】 Vivado FIFO IP核使用教程

這篇具有很好參考價值的文章主要介紹了【FPGA】 Vivado FIFO IP核使用教程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、FIFO簡介

二、FIFO的應(yīng)用

三、Vivado FIFO創(chuàng)建

四、FIFO IP核實例化

五、對實例化頂層文件仿真

一、FIFO簡介

? ? ? ?FIFO 的英文全稱是 First In First Out ,即先進(jìn)先出。 FPGA 使用的 FIFO 一般指的是對數(shù)據(jù)的存儲具有先進(jìn)先出特性的一個緩存器,常被用于數(shù)據(jù)的緩存或者高速異步數(shù)據(jù)的交互,也即所謂的跨時鐘域信號傳遞。它與 FPGA 內(nèi)部的 RAM ROM 的區(qū)別是沒有外部讀寫地址線,采取順序?qū)懭霐?shù)據(jù),順序讀出數(shù)據(jù)的方式,使用起來簡單方便,由此帶來的缺點就是不能像 RAM 和 ROM 那樣可以由地址線決定讀取或?qū)懭肽硞€指定的地址。
? ? ? ?FIFO 從輸入時鐘的角度來分,有兩種類型: 單時鐘 FIFO和雙時鐘 FIFO;單時鐘 FIFO 具有一個獨立的時鐘端口 clock,因此,所有的輸入輸出信號都同步于 clock 信號。雙時鐘 FIFO 結(jié)構(gòu)中,寫端口 和讀端口分別有獨立的時鐘,所有與寫相關(guān)的信號都是同步于寫時鐘 wr_clk,所有與讀相關(guān) 的信號都是同步于讀時鐘 rd_clk。

二、FIFO的應(yīng)用

1. 單時鐘 FIFO 常用于同步時鐘的數(shù)據(jù)緩存;
2. 雙時鐘 FIFO 常用于跨時鐘域的數(shù)據(jù)信號的傳遞,例如時鐘域 A 下的數(shù)據(jù) data1 傳遞 給異步時鐘域 B ,當(dāng) data1 為連續(xù)變化信號時,如果直接傳遞給時鐘域 B 則可能會 導(dǎo)致收到的數(shù)據(jù)不是發(fā)送的數(shù)據(jù)的情況,即在采集過程中會出現(xiàn)包括亞穩(wěn)態(tài)(數(shù)據(jù)采樣失真)問題在內(nèi)的一系列問題,使用雙時鐘 FIFO 能夠?qū)⒉煌瑫r鐘域中的數(shù)據(jù)同步到所需的時鐘域中 。

三、Vivado FIFO創(chuàng)建

1、新建工程后進(jìn)入以下界面,點擊IP Catalog,在右側(cè)界面搜索fifo,找到FIFO Cenerator打開。

【FPGA】 Vivado FIFO IP核使用教程
2、在FIFO IP核配置界面,Component Name中可以更改命名,F(xiàn)ifo Impiementation中可以選擇單時鐘(Common Clock Block RAM)和雙時鐘(Independent Clocks Block RAM),這里我選擇雙時鐘。

?【FPGA】 Vivado FIFO IP核使用教程

3、模式選擇有標(biāo)準(zhǔn)模式和FWFT模式,標(biāo)準(zhǔn)模式中讀取的數(shù)據(jù)滯后讀信號一個時鐘周期;FWFT模式中讀信號有效時,讀取的數(shù)據(jù)也立即有效。這里我選擇標(biāo)準(zhǔn)模式,設(shè)置讀寫數(shù)據(jù)位寬為16,數(shù)據(jù)深度為512,根據(jù)需要自行設(shè)置。

【FPGA】 Vivado FIFO IP核使用教程

?4、讀寫計數(shù)界面,Write Data Count表示FIFO已經(jīng)寫入多少數(shù)據(jù),Read Data Count表示FIFO中有多少數(shù)據(jù)可以讀。點擊“OK”,完成異步FIFO 配置。【FPGA】 Vivado FIFO IP核使用教程

四、FIFO IP核實例化

1、Sources里的fifo_ip.veo文件中是IP的例化模板。我們只需要將文件中內(nèi)容復(fù)制粘貼到我們verilog程序中,對IP進(jìn)行實例化。。【FPGA】 Vivado FIFO IP核使用教程

?2、我們在創(chuàng)建一個頂層設(shè)計文件來實例化這個FIFO IP, 編寫pll_test.v代碼如下。

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/03/31 14:59:11
// Design Name: 
// Module Name: fifo_test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

module fifo_test(
    input wr_clk ,//寫 FIFO 時鐘
    input rd_clk ,//讀 FIFO 時鐘
    input rst_n ,//復(fù)位
    input [7:0] wr_din ,//寫入 FIFO 的數(shù)據(jù)
    input wr_en ,//寫使能
    input rd_en ,//讀使能

    output reg [7:0] rd_dout,//從 FIFO 讀出的數(shù)據(jù)
    output reg rd_out_vld    //從 FIFO 讀出的數(shù)據(jù)有效指示信號
 );
    //信號定義
    wire [7:0] wr_data ;
    wire [7:0] q ;

    wire wr_req ;
    wire rd_req ;

    wire rd_empty ;
    wire wr_full ;

    wire [7:0] wrusedw ;
    wire [7:0] rdusedw ;
    //FIFO 例化
     fifo_ip your_instance_name (
  .wr_clk       (wr_clk     ),   // input wire wr_clk
  .rd_clk       (rd_clk     ),   // input wire rd_clk
  .din          (wr_data    ),   // input wire [15 : 0] din
  .wr_en        (wr_req     ),   // input wire wr_en
  .rd_en        (rd_req     ),   // input wire rd_en
  .dout         (q          ),   // output wire [15 : 0] dout
  .full         (wr_full    ),   // output wire full
  .empty        (rd_empty   ),   // output wire empty
  .rd_data_count(rdusedw    ),   // output wire [8 : 0] rd_data_count
  .wr_data_count(wrusedw    )    // output wire [8 : 0] wr_data_count
);
     assign wr_data = wr_din;//輸入的數(shù)據(jù)
     assign wr_req = (wr_full  == 1'b0)?wr_en:1'b0;//非滿才寫
     assign rd_req = (rd_empty == 1'b0)?rd_en:1'b0;//非空才讀
     always @(posedge rd_clk or negedge rst_n)begin
        if(!rst_n)begin
         rd_dout <= 0;
        end
         else begin
         rd_dout <= q;
        end
     end
     always @(posedge rd_clk or negedge rst_n)begin
        if(!rst_n)begin
            rd_out_vld <= 1'b0;
        end
        else begin
            rd_out_vld <= rd_req;
        end
     end
 endmodule

五、對實例化頂層文件仿真

1、我們在創(chuàng)建一個仿真激勵文件來仿真這個fifo_test頂層文件, 編寫fifo_test_tb.v代碼如下。

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/03/31 15:11:44
// Design Name: 
// Module Name: fifo_test_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module fifo_test_tb();
//時鐘和復(fù)位
    reg     wr_clk      ;
    reg     rd_clk      ;
    reg     rst_n       ;
//輸入信號
    reg [7:0]    wr_din;
    reg          wr_en ;
    reg          rd_en ;
//輸出信號
    wire        rd_out_vld  ;
    wire [7:0]  rd_dout     ;
    //參數(shù)定義
    parameter   WR_CYCLE    = 20;//寫時鐘周期,單位為 ns,
    parameter   RD_CYCLE    = 30;//讀時鐘周期,單位為 ns,
    parameter    RST_TIME   = 3 ;//復(fù)位時間,此時表示復(fù)位 3 個時鐘周期的時間。
//待測試的模塊例化
    fifo_test u_fifo_test(
    .wr_clk         (wr_clk  ),//時鐘
    .rd_clk         (rd_clk  ),
    .rst_n          (rst_n   ),//復(fù)位
    .wr_din         (wr_din  ),//寫入 FIFO 的數(shù)據(jù)
    .wr_en          (wr_en   ),//寫使能
    .rd_en          (rd_en   ),//讀使能
//輸出信號定義
    .rd_dout        (rd_dout ),//從 FIFO 讀出的數(shù)據(jù)
    .rd_out_vld     (rd_out_vld )//從 FIFO 讀出的數(shù)據(jù)有效指示信號
);
    integer i = 0;
//生成本地時鐘 50M
    initial wr_clk = 0;
    always #(WR_CYCLE/2) wr_clk=~wr_clk;
    initial rd_clk = 0;
    always #(RD_CYCLE/2) rd_clk=~rd_clk;
    //產(chǎn)生復(fù)位信號
    initial begin
    rst_n = 1;
    #2;
    rst_n = 0;
    #(WR_CYCLE*RST_TIME);
    rst_n = 1;
    end
    //輸入信號賦值
    initial begin
    #1;
    //賦初值
    wr_din = 0;
    wr_en = 0;
    #(100*WR_CYCLE);
    //開始賦值
    for(i=0;i<500;i=i+1)begin
        wr_din = {$random};
        wr_en  = {$random};
    #(1*WR_CYCLE);
    end
    #(100*WR_CYCLE);
    end
    initial begin
    #1;
    //賦初值
        rd_en = 0;
        #(120*RD_CYCLE);
    //開始賦值
    for(i=0;i<500;i=i+1)begin
        rd_en = {$random};
        #(1*RD_CYCLE);
    end
        #(100*RD_CYCLE);
        $stop;
    end
    endmodule

2、仿真結(jié)果如下,輸出rd_dout[7:0]的結(jié)果和輸入wr_din[7:0]一致。

【FPGA】 Vivado FIFO IP核使用教程文章來源地址http://www.zghlxwxcb.cn/news/detail-464359.html

到了這里,關(guān)于【FPGA】 Vivado FIFO IP核使用教程的文章就介紹完了。如果您還想了解更多內(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ìn)行投訴反饋,一經(jīng)查實,立即刪除!

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

相關(guān)文章

  • (四)零基礎(chǔ)學(xué)懂FIFO——最詳細(xì)的FIFO IP核應(yīng)用教程

    (四)零基礎(chǔ)學(xué)懂FIFO——最詳細(xì)的FIFO IP核應(yīng)用教程

    此篇為專欄 《FPGA學(xué)習(xí)筆記》 的第四篇,記錄我的學(xué)習(xí)FPGA的一些開發(fā)過程和心得感悟,剛接觸FPGA的朋友們可以先去此專欄置頂 《FPGA零基礎(chǔ)入門學(xué)習(xí)路線》來做最基礎(chǔ)的掃盲。 本篇內(nèi)容基于筆者實際開發(fā)過程和正點原子資料撰寫,將會詳細(xì)講解此FPGA實驗的全流程, 誠摯 地

    2024年02月03日
    瀏覽(18)
  • xilinx FPGA FIFO IP核的使用(VHDL&ISE)

    xilinx FPGA FIFO IP核的使用(VHDL&ISE)

    1.新建工程和ip核文件 下圖顯示了一個典型的寫操作。拉高WR_EN,導(dǎo)致在WR_CLK的下一個上升邊緣發(fā)生寫入操作。因為FIFO未滿,所以WR_ACK輸出1,確認(rèn)成功的寫入操作。當(dāng)只有一個附加的單詞可以寫入FIFO時,F(xiàn)IFO會拉高ALMOST_FULL標(biāo)志。當(dāng)ALMOST_FULL拉高之后,一個附加的寫入將導(dǎo)致

    2024年02月03日
    瀏覽(21)
  • Vivado 下 IP核之FIFO 實驗

    Vivado 下 IP核之FIFO 實驗

    目錄 Vivado 下 IP核之FIFO 實驗 1、FIFO IP 核簡介 2、實驗任務(wù) 3、程序設(shè)計 3.1、FIFO IP 核配置 3.1.1、“Basic” 選項卡下各參數(shù)配置 3.1.2、“Native Ports”選項卡下各參數(shù)配置 3.1.3、“Status Flags” 選項卡下各參數(shù)配置 3.1.4、“Data Counts(數(shù)據(jù)計數(shù))”選項卡下各參數(shù)配置 3.2、時序圖講

    2024年02月09日
    瀏覽(18)
  • vivado IP核:ILA、時鐘、RAM、FIFO

    vivado IP核:ILA、時鐘、RAM、FIFO

    vivado工具集成了邏輯分析儀,ILA IP核用于替換外部的邏輯分析儀,添加探針來監(jiān)控內(nèi)部信號波形變化。 1)IP Catalog 2)搜索欄可搜索IP核,如創(chuàng)建FIFO、RAM等。 3)搜索并選擇。 4)設(shè)置ILA各項參數(shù)。? ? 5)?設(shè)置好IP核參數(shù)后點ok。 6)打開ila_0.evo。 7)?復(fù)制ila例化模板。 8)在

    2023年04月21日
    瀏覽(24)
  • 【FPGA】Vivado軟件使用教程

    【FPGA】Vivado軟件使用教程

    目錄 ? ? ? 一、創(chuàng)建Vivado工程 二、創(chuàng)建Verilog HDL文件 三、添加管腳約束 四、時序約束 五、生成BIT文件 六、Vivido仿真 七、上板再補(bǔ)充 1、啟動Vivado,在Vivado開發(fā)環(huán)境里點擊“Create Project”,創(chuàng)建新工程。 ?2、彈出窗口點擊“Next”,在彈出的窗口中輸入工程名和存放的工程路

    2024年02月06日
    瀏覽(19)
  • 【FPGA IP系列】FIFO深度計算詳解

    FIFO(First In First Out)是一種先進(jìn)先出的存儲結(jié)構(gòu),經(jīng)常被用來在FPGA設(shè)計中進(jìn)行數(shù)據(jù)緩存或者匹配傳輸速率。 FIFO的一個關(guān)鍵參數(shù)是其深度,也就是FIFO能夠存儲的數(shù)據(jù)條數(shù),深度設(shè)計的合理,可以防止數(shù)據(jù)溢出,也可以節(jié)省FPGA資源的消耗。 影響FIFO深度計算的主要因素包括: FIF

    2024年02月06日
    瀏覽(24)
  • 【FPGA IP系列】FIFO的通俗理解

    【FPGA IP系列】FIFO的通俗理解

    FPGA廠商提供了豐富的IP核,基礎(chǔ)性IP核都是可以直接免費調(diào)用的,比如FIFO、RAM等等。 本文主要介紹FIFO的一些基礎(chǔ)知識,幫助大家能夠理解FIFO的基礎(chǔ)概念。 FIFO全稱是First In First Out,即先進(jìn)先出。 FIFO是一個數(shù)據(jù)緩存隊列,主要特點就是數(shù)據(jù)順序?qū)懭?,再按照同樣的順序輸出?shù)

    2024年02月15日
    瀏覽(17)
  • xilinx FPGA 乘法器ip核(multipler)的使用(VHDL&Vivado)

    xilinx FPGA 乘法器ip核(multipler)的使用(VHDL&Vivado)

    一、創(chuàng)建除法ip核 ?可以選擇兩個變量數(shù)相乘,也可以選擇一個變量輸入數(shù)據(jù)和一個常數(shù)相乘 可以選擇mult(dsp資源)或者lut(fpga資源) 可以選擇速度優(yōu)先或者面積優(yōu)先 可以自己選擇輸出位寬 還有時鐘使能和復(fù)位功能 ?二、編寫VHDL程序:聲明和例化乘法器ip核 三、編寫仿真程

    2024年02月11日
    瀏覽(30)
  • FPGA原理與結(jié)構(gòu)——FIFO IP核原理學(xué)習(xí)

    FPGA原理與結(jié)構(gòu)——FIFO IP核原理學(xué)習(xí)

    系列文章目錄:FPGA原理與結(jié)構(gòu)(0)——目錄與傳送門 ????????FIFO是英文First-In-First-Out的縮寫,是一種先入先出的數(shù)據(jù)緩沖器,與一般的存儲器的區(qū)別在于沒有地址線, 使用起來簡單,缺點是只能順序讀寫數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫指針自動加1完成,不能像普通存儲器

    2024年02月11日
    瀏覽(25)
  • FPGA原理與結(jié)構(gòu)(12)——FIFO IP核原理學(xué)習(xí)

    FPGA原理與結(jié)構(gòu)(12)——FIFO IP核原理學(xué)習(xí)

    系列文章目錄:FPGA原理與結(jié)構(gòu)(0)——目錄與傳送門 ????????FIFO是英文First-In-First-Out的縮寫,是一種先入先出的數(shù)據(jù)緩沖器,與一般的存儲器的區(qū)別在于沒有地址線, 使用起來簡單,缺點是只能順序讀寫數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫指針自動加1完成,不能像普通存儲器

    2024年02月08日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包