基于Verilog HDL的分频器设计
Verilog HDL的分频器设计作者:nyj
文中的第一个模块为通用的偶分频模块,第二个模块为通用的奇分频模块,2个模块分频占空比都为1:1,使用时只需将相应模块中parameter DIV_N = N; 中的N改为想要的分频数即可。
/********************************************
**File name: Divide_Frequency_module
**Author: nyj
**Version:
**Data: 11/7/17
**Description: Even divide FPGA CLK frequency
**********************************************/
module Divide_Frequency_module
(
input CLK_In,
input RSTn,
output CLK_Out
);
/*****************************************/
parameter DIV_N = N;
/***********************************************/
reg [DIV_N:0] count;
reg clk_N;
always @ ( posedge CLK_In or negedge RSTn )
begin
if(!RSTn)
begin
count <= 1'b0;
clk_N <= 1'b0;
end
else if( count == DIV_N/2 - 1'b1)
begin
count <= 1'b0;
clk_N <= ~clk_N;
else
count <= count + 1'b1;
end
/***********************************************/ assign CLK_Out = clk_N;
/*************************************************/ endmodule
module Divide_Frequency_module
(
input CLK_In,
input RSTn,
output CLK_Out
);
/*****************************************/ parameter DIV_N = N;
/***********************************************/ reg [DIV_N:0] count_p;
always @ ( posedge CLK_In or negedge RSTn )
begin
if(!RSTn)
count_p <= 1'b0;
else if( count_p == DIV_N - 1'b1)
count_p <= 1'b0;
else
count_p <= count_p + 1'b1;
end
/***********************************************/ reg [DIV_N:0] count_n;
always @ ( negedge CLK_In or negedge RSTn)
if(!RSTn)
count_n <= 1'b0;
else if(count_n == DIV_N - 1'b1)
count_n <= 1'b0;
else
count_n <= count_n + 1'b1;
end
/************************************************/ reg clk_N_p;
always @ ( posedge CLK_In or negedge RSTn )
begin
if(!RSTn)
clk_N_p <= 1'b0;
else if(count_p <= DIV_N/2)
clk_N_p <= 1'b1;
else
clk_N_p <= 1'b0;
end
/***********************************************/
reg clk_N_n;
always @ ( negedge CLK_In or negedge RSTn )
begin
if(!RSTn)
clk_N_n <= 1'b0;
else if(count_n <= DIV_N/2)
clk_N_n <= 1'b1;
else
clk_N_n <= 1'b0;
end
/***************************************************/ assign CLK_Out = (clk_N_p & clk_N_n) ? 1'b1 : 1'b0;
/*************************************************/ endmodule。