k0b0's record.

Computer Engineering, Arts and Books

$readmemb()でメモリの初期値を設定する

$readmemb()でメモリの初期値を設定する

$readmemb()の書式

2進数で初期値を設定する場合は$readmemb()を使い、16進数で初期値を設定する場合は$readmemh()を使う($readmemhの書式は$readmemb()と同じである)。

$readmemb("初期値が記述されたファイルの絶対パス",  初期値を格納する配列);

$readmemb()を使ったROMの記述例

module rom (input  logic [31:0] Readaddress,
            output logic [31:0] Readdata);

// 32bit 10ワードのメモリを宣言
logic [31:0] mem [0:9];

// 初期値(rom.dat)を設定
initial 
begin
    $readmemb("$HOME/rom.dat", mem);
end

assign Readdata = mem[Readaddress];

endmodule

初期値(rom.dat)の記述例

2進数の記述は"_"で区切ることができる。

00000000_00000000_00000000_00000000
00000000_00000000_00000000_00000001
00000000_00000000_00000000_00000010
00000000_00000000_00000000_00000011
00000000_00000000_00000000_00000100
00000000_00000000_00000000_00000101
00000000_00000000_00000000_00000110
00000000_00000000_00000000_00000111
00000000_00000000_00000000_00001000
00000000_00000000_00000000_00001001