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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

XILINX FPGA IP之FIFO Generator例化仿真

CHANBAEK ? 來源: FPGA自學(xué)筆記分享 ? 作者: FPGA自學(xué)筆記分享 ? 2023-09-07 18:31 ? 次閱讀

上文XILINX FPGA IP之FIFO對XILINX FIFO Generator IP的特性和內(nèi)部處理流程進行了簡要的說明,本文通過實際例子對該IP的使用進行進一步的說明。本例子例化一個讀數(shù)據(jù)位寬是寫數(shù)據(jù)位寬兩倍的FIFO,然后使用讀時鐘頻率:寫時鐘頻率=2:3,進行簡單的FIFO跨時鐘域操作。

首先了解一下FIFO讀寫位寬不一致時數(shù)據(jù)的擺放方式:

讀數(shù)據(jù)位寬是寫數(shù)據(jù)位寬的4倍的情況下的寫如何讀出數(shù)據(jù)擺放方式如下:

圖片

寫數(shù)據(jù)位寬是讀數(shù)據(jù)位寬的4倍的情況下的寫如何讀出數(shù)據(jù)擺放方式如下:

圖片

然后,開始例化IP,生成一個FIFO,使用BRAM搭建,兩個獨立時鐘:

圖片

寫位寬18bit,讀位寬36bit,讀寫數(shù)據(jù)位寬比為1:2.

圖片

例化的總結(jié)為:

圖片

例化的端口為:

//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
fifo_generator_0 your_instance_name (
  .rst(rst),                      // input wire rst
  .wr_clk(wr_clk),                // input wire wr_clk
  .rd_clk(rd_clk),                // input wire rd_clk
  .din(din),                      // input wire [17 : 0] din
  .wr_en(wr_en),                  // input wire wr_en
  .rd_en(rd_en),                  // input wire rd_en
  .dout(dout),                    // output wire [35 : 0] dout
  .full(full),                    // output wire full
  .almost_full(almost_full),      // output wire almost_full
  .empty(empty),                  // output wire empty
  .almost_empty(almost_empty),    // output wire almost_empty
  .rd_data_count(rd_data_count),  // output wire [7 : 0] rd_data_count
  .wr_data_count(wr_data_count),  // output wire [8 : 0] wr_data_count
  .wr_rst_busy(wr_rst_busy),      // output wire wr_rst_busy
  .rd_rst_busy(rd_rst_busy)      // output wire rd_rst_busy
);

根據(jù)這個端口,編寫tb,如下。設(shè)置讀寫時鐘頻率比為2:3。寫側(cè):復(fù)位釋放后,即拉高寫使能,寫入自加數(shù),直到1000后停止寫入。讀側(cè):只要非空就開始一直讀取數(shù)據(jù)。

// ============================================================
// File Name: tb_fifo_generator
// VERSION  : V1.0
// DATA     : 2023/7/23
// Author   : FPGA干貨分享
// ============================================================
// 功能:xilinx fifo_generator ip 代碼仿真
// delay : 
// ============================================================




`timescale 1ns/100ps
module tb_fifo_generator ;


reg                 rst              ='d1  ;
reg                 wr_clk           ='d1  ;
reg                 rd_clk           ='d1  ;
reg      [17 : 0]   din              ='d1  ;
reg                 wr_en            ='d0  ;
reg                 rd_en            ='d0  ;
wire     [35 : 0]   dout               ;
wire                full               ;
wire                almost_full        ;
wire                empty              ;
wire                almost_empty       ;
wire [7 : 0]        rd_data_count      ;
wire [8 : 0]        wr_data_count      ;
wire                wr_rst_busy        ;
wire                rd_rst_busy        ;


initial
    begin
        rst = 1'b1;
        #1000;
        rst = 1'b0;
    end


always #2 wr_clk = ~wr_clk;
always #3 rd_clk = ~rd_clk;


// ==================wr_clk======================//


always @(posedge wr_clk )
    if(din >= 'd1000)
        wr_en <= 1'b0;
    else if(~wr_rst_busy&&~rst)
        wr_en <= 1'b1;
    else
        wr_en <= 1'b0;


always @(posedge wr_clk)
    if(wr_en)
        din <= din + 1'b1;
    else
        din <= din;


// ==================rd_clk======================//
always @(posedge rd_clk)
    rd_en <= (!empty)&&(!rd_rst_busy);








//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
fifo_generator_0 fifo_generator_0 (    
  .rst              (rst            ), // input wire rst
  .wr_clk           (wr_clk         ), // input wire wr_clk
  .rd_clk           (rd_clk         ), // input wire rd_clk
  .din              (din            ), // input wire [17 : 0] din
  .wr_en            (wr_en          ), // input wire wr_en
  .rd_en            (rd_en          ), // input wire rd_en
  .dout             (dout           ), // output wire [35 : 0] dout
  .full             (full           ), // output wire full
  .almost_full      (almost_full    ), // output wire almost_full
  .empty            (empty          ), // output wire empty
  .almost_empty     (almost_empty   ), // output wire almost_empty
  .rd_data_count    (rd_data_count  ), // output wire [7 : 0] rd_data_count
  .wr_data_count    (wr_data_count  ), // output wire [8 : 0] wr_data_count
  .wr_rst_busy      (wr_rst_busy    ), // output wire wr_rst_busy
  .rd_rst_busy      (rd_rst_busy    )  // output wire rd_rst_busy
);


endmodule

仿真結(jié)果如下:

圖片

圖片

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

    關(guān)注

    1625

    文章

    21620

    瀏覽量

    601231
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2155

    瀏覽量

    120849
  • 仿真
    +關(guān)注

    關(guān)注

    50

    文章

    4023

    瀏覽量

    133336
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    386

    瀏覽量

    43492
  • 時鐘域
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    9524
收藏 人收藏

    評論

    相關(guān)推薦

    Xilinx FPGA IPBlock Memory Generator功能概述

    Xilinx Block Memory Generator(BMG)是一個先進的內(nèi)存構(gòu)造器,它使用Xilinx fpga中的嵌入式塊RAM資源生成面積和 性能優(yōu)化的內(nèi)存。
    的頭像 發(fā)表于 11-14 17:49 ?2433次閱讀
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>Block Memory <b class='flag-5'>Generator</b>功能概述

    Xilinx FPGA IPBlock Memory Generator仿真

    上文對BMG ip的基本情況進行了簡單的描述,本文通過仿真來實際使用功能一下這個IP。
    的頭像 發(fā)表于 11-14 18:24 ?1659次閱讀
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>Block Memory <b class='flag-5'>Generator</b><b class='flag-5'>仿真</b>

    XILINX FPGA IPAXI Traffic Generator

    AXI Traffic Generator IP 用于在AXI4和AXI4-Stream互連以及其他AXI4系統(tǒng)外設(shè)上生成特定序列(流量)。它根據(jù)IP的編程和選擇的操作模式生成各種類型的AXI事務(wù)。是一個比較好用的AXI4協(xié)議測
    的頭像 發(fā)表于 11-23 16:03 ?2259次閱讀
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>AXI Traffic <b class='flag-5'>Generator</b>

    Xilinx FPGA無痛入門,海量教程免費下載

    入門指南 -- FPGA片內(nèi)FIFO實例FIFO配置Lesson55 特權(quán)Xilinx FPGA
    發(fā)表于 07-22 11:49

    Xilinx FPGA入門連載51:FPGA片內(nèi)FIFO實例之功能概述

    實例內(nèi)部系統(tǒng)功能框圖如圖所示。我們通過IP一個FIFO,定時寫入數(shù)據(jù),然后再讀出所有數(shù)據(jù)。通過ISE集成的在線邏輯分析儀chipscope,我們可以觀察
    發(fā)表于 02-26 10:26

    Xilinx FPGA入門連載52:FPGA片內(nèi)FIFO實例FIFO配置

    Xilinx FPGA入門連載52:FPGA片內(nèi)FIFO實例FIFO配置特權(quán)同學(xué),版權(quán)所有配套
    發(fā)表于 02-29 13:35

    Xilinx FPGA入門連載52:FPGA片內(nèi)FIFO實例FIFO配置

    Xilinx FPGA入門連載52:FPGA片內(nèi)FIFO實例FIFO配置特權(quán)同學(xué),版權(quán)所有配套
    發(fā)表于 02-29 13:35

    Xilinx FPGA入門連載56:FPGA片內(nèi)異步FIFO實例FIFO配置

    `Xilinx FPGA入門連載56:FPGA片內(nèi)異步FIFO實例FIFO配置特權(quán)同學(xué),版權(quán)所
    發(fā)表于 03-09 10:49

    FPGA連載62:電子點菜單FIFO說明

    `FPGA連載62:電子點菜單FIFO說明特權(quán)同學(xué),版權(quán)所有配套例程和更多資料下載鏈接
    發(fā)表于 12-26 17:22

    【正點原子FPGA連載】第十三章IPFIFO實驗-領(lǐng)航者ZYNQFPGA開發(fā)指南

    圖所示。圖 13.4.12 “fifo_generator _0_synth_1”run在其Out-of-Context綜合的過程中,我們就可以進行RTL編碼了。首先打開IP核的
    發(fā)表于 09-23 17:27

    FPGA零基礎(chǔ)學(xué)習(xí):IP CORE FIFO設(shè)計

    ,點擊Yes。 · 頂層設(shè)計頂層負責(zé)調(diào)用fifo_my,文件在ip core -> fifo_my ->
    發(fā)表于 03-15 16:19

    IP CORE FIFO 設(shè)計- ISE 操作工具

    不多說,上貨。IP CORE FIFO 設(shè)計- ISE 操作工具本篇實現(xiàn)基于叁芯智能科技的SANXIN -B02 FPGA開發(fā)板,如有入手開發(fā)板,可以登錄官方淘寶店購買,還有配套的
    發(fā)表于 04-11 20:50

    利用XILINX提供的FIFO IP進行讀寫測試

    FIFOFPGA應(yīng)用當(dāng)中非常重要的模塊,廣泛用于數(shù)據(jù)的緩存,跨時鐘域數(shù)據(jù)處理等。學(xué)好FIFOFPGA的關(guān)鍵,靈活運用好FIFO是一個
    的頭像 發(fā)表于 02-08 17:08 ?2998次閱讀
    利用<b class='flag-5'>XILINX</b>提供的<b class='flag-5'>FIFO</b> <b class='flag-5'>IP</b>進行讀寫測試

    XILINX FPGA IPDDS Compiler_ip仿真

    之前的文章對dds ip 的結(jié)構(gòu)、精度、參數(shù)、接口進行了詳細的說明,本文通過仿真對該IP的實際使用進行演示。本文
    的頭像 發(fā)表于 09-07 18:31 ?2034次閱讀
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>DDS Compiler_<b class='flag-5'>ip</b><b class='flag-5'>例</b><b class='flag-5'>化</b><b class='flag-5'>仿真</b>

    XILINX FPGA IPFIFO Generator

    在數(shù)字設(shè)計中,fifo是數(shù)據(jù)操作任務(wù)所需的普遍結(jié)構(gòu),如跨時鐘域、低延遲內(nèi)存緩沖和總線寬度轉(zhuǎn)換。
    的頭像 發(fā)表于 09-07 18:31 ?1144次閱讀
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b><b class='flag-5'>FIFO</b> <b class='flag-5'>Generator</b>