【发布时间】:2022-01-24 03:00:11
【问题描述】:
我正在尝试使用 100 MHz clk 输入创建第二个 clk 计数器,但是当我模拟 clk 分频器时,即使 clk 输入正确,它也只会将输出显示为 X。我可能做错了什么?
1 秒时钟分频器:
module clkdiv(
input clk,
input [25:0] terminalcount,
output reg clk_div
);
reg [25:0] count;
wire tc;
assign tc = (count == terminalcount);
always @ (posedge(clk)) begin
if (tc) count <= 0;
else count <= count + 1;
end
always @ (posedge(clk)) begin
if (tc) clk_div = !clk_div;
end
endmodule
测试台:
module clockdivTB;
// inputs
reg clk; // make 100 MHz -- T = 10 ns
// outputs
wire newclk;
// second clock -- connect test signals to clkdiv
clkdiv slowclkCUT (
.clk(clk),
.terminalcount(50000000-1), // 1 Hz
.clk_div(newclk)
);
// initialize inputs
initial begin
clk = 0;
// create input clock 100MHz
forever #5 clk = ~clk;
end
endmodule
结果:
【问题讨论】:
-
听起来不错。您的
tc仅在计数器达到特定值时才会激活。直到那时它是0。因此,counter 无法重置并停留在x。换句话说,它永远不会退出这个状态。您需要考虑在复位信号处复位计数器。
标签: verilog simulation fpga