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

あなたのブロックは周波数を 2 ではなく 4 で割っています。Wikipedia Digital Dividersには、これに関するかなり良い説明があります。コードを少し整理できますが、必要な D タイプは 1 つだけです。これは 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

これらのタイプのクロック分周器をチェーン接続する場合、これらの分周器の 1 つを通過するたびに、clk から q へのレイテンシが発生することに注意してください。これが合成によって正しく管理されていない場合、クロックは同期していると見なすことができません。

EDAplaygroundの例では、実行時に波形を開く必要があります。

于 2014-06-04T07:09:48.757 に答える