目錄
一、FIFO簡介
二、FIFO的應(yīng)用
三、Vivado FIFO創(chuàng)建
四、FIFO IP核實例化
五、對實例化頂層文件仿真
一、FIFO簡介
二、FIFO的應(yīng)用
三、Vivado FIFO創(chuàng)建
1、新建工程后進(jìn)入以下界面,點擊IP Catalog,在右側(cè)界面搜索fifo,找到FIFO Cenerator打開。

?
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è)置。
?4、讀寫計數(shù)界面,Write Data Count表示FIFO已經(jīng)寫入多少數(shù)據(jù),Read Data Count表示FIFO中有多少數(shù)據(jù)可以讀。點擊“OK”,完成異步FIFO 配置。
四、FIFO IP核實例化
1、Sources里的fifo_ip.veo文件中是IP的例化模板。我們只需要將文件中內(nèi)容復(fù)制粘貼到我們verilog程序中,對IP進(jìn)行實例化。。
?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]一致。文章來源:http://www.zghlxwxcb.cn/news/detail-464359.html
文章來源地址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)!