verilog - 在 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
不幸的是,当我运行模拟时,它显示输出从未初始化。知道为什么吗?
解决方案
您的计数器仍然未知,因为您没有重置它。计数器需要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
推荐阅读
- node.js - 为什么我的翻译脚本不能处理西里尔字母或中文字母?
- c - 为什么我会收到两个 SIGCONT 信号?
- javascript - 如何将整个 ViewModel 传递到 .net core mvc 3.1 中的外部 Javascript 文件中?
- macos - 如何使用旧代码库中的 Big-Sur 样式工具栏 + 拆分视图?
- clang - 找不到一些 Clang 命令行参数解释
- c# - 如何将 Visual c# 轨迹栏的值输入到笔大小值中?
- python-3.x - 如何使半径输入自动出现(Python 3)
- bash - 通过 azure cli 并行取消分配和调整 VM 的大小
- go - 本地版golang tour启动问题
- .net - 正则表达式捕获列中的多个单词