大家好,最近写了几个分频器。实现奇数分频和偶数分频效果,且占空比满足50%,代码已经经过测试,需要可自取。感谢关注。
一、上代码
`timescale 1ns / 1ps
//
module CLK_DIV_ODDandEVEN50P
#(
parameter Multiple = 11 //Multiple表示的是倍频倍数。
)
(
input sys_rst,
input sys_clk,
output clk_div ,
output [15:0] cnt
);
wire odd ;
wire even ;
assign odd = (Multiple[0]==1'b1)?1'b1:1'b0; //奇数判断
assign even = (Multiple[0]==1'b0)?1'b1:1'b0; //偶数判断
assign clk_div = (odd)?clk_odd: (even)?clk_even:0; //将奇数或者偶数分频结果输出
reg [15:0] cnt=16'b0;
always@(posedge sys_clk)
begin
if(sys_rst) //复位信号,高有效
begin
cnt <= 16'b0;
end
else
if(cnt == (Multiple -1))
begin
cnt <=16'b0;
end
else
begin
cnt <= cnt + 1'b1 ;
end
end
//--------奇数分频过程------start---------//
reg clk_oddP=1'b0;
always@(posedge sys_clk)
begin
if(sys_rst) //复位信号,高有效
begin
clk_oddP <= 1'b0;
end
else
if(cnt <= (Multiple /2 ))
begin
clk_oddP <= 1'b0 ;
end
else
begin
clk_oddP <= 1'b1 ;
end
end
reg clk_oddN=1'b0;
always@(negedge sys_clk)
begin
if(sys_rst) //复位信号,高有效
begin
clk_oddN <= 1'b0 ;
end
else
if(cnt <= (Multiple /2))
begin
clk_oddN <=1'b0;
end
else
begin
clk_oddN <= 1'b1 ;
end
end
wire clk_odd ;
assign clk_odd = clk_oddP | clk_oddN ; //通过或运算实现50%占空比。
//--------奇数分频过程------end---------//
//--------偶数分频过程------start---------//
reg clk_even=1'b0;
always@(posedge sys_clk)
begin
if(sys_rst) //复位信号,高有效
begin
clk_even <= 1'b0;
end
else
if(cnt <= (Multiple /2 -1))
begin
clk_even <= 1'b0 ;
end
else
begin
clk_even <= 1'b1 ;
end
end
//--------偶数分频过程------end---------//
endmodule
二、上仿真代码
`timescale 1ns / 1ps
/
module CLK_DIV_ODDandEVEN50P_TB;
// Inputs
reg sys_rst;
reg sys_clk;
// Outputs
wire clk_div;
wire [15:0] cnt;
// Instantiate the Unit Under Test (UUT)
CLK_DIV_ODDandEVEN50P uut (
.sys_rst(sys_rst),
.sys_clk(sys_clk),
.clk_div(clk_div),
.cnt(cnt)
);
initial begin
// Initialize Inputs
sys_rst = 1;
sys_clk = 0;
// Wait 100 ns for global reset to finish
#100;
sys_rst = 0;
forever #500 sys_clk=~sys_clk;
// Add stimulus here
end
endmodule
三、上仿真结果


由图1和图2可知,仅仅通过带边变量multiple的值可以实现不同分频,且满足50%占空比。其中:
①sys_clk是系统时钟,本代码中作为被分频时钟。
②clk_div是分频后时钟。
③cnt是计数器,作为分频计数使用。
④sys_rst是复位信号,高有效。
感谢关注。