就像它说的那样,我有一个100MHz时钟(来自Nexus 3 Spartan 6板卡),我想把它分成16MHz时钟。我做了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为和60赫兹(1秒)分,但16MHz的是正在痛苦。有没有更好的方法(同时留在Verilog中)?
不幸的是,由于在1MHz时钟周期之间发生了16次移位操作,所以我确实需要非常严格的16MHz。我唯一的其他攻击方法是将1MHz降低到更慢,更容易除以16.