首页 > 解决方案 > 在 Verilog 仿真中未显示为已初始化的计数器的输出

问题描述

我在运行模拟以确保我的计数器正常工作时遇到了一些麻烦。我的计数器的代码是:

module counter(
    input clk, rst,
    output reg [16:0] counterout
    );
always @(posedge(clk), posedge(rst))
begin
     if (rst) counterout <= 0;
     else if (clk) counterout <= counterout + 1;
end
endmodule

和我的测试代码:

`timescale 1ns / 1ps
module testbench();

reg clock;
reg rst;
wire [16:0] out;

counter test(
    .clk(clock),
    .rst(rst),
    .counterout(out)
);

integer k = 0;

initial
begin
    rst = 0;
    clock = 0;
    #100 ;
    
    for(k = 0; k < 1000; k = k+1)
    begin
        #5 clock = clock + 1;
    end
    #5 $finish;
end
endmodule

不幸的是,当我运行模拟时,它显示输出从未初始化。知道为什么吗?

在此处输入图像描述

标签: verilogsimulation

解决方案


您的计数器仍然未知,因为您没有重置它。计数器需要rst信号为 1 才能重置,但您的测试台始终驱动rst为 0。这是更改测试台以重置计数器的一种方法。

initial
begin
    rst = 1; // Assert reset
    clock = 0;
    #100 ;
    rst = 0; // Release reset

    for(k = 0; k < 1000; k = k+1)
    begin
        #5 clock = clock + 1;
    end
    #5 $finish;
end

推荐阅读