verilog中的除数

Gui*_*ano 2 verilog frequency clock circuit digital-logic

我需要在verilog中使用分频器,我在下面编写了代码.它有效,但我想知道是否是最好的解决方案,谢谢!

module frquency_divider_by2 ( clk ,clk3 );
output clk3 ;
reg clk2, clk3 ;
input clk ;
wire clk ;
initial clk2 = 0;
initial clk3 = 0;
 always @ (posedge (clk)) begin
   clk2 <= ~clk2;
 end
 always @ (posedge (clk2)) begin
  clk3 <= ~clk3;
 end
endmodule
Run Code Online (Sandbox Code Playgroud)

由quartus生成的电路:

在此输入图像描述

Mor*_*gan 5

你的块将频率除以4而不是2. 维基百科数字分频器实际上有很好的描述.您的代码可以稍微整理一下,但只需要1个D-Type,这比JK触发器小,因此是最佳的.

module frquency_divider_by2(
  input      rst_n,
  input      clk_rx,
  output reg clk_tx
);

always @ (posedge clk_rx) begin
  if (~rst_n) begin
    clk_tx <= 1'b0;
  end
  else begin
    clk_tx <= ~clk_tx;
  end
end

endmodule
Run Code Online (Sandbox Code Playgroud)

当将这些类型的时钟分频器链接在一起时,要意识到每次通过其中一个分频器时都会出现q延迟.如果通过综合无法正确管理,则不能将时钟视为同步.

EDAplayground上的示例应该在运行时打开波形.