vivado ip核提供了强大的fifo生成器,可以通过图形化配置快速生成fifo ip核。
本文将详细介绍如何在vivado中配置一个fifo ip核,以及如何调用这个fifo ip核。
一、fifo ip核的配置1、新建fifo ip在vivado的ip catalog中找到fifo generator ip核,双击打开参数配置界面。
2、配置fifo基本参数
编辑切换为居中
添加图片注释,不超过 140 字(可选)
(1)接口类型
native interface fifos:
这是最基本的fifo接口,包括数据输入、输出端口、写使能、读使能等信号。
axi memory mapped interface fifos:
这种接口将 fifo 封装为一个axi内存映射的ip核,可以通过axi总线进行访问。
axi4-stream interface fifos:
这种接口兼容axi4-stream协议,适合在流式数据传输场景中使用。
(2)时钟类型和资源类型
时钟:
同步时钟(common clock) 和 异步时钟(independent clock)
资源:
block ram、distributed ram、shift register、built-in fifo
3、配置fifo接口参数
(1)读模式设置
standard fifo:标谁读模式,接收到读使能后下一个周期输出数据
first word fall through:先入先出模式,只有fifo中有数据,则自动输出第一个数据,并保持这个数据输出
(2)数据接口参数设置
fifo读数据接口的位宽和深度,fifo写数据接口的位宽和深度
(3)ecc和输出寄存器设置
(4)初始化设置
4、状态信号接口设置根据实际需求,选择对应的状态信号即可。
注意(programmable flags):自定义fifo缓存深度是否达到设定值的信号,可以用于设定半满或半空信号。
5、计数端口设置fifo已缓存的数据深度计数,可选。
6、fifo设置参数总览这是fifo ip的设置参数总览,可看到资源消耗、宽度、深度、读延迟等信息。
7、点击ok生成fifo ip核。二、fifo ip核的接口生成的fifo ip核提供以下接口:
wr_clk 写时钟
rd_clk 读时钟
din 数据输入端口,宽度为配置的data width;
wr_en 写使能信号;
rd_en 读使能信号;
dout 数据输出端口;
full 满标志,高电平表示fifo满;
empty 空标志,高电平表示fifo空;
almost_full 几乎满标志;
almost_empty 几乎空标志;
valid 有效数据标志
rd_data_count 读计数
wr_data_count 写计数
overflow 写溢出标记
underflow 读溢出标记
三、fifo ip核的调用fifo ip核的调用很简单,只需要对接口进行适当的连接,并根据full和empty标志控制读写使能信号。下面给出一个简单的调用例子:
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连接到输出端口。在写入数据时需要检查full信号,在读出数据时需要检查empty信号,以避免overflow和underflow的情况发生。
下面是fifo ip核的一个简单的testbench:
`timescale 1ns / 1psmodule 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;endendmodule这个testbench通过 applying 不同的读写使能信号来测试fifo的写入和读取功能。
仿真测试图:
(1)fifo读模式设置为“standard fifo”
valid信号完全由rd_en控制。
(2)fifo读模式设置为“first word fall through”
缓存一定长度数据后,自动读取第一个数据,并保持,直到下一个rd_en 信号到来。
四、总结通过上面的描述,我们详细介绍了如何在vivado中配置fifo ip核,fifo的接口信号,以及如何调用fifo ip核的一个简单例子。fifo是一种非常常用的ip核,通过vivado的fifo generator可以大大简化配置和使用fifo的过程。
玻色量子揭秘之背包问题与Ising建模描述
Linux系统如何安装curl
白鹤滩-江苏±800kV特高压直流输电工程即将开建 预计今年6月开工
干货!新的蓝牙5.0射频测试系统送给你
飞腾公司为客户数字化转型升级提供一体化赋能解决方案
如何在Vivado中配置FIFO IP核
“电子警察”系统交通智能客户端的应用
DRAM合约价续涨 4GB模组均价站上18美元大关
海南省设立首支科技成果转化投资基金
科技创新为我们燃起了新希望“无镜头”的成像技术
为NVIDIA MLPerf Training v2.0性能提供动力的全堆栈优化
霍尼韦尔为对抗新冠疫情而推出数字体温筛查系统
Linux configfs的内部机制介绍
PCB设计保形涂层的作用 假冒元器件对PCBA线路板有何危害
中芯国际从纽交所退市 称与贸易战无关
军用热电池国外的发展
摩尔线程与泊湾盘古播控服务器软件完成产品兼容互认证
应对军事挑战:为宽温度范围系统设计
亚马逊语音助手Alexa对话录音遭数千人审核
智能变送器的阻抗匹配问题