アルテラ FPGA のコードには 8 つのメモリがあり、メモリ初期化ファイル (mifs) を使用して初期化する必要があります。異なる mifs でメモリをインスタンス化できるようにするために、メモリ定義ファイルに次の変更を加えます。
オリジナルコード
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 を使用して記憶をインスタンス化することにしました。
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
ただし、これは機能しません。各インスタンス化に渡されたメモリ初期化ファイル パラメータが正しくありません。
私は何をしますか?