如何在 verilog 中连接参数和整数
How do I concatenate parameters and integers in verilog
我的 Altera FPGA 代码有 8 个内存,我需要使用内存初始化文件 (mifs) 对其进行初始化。为了使我能够用不同的 mif 实例化内存,我对内存定义文件进行了以下更改。
原码
module my_memory (
input clk,addr,din,wen,ren;
output dout);
...
...
defparam
altsyncram_component.init_file = "memory_init.mif";
...
endmodule
修改后的代码
module my_memory (
input clk,addr,din,wen,ren;
output dout
);
parameter MIFNAME = "memory_init.mif";
...
...
...
defparam
altsyncram_component.init_file = MIFNAME,
...
endmodule
这现在允许我实例化多个内存块并将初始化文件作为参数传递。
我的内存实例化现在看起来像这样
my_memory #(.MIFNAME("mem_0_init.mif") u_mem0 (...);
my_memory #(.MIFNAME("mem_1_init.mif") u_mem1 (...);
my_memory #(.MIFNAME("mem_2_init.mif") u_mem2 (...);
my_memory #(.MIFNAME("mem_3_init.mif") u_mem3 (...);
my_memory #(.MIFNAME("mem_4_init.mif") u_mem4 (...);
然后我决定使用生成器实例化我的记忆
generate
genvar i;
for (i=0; i<=4; i=i+1)
begin : MEM_INST
mem_memory #(.MIFNAME({"mem_",i,"_init.mif"}) u_mem (...);
end
endgenerate
但是这不起作用。传递给每个实例化的内存初始化文件参数不正确。
我该怎么办?
如果你会用SystemVerilog,那么这就是你可以写的
mem_memory #(.MIFNAME($sformatf("mem_%0d_init.mif",i)) u_mem (...);
否则你需要在参数方面发挥创意
genvar i;
for (i=0; i<=4; i=i+1)
begin : MEM_INST
localparam [7:0] index = "0"+i;
mem_memory #(.MIFNAME({"mem_",index,"_init.mif"}) u_mem (...);
end
endgenerate
我的 Altera FPGA 代码有 8 个内存,我需要使用内存初始化文件 (mifs) 对其进行初始化。为了使我能够用不同的 mif 实例化内存,我对内存定义文件进行了以下更改。
原码
module my_memory (
input clk,addr,din,wen,ren;
output dout);
...
...
defparam
altsyncram_component.init_file = "memory_init.mif";
...
endmodule
修改后的代码
module my_memory (
input clk,addr,din,wen,ren;
output dout
);
parameter MIFNAME = "memory_init.mif";
...
...
...
defparam
altsyncram_component.init_file = MIFNAME,
...
endmodule
这现在允许我实例化多个内存块并将初始化文件作为参数传递。
我的内存实例化现在看起来像这样
my_memory #(.MIFNAME("mem_0_init.mif") u_mem0 (...);
my_memory #(.MIFNAME("mem_1_init.mif") u_mem1 (...);
my_memory #(.MIFNAME("mem_2_init.mif") u_mem2 (...);
my_memory #(.MIFNAME("mem_3_init.mif") u_mem3 (...);
my_memory #(.MIFNAME("mem_4_init.mif") u_mem4 (...);
然后我决定使用生成器实例化我的记忆
generate
genvar i;
for (i=0; i<=4; i=i+1)
begin : MEM_INST
mem_memory #(.MIFNAME({"mem_",i,"_init.mif"}) u_mem (...);
end
endgenerate
但是这不起作用。传递给每个实例化的内存初始化文件参数不正确。
我该怎么办?
如果你会用SystemVerilog,那么这就是你可以写的
mem_memory #(.MIFNAME($sformatf("mem_%0d_init.mif",i)) u_mem (...);
否则你需要在参数方面发挥创意
genvar i;
for (i=0; i<=4; i=i+1)
begin : MEM_INST
localparam [7:0] index = "0"+i;
mem_memory #(.MIFNAME({"mem_",index,"_init.mif"}) u_mem (...);
end
endgenerate