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也可以使用同样的方法。