Verilog 使用define宏实例化模块名称
我试图用不同的实例名多次实例化一个verilog模块,以便它依赖于宏定义。是这样的Verilog 使用define宏实例化模块名称,verilog,system-verilog,Verilog,System Verilog,我试图用不同的实例名多次实例化一个verilog模块,以便它依赖于宏定义。是这样的 `define CHAN_NO 0 mymodule #(.chan_no(`CHAN_NO)) inst<CHAN_NO> ( .Addr (ADDR_A ) ,.Data (DATA_A ) ,.Clk (CLK ) ); `define CHAN\u NO 0 我的模块('chan#u no(`chan#u no))inst( .
`define CHAN_NO 0
mymodule #(.chan_no(`CHAN_NO)) inst<CHAN_NO> (
.Addr (ADDR_A )
,.Data (DATA_A )
,.Clk (CLK )
);
`define CHAN\u NO 0
我的模块('chan#u no(`chan#u no))inst(
.Addr(Addr_A)
,.数据(数据_A)
,.Clk(Clk)
);
当然,这是一个简化的示例,因为实例化和宏来自不同的文件。这是可能的吗?如果是的话,什么是进行这种实例化的正确方法。当然是可能的。您应该使用生成块:
genvar i;
generate
for (i = 0; i < `CHAN_NO; i=i+1)
begin : mymodule_instance
mymodule #(.chan_no(i)) mymodule_inst (
.Addr (ADDR_A )
,.Data (DATA_A )
,.Clk (CLK )
);
end
endgenerate
编辑:
如果您想拥有一个依赖于宏的实例名,则可以这样做:
`define INSTANCE_NUM 0
`define INSTANCE_NAME(x) instance_name``x``
mymodule #(.chan_no(`INSTANCE_NUM)) `INSTANCE_NAME(`INSTANCE_NUM) (
.Addr (ADDR_A )
,.Data (DATA_A )
,.Clk (CLK )
);
`define INSTANCE_NUM 0
`define INSTANCE_NAME(x) instance_name``x``
mymodule #(.chan_no(`INSTANCE_NUM)) `INSTANCE_NAME(`INSTANCE_NUM) (
.Addr (ADDR_A )
,.Data (DATA_A )
,.Clk (CLK )
);