verilog 读取txt, bin文件的集中方式

1. 读取单个txt:

// write txt
integer file_txt;

file_txt = $fopen("./input_jpg.txt", "w");

$fwrite(file_txt, "%h\n", data);

//read txt
integer     file_txt;

file_txt = $fopen("./input_jpg.txt", "r");

while (!$feof(file_txt)) begin
       result  =   $fscanf(file_txt, "%s 0x%h 0x%h\n", op, addr, data);
       case(op)
           "WR":   apb_reg_write(addr,data);
           "RD":   apb_reg_read(addr,data);
       endcase
end

1) 如果是写入的,直接声明integer类型,给数值就可以写入,写入的过程中加入“\n”,进行换行。

2)如果是读取,先使用while (!$feof(file_txt))  判断是否已经读到最后一个了,因为$fscan 它读取一个数值,会自动跳到下一行.  再根据具体的txt文件,写相应的 $fscanf,在这里我扫描的txt文件数据为:

        WR 0x0b010014 0x00000001
        WR 0x0b010020 0x00000002
         RD 0x0b010020 0x00000002

2. 读取.bin文件的写法

integer file_bin;
file_bin= $fopen("input.bin", "rb");
while(!$feof(file_bin))begin
        for(int i=0 ;i<16 ;i++)begin
            line_buf[i*8 +: 8] = $fgetc(file_bin);
        end
        $fwrite(file_output_txt, "%h\n", line_buf[0 +: 16*8]);
 end

在读取的过程中,$fgetc每次只能拿到8bit的数据,而我的bin文件数据如下,所以我需要循环读16次才能读完完整的一行数据,最后将读取的数据写入到txt文件中。
 9d3b cf69 097a 0000 0000 0000 59da ce55  
1482 a8e8 7990 3339 d92a caa6 8875 0000

3.  如果有读取多个txt或者bin文件的需求,只需要加如下代码,前提是多个文件需要按照规则命名。

string  file_name;
$sformat(file_name,"%s_bs_y%0d.bin"  ,full_patname, number);
file_bin   = $fopen(file_name, "rb");

假如文件名为:

csdn_bs_y0.bin,

csdn_bs_y1.bin,

csdn_bs_y2.bin,

csdn_bs_y3.bin,

csdn_bs_y4.bin

就只需要修改number,并将full_name = "csdn",即可实现多文件的读取,txt也可以使用同样的方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值