我本來打算使用PLL和計數器實現一個128khz的時鐘分頻,具體的做法是先用PLL實現64mhz的倍頻,然后通過計數器,每計數到499,輸出一個使能信號clk_out,隨即拉低,計數器計數到500清零,進行下一次循環,通過這樣的方式實現128khz的分頻。這是我編寫的代碼:
module S_CLK(
CLK,
Reset_n,
clk_out
);
input CLK;
input Reset_n;
output reg clk_out;
wire locked;
wire clk_64M;
PLL PLL(
.clk_out1(clk_64M),
.resetn(Reset_n),
.locked(locked),
.clk_in1(CLK)
);
reg [8:0]counter;
always @(posedge clk_64M or negedge Reset_n)
if(!Reset_n)
clk_out<=0;
else if(counter==499)
clk_out<=1;
else if(counter==500) begin
counter<=0;
clk_out<=0;
end
else
counter<=counter+1'b1;
endmodule
這是測試文件代碼:
`timescale 1ns / 1ns
module S_CLK_tb();
reg CLK;
reg Reset_n;
wire clk_out;
S_CLK S_CLK_inst0(
.CLK(CLK),
.Reset_n(Reset_n),
.clk_out(clk_out)
);
initial CLK=1;
always #10 CLK = ~CLK;
initial begin
CLK=0;
Reset_n=0;
#100;
Reset_n=1;
#200000;
end
endmodule
這是跑出來的圖:
因為是剛開始接觸FPGA,所以檢查不出來具體是哪里出了問題,還請各位能幫我看看,給我解答一下我的代碼哪里出了問題,萬分感謝!
|