testbench中读取波形数据并在modelsim中显示

显示一个波形

  代码如下。
  其中有一处重要的地方要说一下。当最后一个时钟沿到来时,data被赋值为文件中最后一个数值,count被非阻塞赋值为自增一,接下去打印的count值是赋值前的值。然后判断是文件尾了,跳出while循环,打印count值,注意,这个时候打印的还是赋值前的count!所以我加一了!

`timescale 1ns/1ns
module file_operation_tb;

reg clk_50M;
reg signed [12:0] data; //因为后面要以%d的格式输出,所以必须说明符号
reg unsigned [31:0] count;
integer fp;

initial begin
	clk_50M = 1'b0;
	data = 13'd0;
	count = 32'd0;
end

always #10 clk_50M = ~clk_50M;

initial begin
	#100
	fp = $fopen("../../../testbench/sine.txt", "r"); //如果打开文件成功的话,fp会有一个位被赋值为1;如果打开失败,就会为0
	if(!(|fp)) begin
		$display("cannot open file\n");
		#100
		$stop; //延时100ns后结束仿真
	end
	else begin
		$display("reading file...\n");
		while(!($feof(fp))) begin
			@(posedge clk_50M) begin
				$fscanf(fp, "%d", data);
				count <= count + 32'd1;
				$display("%d	%d", data, count);
			end
		end
		$display("done reading\ndata size is %d\n", count + 1); //这里很重要!
		$fclose(fp);
		#500
		$stop;
	end
end

endmodule

仿真波形如下:
在这里插入图片描述

显示多个波形

  代码如下:

`timescale 1ns/1ns
module file_operation_tb;

reg clk_50M;
reg signed [12:0] data;
reg unsigned [31:0] count;
integer fp;
wire cmp_out;
reg unsigned [31:0] wave_cnt;

initial begin
	clk_50M = 1'b0;
	data = 13'd0;
	count = 32'd0;
	wave_cnt = 32'd0;
end

always #10 clk_50M = ~clk_50M;

initial begin
	#100
	fp = $fopen("../../../testbench/sine.txt", "r");
	if(!(|fp)) begin
		$display("cannot open file\n");
		#100
		$stop;
	end
	else begin	
		while(wave_cnt < 32'd10) begin
			$display("reading file...\n");
			while(!($feof(fp))) begin
				@(posedge clk_50M) begin
					$fscanf(fp, "%d", data);
					count <= count + 32'd1;
					//$display("%d	%d", data, count);
				end
			end
			$display("done reading: round %d\n", wave_cnt + 1);
			$fseek(fp, 0, 0); %定位到文件头,第二个参数为位置(0表示文件头),第三个参数为0表示定位到第二个参数表示的位置
			wave_cnt = wave_cnt + 1;
		end	
		$fclose(fp);
		#500
		$stop;
	end
end

endmodule

仿真波形如下:
在这里插入图片描述

参考链接
1、https://blog.csdn.net/baijingdong/article/details/8037891
2、https://blog.csdn.net/zhenzhen90/article/details/36189947?utm_source=blogxgwz1
3、https://www.eefocus.com/guozhiyang/blog/15-03/311034_f817b.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值