题解 | #数据串转并电路#
数据串转并电路
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