我想要一个参数化的FIFO实例化,以便我可以调用深度(参数)变化的单个FIFO实例。
e.g。我已经为FIFO编写了一个深度作为参数的代码。
我只能通过微处理器的配置知道FIFO的深度。根据寄存器配置,我可以用值变量参数调用这个FIFO吗?
integer depth_param;
if(config_reg[1])
depth_param <= 128;
else
depth_param <= 512;
genfifo #(depth_param) (.din (din),.wr(wr)....);
fifo模块是:
module gen_fifo #(depth = 128)
( din,wr,rd,clk....);
你可以建议我有办法吗?
答案 0 :(得分:0)
这是LRM所说的:
参数表示常量;因此,修改它们是违法的 运行时的值。但是,可以在以下位置修改模块参数 编译时间的值与那些值不同 在声明分配中指定。这允许定制 模块实例。可以使用defparam修改参数 语句或模块实例语句。的典型用途 参数用于指定变量的延迟和宽度。
'运行时'表示在仿真过程中,经过精心设计。合成器不会“运行”任何东西,但你正在做的事情实际上是“运行时间”,因此是非法的。
但这并不意味着你不能这样做。将FIFO深度作为模块端口传递。我假设你知道如何从第一原理编写FIFO。如果是这样,您通常会有一个FIFO大小的常量;只需将此常量替换为端口上的值,并找到一些设置内存大小的方法。显然,在更改FIFO大小时需要小心 - 例如,您可能需要重置它。如果您不知道如何编写FIFO,您应该询问FPGA或电子标签。