Vivado IP核提供了強(qiáng)大的FIFO生成器,可以通過圖形化配置快速生成FIFO IP核。
本文將詳細(xì)介紹如何在Vivado中配置一個FIFO IP核,以及如何調(diào)用這個FIFO IP核。
一、FIFO IP核的配置
1、新建FIFO IP
在Vivado的IP Catalog中找到FIFO Generator IP核,雙擊打開參數(shù)配置界面。
2、配置FIFO基本參數(shù)
編輯切換為居中
添加圖片注釋,不超過 140 字(可選)
(1)接口類型
Native interface FIFOs:
這是最基本的FIFO接口,包括數(shù)據(jù)輸入、輸出端口、寫使能、讀使能等信號。
AXI Memory Mapped interface FIFOs:
這種接口將 FIFO 封裝為一個AXI內(nèi)存映射的IP核,可以通過AXI總線進(jìn)行訪問。
AXI4-Stream interface FIFOs:
這種接口兼容AXI4-Stream協(xié)議,適合在流式數(shù)據(jù)傳輸場景中使用。
(2)時鐘類型和資源類型
時鐘:
同步時鐘(common clock) 和 異步時鐘(Independent clock)
資源:
block RAM、Distributed RAM、Shift Register、Built-in FIFO
3、配置fifo接口參數(shù)
(1)讀模式設(shè)置
Standard FIFO:標(biāo)誰讀模式,接收到讀使能后下一個周期輸出數(shù)據(jù)
First Word Fall Through:先入先出模式,只有FIFO中有數(shù)據(jù),則自動輸出第一個數(shù)據(jù),并保持這個數(shù)據(jù)輸出
(2)數(shù)據(jù)接口參數(shù)設(shè)置
FIFO讀數(shù)據(jù)接口的位寬和深度,F(xiàn)IFO寫數(shù)據(jù)接口的位寬和深度
(3)ECC和輸出寄存器設(shè)置
(4)初始化設(shè)置
4、狀態(tài)信號接口設(shè)置
根據(jù)實(shí)際需求,選擇對應(yīng)的狀態(tài)信號即可。
注意(Programmable Flags):自定義FIFO緩存深度是否達(dá)到設(shè)定值的信號,可以用于設(shè)定半滿或半空信號。
5、計(jì)數(shù)端口設(shè)置
fifo已緩存的數(shù)據(jù)深度計(jì)數(shù),可選。
6、FIFO設(shè)置參數(shù)總覽
這是FIFO IP的設(shè)置參數(shù)總覽,可看到資源消耗、寬度、深度、讀延遲等信息。
7、點(diǎn)擊OK生成FIFO IP核。
二、FIFO IP核的接口
生成的FIFO IP核提供以下接口:
wr_clk 寫時鐘
rd_clk 讀時鐘
din 數(shù)據(jù)輸入端口,寬度為配置的Data Width;
wr_en 寫使能信號;
rd_en 讀使能信號;
dout 數(shù)據(jù)輸出端口;
full 滿標(biāo)志,高電平表示FIFO滿;
empty 空標(biāo)志,高電平表示FIFO空;
almost_full 幾乎滿標(biāo)志;
almost_empty 幾乎空標(biāo)志;
valid 有效數(shù)據(jù)標(biāo)志
rd_data_count 讀計(jì)數(shù)
wr_data_count 寫計(jì)數(shù)
overflow 寫溢出標(biāo)記
underflow 讀溢出標(biāo)記
三、FIFO IP核的調(diào)用
FIFO IP核的調(diào)用很簡單,只需要對接口進(jìn)行適當(dāng)?shù)倪B接,并根據(jù)Full和Empty標(biāo)志控制讀寫使能信號。下面給出一個簡單的調(diào)用例子:
module fifo_test(
input clk,
input [17:0] din,
input wr_en, rd_en,
output valid,
output [17:0] dout,
output full, empty, overflow, underflow
);
fifo_generator_0 fifo_inst(
.clk(clk),
.din(din),
.wr_en(wr_en),
.rd_en(rd_en),
.dout(dout),
.full(full),
.empty(empty),
.overflow(overflow),
.valid(valid),
.underflow(underflow)
);
endmodule
在這個例子中,din和wr_en分別連接到FIFO的輸入端口,dout和empty連接到輸出端口。在寫入數(shù)據(jù)時需要檢查full信號,在讀出數(shù)據(jù)時需要檢查empty信號,以避免overflow和underflow的情況發(fā)生。
下面是FIFO IP核的一個簡單的testbench:
`timescale 1ns / 1ps
module fifo_testbench();
reg clk;
reg [17:0] din;
reg wr_en;
reg rd_en;
wire valid;
wire [17:0] dout;
wire full, empty, overflow, underflow;
fifo_test dut(
.clk(clk),
.din(din),
.wr_en(wr_en),
.rd_en(rd_en),
.dout(dout),
.full(full),
.empty(empty),
.overflow(overflow),
.valid(valid),
.underflow(underflow)
);
always #5 clk = ~clk;
initial begin
clk = 0;
wr_en = 0; rd_en = 0;
#10;
wr_en = 1; din = 18'd1;
#10;
wr_en = 1; din = 18'd2;
#10;
wr_en = 1; din = 18'd3;
#10;
wr_en = 0; rd_en = 1;
#10;
wr_en = 0; rd_en = 1;
#10;
wr_en = 1; din = 18'd4;
wr_en = 1; din = 18'd5;
#10;
wr_en = 0; rd_en = 1;
#10
wr_en = 0; rd_en = 1;
#10;
$finish;
end
endmodule
這個testbench通過 Applying 不同的讀寫使能信號來測試FIFO的寫入和讀取功能。
仿真測試圖:
(1)FIFO讀模式設(shè)置為“Standard FIFO”
valid信號完全由rd_en控制。
(2)FIFO讀模式設(shè)置為“First Word Fall Through”
緩存一定長度數(shù)據(jù)后,自動讀取第一個數(shù)據(jù),并保持,直到下一個rd_en 信號到來。
四、總結(jié)
通過上面的描述,我們詳細(xì)介紹了如何在Vivado中配置FIFO IP核,F(xiàn)IFO的接口信號,以及如何調(diào)用FIFO IP核的一個簡單例子。FIFO是一種非常常用的IP核,通過Vivado的FIFO Generator可以大大簡化配置和使用FIFO的過程。
-
接口
+關(guān)注
關(guān)注
33文章
8447瀏覽量
150720 -
fifo
+關(guān)注
關(guān)注
3文章
386瀏覽量
43492 -
IP核
+關(guān)注
關(guān)注
4文章
326瀏覽量
49376 -
生成器
+關(guān)注
關(guān)注
7文章
313瀏覽量
20948 -
Vivado
+關(guān)注
關(guān)注
19文章
804瀏覽量
66222
發(fā)布評論請先 登錄
相關(guān)推薦
評論