题解 | #数据串转并电路#

数据串转并电路

https://www.nowcoder.com/practice/6134dc3c8d0741d08eb522542913583d

`timescale 1ns/1ps
module testbench_top();
	
////////////////////////////////////////////////////////////
//设置时钟周期
`define CLK_PERIOD_100M 10	

//定义参数


////////////////////////////////////////////////////////////
//声明接口
reg clk;
reg rst_n;
reg valid_a;
reg data_a;

wire ready_a;
wire valid_b;
wire 	[5:0]	data_b;
////////////////////////////////////////////////////////////	
//例化待测试模块
	s_to_p_a inst_s_to_p
		(
			.clk     (clk),
			.rst_n   (rst_n),
			.valid_a (valid_a),
			.data_a  (data_a),
			.ready_a (ready_a),
			.valid_b (valid_b),
			.data_b  (data_b)
		);
	

////////////////////////////////////////////////////////////
//产生复位和时钟
	//对复位和时钟进行初始化
initial begin
	clk <= 0;
	rst_n <= 0;
	#1000;
	rst_n <= 1;
end

	//产生时钟
always #(`CLK_PERIOD_100M/2) clk = ~clk;
////////////////////////////////////////////////////////////
//定义二维数组

//读取文本文件到二维数组


////////////////////////////////////////////////////////////
//产生测试激励信号
initial begin
	valid_a <= 0;
	data_a <= 0;
	#2
	@(posedge rst_n);
	@(posedge clk);
	gen_data101010();
	@(posedge clk);
	gen_data111000();
	@(posedge clk);
	gen_data000111();
	gen_data101010();
	gen_data111000();
	#1000;
	// $fclose("file_goden");
	// $fclose("file_test");
	$finish;	
end

//定义task
task gen_data101010;
	begin
		valid_a <= 1;
		data_a <= 1;
		@(posedge clk);
		data_a <= 0;
		@(posedge clk);
		data_a <= 1;
		@(posedge clk);
		data_a <= 0;
		@(posedge clk);
		data_a <= 1;
		@(posedge clk);
		data_a <= 0;
		@(posedge clk);
		valid_a <= 0;
	end
endtask

task gen_data111000;
	begin
		valid_a <= 1;
		data_a <= 1;
		@(posedge clk);
		data_a <= 1;
		@(posedge clk);
		data_a <= 1;
		@(posedge clk);
		data_a <= 0;
		@(posedge clk);
		data_a <= 0;
		@(posedge clk);
		data_a <= 0;
		@(posedge clk);
		valid_a <= 0;
	end
endtask

task gen_data000111;
	begin
		valid_a <= 1;
		data_a <= 0;
		@(posedge clk);
		data_a <= 0;
		@(posedge clk);
		data_a <= 0;
		@(posedge clk);
		data_a <= 1;
		@(posedge clk);
		data_a <= 1;
		@(posedge clk);
		data_a <= 1;
		@(posedge clk);
		valid_a <= 0;
	end
endtask
////////////////////////////////////////////////////////////
//打开文件
integer file_goden,file_test;
initial file_goden = $fopen("./output_file/file_goden.txt","w");
initial file_test = $fopen("./output_file/file_test.txt","w");
////////////////////////////////////////////////////////////
//写入数据
always@(posedge clk) begin
	if(valid_a)								$fwrite(file_goden,"%b\n",data_a);
end

always@(posedge clk) begin
	if(valid_b)begin
		$fwrite(file_test,"%b\n",data_b[5]);
		$fwrite(file_test,"%b\n",data_b[4]);
		$fwrite(file_test,"%b\n",data_b[3]);
		$fwrite(file_test,"%b\n",data_b[2]);
		$fwrite(file_test,"%b\n",data_b[1]);
		$fwrite(file_test,"%b\n",data_b[0]);
	end								
end


////////////////////////////////////////////////////////////
//对比数据打印结果
initial begin
	$dumpfile("out.vcd");
	$dumpvars(0,testbench_top);
end

endmodule

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务