【发布时间】:2017-04-14 20:49:18
【问题描述】:
正如锡上所说,我有一个 100MHz 时钟(取自 Nexys 3 Spartan 6 板),我想将它分成 16MHz 时钟。我制作了 1Mhz 和 60Hz 时钟没有问题,但我在获得干净的 16MHz 信号时遇到了一些问题。
这是我目前正在测试的内容:
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
always@(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
always@(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 的值。
【问题讨论】: