fpga分频(精准且不需要考虑奇偶分频)
时间:10-02
整理:3721RD
点击:
/*2017.3.12 zc in xiandian
核心是有一个n位的寄存器
Fo=clk*K/2^N; k是步进值,Fo是想要的频率
作用:更加精准的分频程序 而且不需要考虑奇偶分频,只需要知道你要分的频率*/
module division(input clk_50M,
input reset,
output up);
reg[31:0] cnt;
reg divid;
parameter span=13194139; //步长 fo=fc*k/2^N; k为步长
always@(posedge clk_50M)
begin
if(!reset)
cnt<=0;
else
if(cnt<=32'hffff_ffff)
cnt<=cnt+span; //9600*16
else
cnt<=0;
end
always@(posedge clk_50M)
begin
if(!reset)
divid<=0;
else
if(cnt<=32'h7fff_ffff)
divid<=1;
else
divid<=0;
end
reg temp;
always@(posedge clk_50M)
begin
if(!reset)
temp<=0;
else
temp<=divid;
end
assign up=(~temp && divid)?1'b1:1'b0; //检测上升沿
endmodule
核心是有一个n位的寄存器
Fo=clk*K/2^N; k是步进值,Fo是想要的频率
作用:更加精准的分频程序 而且不需要考虑奇偶分频,只需要知道你要分的频率*/
module division(input clk_50M,
input reset,
output up);
reg[31:0] cnt;
reg divid;
parameter span=13194139; //步长 fo=fc*k/2^N; k为步长
always@(posedge clk_50M)
begin
if(!reset)
cnt<=0;
else
if(cnt<=32'hffff_ffff)
cnt<=cnt+span; //9600*16
else
cnt<=0;
end
always@(posedge clk_50M)
begin
if(!reset)
divid<=0;
else
if(cnt<=32'h7fff_ffff)
divid<=1;
else
divid<=0;
end
reg temp;
always@(posedge clk_50M)
begin
if(!reset)
temp<=0;
else
temp<=divid;
end
assign up=(~temp && divid)?1'b1:1'b0; //检测上升沿
endmodule