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