[基础]Verilog的$readmemx介绍
$readmemx的格式
$readmemx("./filename", <memname>, <<start_addr><,<finish_addr>>?>?);
简单的代码
module data_read;
reg [31:0] mem [0:11];
integer i;
initial $readmemh("./data.txt",mem);
initial begin
for(i=0; i<12; i=i+1)
$display("%d: %h", i, mem[i]);
end
endmodule
reg [31:0] mem [0:11];
integer i;
initial $readmemh("./data.txt",mem);
initial begin
for(i=0; i<12; i=i+1)
$display("%d: %h", i, mem[i]);
end
endmodule
data.txt
// Hexadecimal values for $readmemh demo
02328020 // can include comments with double forward slash (standard Verilog comment)
02328022 // second 32-bit value
02328024 // third value
02328025 // etc.
// can break up into related groups, insert comments, etc.
8e700002
ae700001
1232fffa
1210fff9 // last value
02328020 // can include comments with double forward slash (standard Verilog comment)
02328022 // second 32-bit value
02328024 // third value
02328025 // etc.
// can break up into related groups, insert comments, etc.
8e700002
ae700001
1232fffa
1210fff9 // last value
note:
如果将mem的宽度调整为[15:0],则会产生错误,无输出
Warning: (vsim-PLI-3406) Too many digits (8) in data on line 2 of file "./data.txt". (Max is 4.) : data_read.v(6)
如果将mem的宽度调整为[63:0],则结果变为
# 0: 0000000002328020
# 1: 0000000002328022
# 2: 0000000002328024
这种比较可以看出,系统任务是按行读取的。
结论
这只是一个浅谈$readmemx设计的小例子。
http://blog.csdn.net/henhen2002/article/details/5350351 是一篇不错的介绍。