systemverilog中输入输出系统任务和函数(三)——Memory 加载和下载任务


前言

在systemverilog中提供了许多输入输出的系统任务和函数,本文主要介绍Memory 加载和下载任务。


三、Memory 加载和下载任务

3.1 $readmemb $readmemh

这两个系统任务用来从文件中读取数据到存储器中。

$readmemb("<数据文件名>",<存贮器名>)
$readmemb ("<数据文件名>",<存贮器名>,<起始地址>$readmemb ("<数据文件名>",<存贮器名>,<起始地址>,<结束地址>)

$readmemh("<数据文件名>",<存贮器名>)
$readmemh ("<数据文件名>",<存贮器名>,<起始地址>$readmemh ("<数据文件名>",<存贮器名>,<起始地址>,<结束地址>)

示例:

module memory();
reg [7:0] my_mem [0:255];
initial
begin
        /*$readmemh("file",mem_array,start_addr,stop_addr);*/
        $readmemh("mem.list", my_mem);
        $display("0x00: %h", my_mem[8'h00]);
        $display("0x01: %h", my_mem[8'h01]);
        $display("0x55: %h", my_mem[8'h55]);
        $display("0x56: %h", my_mem[8'h56]);
end

endmodule
/*
        //comments are allowed
        0xab //addr 8'h00
        0xba //addr 8'h01
        @55  //jump to 8'h55
        0x55 //addr 8'h55
        0xaa //addr 8'h56
*/

3.2 $writememb $writememh

$writememb和$writememh分别以二进制和十六进制的方式,将数据写入文件中。
写的用法和读的基本一致,但有几点是需要注意的:
1、如果文件存在,并且调用了这里的写任务,那么原有文件中的数据将会被覆盖;
2、只能写入两态的数据,例如int;
3、地址跳跃(@)的方式不被允许;

program mtest;

initial begin
  bit[128:0]     ddr[100];

  std::randomize(ddr) with {
    foreach(ddr[i]) {
      ddr[i] inside {[0:100]};
    }
  };
  
  foreach(ddr[i])
    $display("ddr[%0d]= %h", i, ddr[i]);
  $writememh("./mtest_log", ddr, 0, 100-1 );

end

endprogram

总结

本文主要介绍systemverilog中,Memory 加载和下载任务的用法。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值