주석에서 말했듯이, 16MHz 클록으로 나눠서 원하는 100MHz 클럭 (Nexys 3 스파르탄 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으로 나눈 값으로 낮추는 것입니다.