Verilog中的参数化FIFO实例化

时间:2015-12-28 23:47:26

标签: verilog xilinx fifo synthesis

我想要一个参数化的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....);
你可以建议我有办法吗?

1 个答案:

答案 0 :(得分:0)

这是LRM所说的:

  

参数表示常量;因此,修改它们是违法的   运行时的值。但是,可以在以下位置修改模块参数   编译时间的值与那些值不同   在声明分配中指定。这允许定制   模块实例。可以使用defparam修改参数   语句或模块实例语句。的典型用途   参数用于指定变量的延迟和宽度。

'运行时'表示在仿真过程中,经过精心设计。合成器不会“运行”任何东西,但你正在做的事情实际上是“运行时间”,因此是非法的。

但这并不意味着你不能这样做。将FIFO深度作为模块端口传递。我假设你知道如何从第一原理编写FIFO。如果是这样,您通常会有一个FIFO大小的常量;只需将此常量替换为端口上的值,并找到一些设置内存大小的方法。显然,在更改FIFO大小时需要小心 - 例如,您可能需要重置它。如果您不知道如何编写FIFO,您应该询问FPGA或电子标签。