VerilogHDL系统任务$readmemb和$readmemh

系统任务均可以从文件中读取数据到存储器

  1. 常用的格式:
    $readmemb("<数据文件名>",<存储器名>,<起始地址>,<终止地址>);
    $readmemb("<数据文件名>",<存储器名>,<起始地址>,<终止地址>);
    注:起始地址和终止地址可以不加。

  2. 注意事项:
    (1)被读取的文件中只能包含:空白位置(空格、换行、制表格(tab)),注释行(//形式的和//形式的都可以)、二进制和二六进制数据。
    (2)被读取的文件中不能包含位宽书名和格式说明,对于$ readmemb系统任务,每个数必须是二进制,对于$readmemh系统任务,每个数必须是十六进制。数字中可以有不定值x或X和高阻值z或Z,还可以有下画线(_)。另外,数字必须用空白位置或注释行来分隔。

  3. 例子
    如:文件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的数据存储到寄存器的一个地址中。

发布了32 篇原创文章 · 获赞 64 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_36215315/article/details/99683439