FPGA的分频器挺常用的,写一写记录一下。
近来看了很多人的分频器,不过感觉这个最好。
分频器的原理也很简单,就是设置一个循环计数器,在计数器的正中间和最大值两点给分频输出的引脚取反。也有只在最大值的时候取反的。下面这段代码可直接用。这次没写复位,后期如果需要再加吧。
SysClk为系统时钟,SysClkDiv为要分频输出的时钟。我用的是120MHz的系统时钟。代码里输出的是30MHz的4分频信号。
module fre_div(
input SysClk,
output SysClkDiv
);
parameter SYSCLK_VMHZ = 120; //单位为MHz
parameter SYSCLKDIV_VKHZ = 30000;//单位为KHz
localparam N = (SYSCLK_VMHZ*1000)/SYSCLKDIV_VKHZ;
reg[31:0] Count;
reg ClkOut;
initial begin
Count <= 0;
ClkOut <= 0;
end
always@(posedge SysClk) begin
begin
if(Count >= N - 1)
Count <= 32'd0;
else
Count <= Count + 1'b1;
end
end
always@(posedge SysClk) begin
begin
if(Count == N - 1 || (Count == (N >> 1) - 1))
ClkOut <= ~ClkOut;
else
ClkOut <= ClkOut;
end
end
assign SysClkDiv = ClkOut;
endmodule
本文记录了一种高效的FPGA分频器实现方法。利用循环计数器,在计数器达到中间值或最大值时翻转输出,从而实现时钟的四分频。代码简洁且适用于120MHz系统时钟,输出30MHz信号。
438

被折叠的 条评论
为什么被折叠?



