testbench——文件读入输出

本文介绍如何使用Verilog HDL进行TXT文件的读取与写入操作,包括两种不同的读取方法及写入操作的具体实现。适用于需要了解Verilog文件I/O操作的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:仿真工具为ISE自带simulation

1.读入.txt中的文件

待读入文件为photo.txt,位于所建工程文件夹中。

代码:

integer cnt,i;
reg [7:0] mem[31:0];
reg [5:0] address;
integer fp;
initial
begin
	fp = $fopen("photo.txt","rb");
	address = 0;
    while(!$feof(fp))  begin 
        for(i=0; i<16; i=i+1)  begin
            cnt = $fscanf (fp, "%d",mem[address]);
            address=address+1;
        end
    end
    $fclose(fp);
end
注释:

使用句柄fp定位文件之后操作即可;

代码中i < 16的值原则上可以为任意值,一般小于文件中数据总数就好了,因为有 while(!$feof(fp)) 在控制;

以二进制方式读入的;

待读入数据:


结果图:



另外一种写法

reg [7:0] mem[31:0];
initial
begin
    $readmemh("photo.txt",mem);
end
注:$readmemh和$readmemb分别用来读入源文件为16进制和2进制的文件

结果图:


2.写出.txt文件

代码:

integer fp_write;
reg [5:0] write_address;
initial
begin
	fp_write =  $fopen("output.txt");
	write_address = 0;
	while(write_address != 32)
	begin
		$fwrite(fp_write, "%d ", mem[write_address]);
		write_address = write_address + 1;
		if(write_address%8 == 0) $fwrite(fp_write, "\n");
	end
	$fclose(fp_write);
end
注:

if(write_address%8 == 0) $fwrite(fp_write, "\n"); 为了给文件中加入换行

结果:


整体代码:

`timescale 1 ns / 1 ps

module testbench;

reg clk, rst, start;

initial begin 
    clk = 0;
    forever #5 clk = ~clk;
end

initial begin
    rst = 0;
	#8 rst = 1;
end

initial begin
    start = 0;
    #502 start = 1;
end

integer cnt,i;
reg [7:0] mem[31:0];
reg [5:0] address;
integer fp;
initial
begin
	fp = $fopen("photo.txt","rb");
	address = 0;
    while(!$feof(fp))  begin 
        for(i=0; i<16; i=i+1)  begin
            cnt = $fscanf (fp, "%d",mem[address]);
            address=address+1;
        end
    end
    $fclose(fp);
end

integer fp_write;
reg [5:0] write_address;
initial
begin
	fp_write =  $fopen("output.txt");
	write_address = 0;
	while(write_address != 32)
	begin
		$fwrite(fp_write, "%d ", mem[write_address]);
		write_address = write_address + 1;
		if(write_address%8 == 0) $fwrite(fp_write, "\n");
	end
	$fclose(fp_write);
end

endmodule





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼德兰的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值