Articles
分周器のVerilogコード
On 2月 17, 2021 by admin50Hz クロック信号が 50MHz 信号から
16ビット同期カウンター。試しましたが、うまくいきませんでした!
module divier_16 (clk_in, clk_out); input clk_in; wire w; wire [0:15]temp; output clk_out; count_16 c1 (clk_in, w); count_16 c2 (w, temp); assign clk_out= temp[6];
コメント
- 使用16ビットの何ですか?
- そして何を試しましたか?コードを投稿できますか?
- 16ビットの同期カウンター
- これらのうち2つを使用できますか?
- 良い。次に、最初に1000で割り、次に別の1000で割ります。
回答
残念ながら、50MHzの信号を50Hzの信号に変換するには16ビットでは不十分です。これは、クロックを100万で割る必要があるためです。$$ 2 ^ {16} = 65536 $$したがって、ほぼ十分ではありません。A少なくとも20ビットのカウンタで十分です。$$ 2 ^ {20} = 1048576 $$
信号を変換するには、単純に100万クロックサイクルにカウントしてから、出力信号の状態を変更します。 。
例:
always @(posedge clk_in) begin count_20 <= count_20 + 1; if(count_20 == 1000000) begin count<=0; clk_out <= !clk_out; end end
編集:^^は25Hzの信号になることがわかったので、必要なのは19ビットを必要とする500000までカウントします。問題はどこにあるかです。その20番目のビットは、100万で割る必要があるので見ることから来ます。 clk_outビットはその20番目のビットとして機能します。
コメント
- 別の解決策は、これらの16ビットカウンターのいくつかを使用することです。そのうち少なくとも16個が必要です(16 * 65536 = 2 ²⁰= 1048576)
- 間違いを犯した可能性があります。私の解決策は、 25Hzでは?
- 必要なのは2つだけで、32ビットになります
- @Makotoはい、500_000までカウントする必要があり、2番目に-おそらく警告が表示されますalways構文で異なる割り当てタイプを使用すると、
clk_out <= !clk_out
; - 変更されます
コメントを残す