系统任务均可以从文件中读取数据到存储器
-
常用的格式:
$readmemb("<数据文件名>",<存储器名>,<起始地址>,<终止地址>);
$readmemb("<数据文件名>",<存储器名>,<起始地址>,<终止地址>);
注:起始地址和终止地址可以不加。 -
注意事项:
(1)被读取的文件中只能包含:空白位置(空格、换行、制表格(tab)),注释行(//形式的和/…/形式的都可以)、二进制和二六进制数据。
(2)被读取的文件中不能包含位宽书名和格式说明,对于$ readmemb系统任务,每个数必须是二进制,对于$readmemh系统任务,每个数必须是十六进制。数字中可以有不定值x或X和高阻值z或Z,还可以有下画线(_)。另外,数字必须用空白位置或注释行来分隔。 -
例子
如:文件data.dat内容如下:
@002
11111111 01010101
00000000 10101010
@006
1111zzzz 00001111
verilog程序如下:
reg [7:0] meme[0:7];
$readmemb(“data.dat”,meme);
则寄存器中的内容如下:
meme[0]=xxxxxxxx;
meme[1]=xxxxxxxx;
meme[2]=11111111;
meme[3]=01010101;
meme[4]=00000000;
meme[5]=10101010;
meme[6]=1111zzzz;
meme[7]=00001111;
如果程序如下:
reg [15:0] meme[0:7]; //一个地址存储16bit数据
$readmemb(“data.dat”,meme);
则结果如下:
meme[0]=xxxxxxxxxxxxxxxx;
meme[1]=xxxxxxxxxxxxxxxx;
meme[2]=11111111_01010101;
meme[3]=00000000_10101010;
meme[4]=xxxxxxxxxxxxxxxx;
meme[5]=xxxxxxxxxxxxxxxx;
meme[6]=1111zzzz_00001111;
meme[7]=xxxxxxxxxxxxxxxx;
则依次从文件中读取16bit的数据存储到寄存器的一个地址中。