Files
verilog/testbench.v

70 lines
1.5 KiB
Coq
Raw Normal View History

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