TB 只用于仿真,不可综合。
Vivado 中:新建 TB 文件(tb_top.v),右键 TB 文件 → Set as Top → Run Behavioral Simulation
`timescale 1ns / 1ps // 时间单位 1ns,精度 1ps
module tb_top; // TB 模块没有端口!
// 声明激励信号(用 reg,因为 TB 主动驱动)
reg clk, rst_n;
wire [3:0] led; // 输出用 wire 接收
// 实例化被测模块(DUT = Device Under Test)
top u_dut (
.sys_clk (clk), // .被测端口名 (TB信号名)
.sys_rst_n (rst_n),
.led (led)
);
// 生成 50MHz 时钟:每 10ns 翻转 = 周期 20ns
initial clk = 0;
always #10 clk = ~clk; // #10 = 延迟 10ns
// 测试激励序列
initial begin
rst_n = 0; // 一开始拉低复位
#200; // 等待 200ns(让复位生效)
rst_n = 1; // 释放复位,电路开始工作
#1_000_000; // 运行 1ms 观察波形
$finish; // 结束仿真
end
endmodule本次使用的 top.v 经过修改以适应本次仿真:
module top (
input sys_clk,
input sys_rst_n,
output [3:0] led
);
parameter CNT_MAX = 5 - 1; // ★ 仿真用!5 clk 翻转 → 周期 10 clk
reg [24:0] cnt;
reg led_r;
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n) begin
cnt <= 0;
led_r <= 1'b0;
end else if (cnt >= CNT_MAX) begin
cnt <= 0;
led_r <= ~led_r;
end else
cnt <= cnt + 1;
end
assign led = ~{4{led_r}};
endmodule