Verilog 中的参数化 FIFO 实例化

Parameterized FIFO instantiation in Verilog

我想要一个参数化的 FIFO 实例化,这样我就可以调用具有深度(参数)变化的单个 FIFO 实例。

例如我写了一个以深度为参数的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....);

请问有什么办法可以做到这一点吗?

LRM 是这么说的:

Parameters represent constants; hence, it is illegal to modify their value at run time. However, module parameters can be modified at compilation time to have values that are different from those specified in the declaration assignment. This allows customization of module instances. A parameter can be modified with the defparam statement or in the module instance statement. Typical uses of parameters are to specify delays and width of variables.

'run time'表示在模拟过程中,在阐述之后。合成器不会 'run' 任何东西,但你所做的实际上是 "run time",因此是非法的。

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