// 时间尺度 以1ns为时钟单位 / 1ns为时钟精度 `timescale 1ns/1ns // 包含文件 main_module.v 编译的时候就不需要指定这个文件了 `include "main_module.v" // 定义模块 此模块没有输入输出 module testbench(); reg clk; reg rst; reg [7:0] data; wire dout; wire [31:0] sum; wire [7:0] data_addr; // 定义一个存储空间 8位 256个字节 reg [7:0] flash_mem[255:0]; // 指定参数 parameter CYCLE = 2; parameter END_TIME = 200; // 实例化模块 test mod( .clk(clk), .rst(rst), .data(data), .dout(dout), .data_addr(data_addr), .sum(sum) ); // 初始化块 此块用于生成波形文件 // initial 语句为仿真语句,通常在testbench中使用 initial begin $dumpfile("wave.vcd"); $dumpvars(0,testbench); // 把文件中的16进制数据填充到mem $readmemh("flash_data.txt",flash_mem); end //显示数组的10个值 // initial begin // $display("yyyyy %d: %h", 0, flash_mem[0]); // end // 寄存器初始化,只有初始化之后才会产生波形 initial begin clk = 0; rst = 0; end initial begin #5 rst = 1; end // 每隔一个时钟周期取反 always begin #(CYCLE / 2) clk = ~clk; end always @(posedge clk) begin data <= flash_mem[data_addr]; $display("yyyyy %d: %h", data_addr, flash_mem[data_addr]); end // 在END_TIME个时钟周期之后结束 initial begin #END_TIME; $stop; end endmodule