我试图将输入时钟除以2,即输出时钟应该是输入时钟频率的一半。
module clk_div(in_clk, out_clk, rst);
input in_clk;
input rst;
output out_clk;
reg out_clk;
always @(posedge in_clk) begin
if (!rst) begin
out_clk <= 1'b0;
end
else
out_clk <= ~out_clk;
end
endmodule
测试平台
module dd;
// Inputs
reg clk_in;
reg reset;
// Outputs
wire clk_out;
// Instantiate the Unit Under Test (UUT)
clk_div uut (
.clk_in(clk_in),
.reset(reset),
.clk_out(clk_out)
);
always #10 clk_in =~clk_in ;
initial begin
// Initialize Inputs
clk_in = 0;
reset = 0;
#100;
reset = 1;
end
endmodule
输出波形仅显示正在生成的输入时钟。无论我尝试什么,输出时钟波形都不会出现。这个代码对于时钟分为两个是否正确?
答案 0 :(得分:2)
您需要更改实例中的端口名称。将您的实例更改为:
clk_div uut (
.in_clk(clk_in),
.rst(reset),
.out_clk(clk_out)
);
我通过此修复得到了2分。
您的代码在我的2个模拟器上有编译错误。它真的为你编译了吗?
答案 1 :(得分:0)
答案 2 :(得分:0)
我使用以下代码作为时钟分频器。只需更改参数并获得所需的输出......
module clk_div(
clk,
rst,
count);
parameter count_width=27;
parameter count_max=25000000;
output [count_width-1:0] count;
reg [count_width-1:0] count;
input clk,rst;
initial
count<=0;
always@(posedge clk)
if(rst)
begin
count=0;
end
else
begin
if (count<count_max-1)
begin
count<=count+1;
end
else if (count==count_max)
begin
count <=~count;
end
else if (count>count_max)
begin
count<=0;
end
end
endmodule