1 秒 ClkDivider 模拟不工作
1 Second ClkDivider Simulation Not Working
我正在尝试使用 100 MHz clk 输入创建第二个 clk 计数器,但是当我模拟 clk 分频器时,即使 clk 输入正确,它也只是将输出显示为 X。我可能做错了什么?
1秒clk分频器:
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
结果:
输出为 X,因为 reg
类型被初始化为 X(未知)。您需要将输出初始化为已知值。出于模拟目的,您可以将 clk_div
和 count
设置为 0,如下所示:
module clkdiv(
input clk,
input [25:0] terminalcount,
output reg clk_div = 0
);
reg [25:0] count = 0;
但是,如果您想综合您的逻辑,您可能需要添加一个复位输入。您可以从测试台驱动输入。
module clkdiv(
input reset,
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 (reset) count <= 0;
else if (tc) count <= 0;
else count <= count + 1;
end
always @ (posedge(clk)) begin
if (reset) clk_div <= 0;
else if (tc) clk_div <= !clk_div;
end
endmodule
我正在尝试使用 100 MHz clk 输入创建第二个 clk 计数器,但是当我模拟 clk 分频器时,即使 clk 输入正确,它也只是将输出显示为 X。我可能做错了什么?
1秒clk分频器:
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
结果:
输出为 X,因为 reg
类型被初始化为 X(未知)。您需要将输出初始化为已知值。出于模拟目的,您可以将 clk_div
和 count
设置为 0,如下所示:
module clkdiv(
input clk,
input [25:0] terminalcount,
output reg clk_div = 0
);
reg [25:0] count = 0;
但是,如果您想综合您的逻辑,您可能需要添加一个复位输入。您可以从测试台驱动输入。
module clkdiv(
input reset,
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 (reset) count <= 0;
else if (tc) count <= 0;
else count <= count + 1;
end
always @ (posedge(clk)) begin
if (reset) clk_div <= 0;
else if (tc) clk_div <= !clk_div;
end
endmodule