スズについて言えば、16MHzクロックに分割したい100MHzクロック(Nexys 3 Spartan 6ボードから抜粋)があります。問題なく1Mhzと60Hzのクロックを作りましたが、きれいな16MHz信号を得るにはいくつかの問題があります。100MHzクロックを16MHzクロックに分割する[Verilog]
は、ここで私は現在、テストしてるものです:
module clk_gen(
input clk_100MHz,
output reg clk_16MHz,
output reg clk_1MHz,
output reg clk_1s);
integer count_16MHz;
integer count_1MHz;
integer count_1s;
integer skip_cnt;
initial begin
count_16MHz = 1;
count_1MHz = 1;
count_1s = 1;
skip_cnt = 1;
clk_1s = 1'b0;
clk_1MHz = 1'b0;
clk_16MHz = 1'b0;
end
//16MHz
[email protected](posedge clk_100MHz) begin
//8*(100Mhz/6.25) == 7*(100MHz/6)+((100MHz/8))
if((skip_cnt == 8) & (count_16MHz == 4)) begin
clk_16MHz = ~clk_16MHz;
skip_cnt = 1;
count_16MHz = 1;
end
else if((skip_cnt < 8) & (count_16MHz == 3)) begin
clk_16MHz = ~clk_16MHz;
skip_cnt = skip_cnt + 1;
count_16MHz = 1;
end
count_16MHz = count_16MHz + 1;
end
//1MHz
[email protected](posedge clk_100MHz) begin
if(count_1MHz == 50) begin
clk_1MHz = ~clk_1MHz;
count_1MHz = 1;
end
count_1MHz = count_1MHz + 1;
end
私は1MHzのを持っていると60Hzは(1秒)分割しますが、16MHzの痛みされています。より良い方法はありますか(Verilogに滞在中)?
残念ながら、1MHzのクロックサイクルの間に16回のシフト動作が発生するため、非常に厳しい16MHzが欲しいです。他の唯一の攻撃方法は、おそらく1MHzを何かより遅く、より簡単に16で割ることです。