2

我需要一个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

quartus生成的电路:

在此处输入图像描述

4

1 回答 1

5

您的块将频率除以 4 而不是 2。实际上在Wikipedia Digital Dividers上有很好的描述。您的代码可以稍微整理一下,但只需要 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

当将这些类型的时钟分频器链接在一起时,请注意每次通过这些分频器之一时都会有一个 clk 到 q 的延迟。如果这没有通过综合正确管理,则时钟不能被认为是同步的。

EDAplayground上的示例,运行时应打开波形。

于 2014-06-04T07:09:48.757 回答