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



    前言

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


    三、Memory 加载和下载任务

    3.1 $readmemb $readmemh

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

    $readmemb("<数据文件名>",<存贮器名>)
    $readmemb ("<数据文件名>",<存贮器名>,<起始地址>$readmemb ("<数据文件名>",<存贮器名>,<起始地址>,<结束地址>)
    
    $readmemh("<数据文件名>",<存贮器名>)
    $readmemh ("<数据文件名>",<存贮器名>,<起始地址>$readmemh ("<数据文件名>",<存贮器名>,<起始地址>,<结束地址>)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    示例:

    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
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    总结

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

  • 相关阅读:
    OpenTiny Vue 支持 Vue2.7 啦!
    git log
    LeetCode+ 71 - 75
    Nginx反向代理与负载均衡
    某985证书站挖掘记录
    【Android开发】学习笔记(二)
    Linux 后台运行 springboot项目
    NDK编译构建C/CPP工程
    关联线探究,如何连接流程图的两个节点
    Java Web入门之JSP的基本语法解析及实战(超详细 附源码)
  • 原文地址:https://blog.csdn.net/hh199203/article/details/126141759