Initial commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
`timescale 1ns/1ps
|
||||
|
||||
module tb_counter8;
|
||||
|
||||
// ---- 参数 ----
|
||||
parameter CLK_PERIOD = 10; // 100MHz 时钟,周期 10ns
|
||||
|
||||
// ---- 信号声明 ----
|
||||
reg clk;
|
||||
reg rst_n;
|
||||
reg en;
|
||||
wire [7:0] count;
|
||||
wire overflow;
|
||||
|
||||
// ---- 被测模块例化 ----
|
||||
counter8 uut (
|
||||
.clk (clk),
|
||||
.rst_n (rst_n),
|
||||
.en (en),
|
||||
.count (count),
|
||||
.overflow (overflow)
|
||||
);
|
||||
|
||||
// ---- 时钟生成 ----
|
||||
initial clk = 0;
|
||||
always #(CLK_PERIOD/2) clk = ~clk;
|
||||
|
||||
// ---- VCD 波形记录 ----
|
||||
initial begin
|
||||
$dumpfile("tb_counter8.vcd");
|
||||
$dumpvars(0, tb_counter8);
|
||||
end
|
||||
|
||||
// ---- 复位与激励 ----
|
||||
initial begin
|
||||
// 初始化
|
||||
rst_n = 0;
|
||||
en = 0;
|
||||
|
||||
// 复位保持 5 个时钟周期
|
||||
repeat(5) @(posedge clk);
|
||||
rst_n = 1;
|
||||
|
||||
// 使能计数,连续计数 200 个周期
|
||||
@(posedge clk);
|
||||
en = 1;
|
||||
repeat(200) @(posedge clk);
|
||||
|
||||
// 暂停使能,观察保持行为
|
||||
en = 0;
|
||||
repeat(10) @(posedge clk);
|
||||
|
||||
// 重新使能,再计数 60 个周期(观察溢出行为)
|
||||
en = 1;
|
||||
repeat(60) @(posedge clk);
|
||||
|
||||
// 再次复位
|
||||
rst_n = 0;
|
||||
repeat(3) @(posedge clk);
|
||||
rst_n = 1;
|
||||
repeat(5) @(posedge clk);
|
||||
|
||||
$finish;
|
||||
end
|
||||
|
||||
// ---- 监控关键事件 ----
|
||||
always @(posedge clk) begin
|
||||
if (overflow)
|
||||
$display("[%0t ns] 溢出! count = %0d", $time, count);
|
||||
end
|
||||
|
||||
endmodule
|
||||
Reference in New Issue
Block a user