Verilog语法之文件读写

摘要:本文主要介绍了Verilog语法中关于文件操作的内容,在仿真中我们可以利用文件来存储测试数据或者将测试结果写入相应的文件中,下面介绍了如何操作文件以及给出了相应的例子。

1.文件打开$fopen

        系统任务$fopen用于打开指定文件名的文件,并返回一个32位的多通道描述符或32位的文件描述符(取决于文件操作类型的设置)。文件的操作类型指定文件打开的方式,其可用的字符或字符串如下表所示:

        任务$fopen的语法结构允许不指定文件操作类型,在不指定文件操作类型时,文件打开后处于可写入状态,并且返回一个32位的多通道描述符;此时,最多只能同时打开31个文件进行操作。在指定文件操作类型并返回一个32位的文件描述符情况下,不受此限制。语法结构如下:

2.文件关闭$fclose

        系统任务$fclose用于关闭任务$fopen已经打开的文件,语法结构如下:

3.文件写入$fwrite

        系统任务$fwrite用于向指定文件写入数据,写入后不会自动换行。语法结构如下:

代码示例如下:

integer w_file;
initial begin
    w_file=$fopen("./output_file/result_data.txt", "w");
    $fwrite(w_file, "The result of counter is:\n");
end

always @(posedge clk) begin
    if(o_vld) begin
        $fwrite(w_file, "%4x\n", o+data);
    end
end
4.十六进制文件读取$readmemh

        系统任务$readmemh读取十六进制文件。$readmemh的作用是将文件中的数据一次性地读入某个数组中,然后可以依次从数组中取出单个的数据进行处理。读取的内容只包括空白位置(空格、换行、制表格)、注释行、十六进制的数字。语法中的起始地址与终止地址可以省略。语法结构如下:

代码示例如下:

module testbench_top();
    reg [15:0] data_mem_1 [7:0];
    initial $readmemh("./input_file/hex_file_1.txt", data_mem_1);
    reg [15:0] data_mem_2 [7:0];
    initial $readmemh("./input_file/hex_file_2.txt", data_mem_2);
    reg [15:0] data_mem_3 [7:0];
    initial $readmemh("./input_file/hex_file_3.txt", data_mem_3);
    reg [15:0] data_mem_4 [7:0];
    initial $readmemh("./input_file/hex_file_4.txt", data_mem_4);

    integer i;
    initial begin
        #10;
        $display("read from hex_file_1:");
        for(i=0; i<8: i=i+1) begin
            $display("%4h", data_mem_1[i]);
        end
        $display("read from hex_file_2:");
        for(i=0; i<8: i=i+1) begin
            $display("%4h", data_mem_2[i]);
        end
        $display("read from hex_file_3:");
        for(i=0; i<8: i=i+1) begin
            $display("%4h", data_mem_3[i]);
        end
        $display("read from hex_file_4:");
        for(i=0; i<8: i=i+1) begin
            $display("%4h", data_mem_4[i]);
        end
    end
endmodule

        任务$readmemh读取的数据之间可以使用空格、换行、制表符进行分隔,若文件中读取的数据个数不足以填满寄存器数组所定义的深度,那么余下的数据以x填充。

5.二进制文件读取readmemb

        系统任务$readmemb读取二进制文件,读取的内容只包括空白位置(空格、换行、制表格)、注释行、二进制的数字。语法结构中的起始地址与终止地址可以省略。$readmemb的用法与$readmemh基本一致。

End!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值