赞
踩
1、偶数分频和奇数分频,代码如下:
// 说 明:
// (1) 对输入时钟进行5分频,得到占空比为50%的时钟输;
// (2) DIV1=5/2,DIV2=5-(5%2) 5为分频数;
// (3) 若将5改为其他整数则表示其他分频数;
module clk_div
(
clk_in,rst_n,
clk_out
);
input clk_in; //输入时钟
input rst_n; //异步复位,低电平有效
output clk_out; //5分频信号输出
reg [2:0]cnt1; //上升沿计数器
reg [2:0]cnt2; //下降沿计数器
reg clk_out1; //时钟寄存输出
reg clk_out2;
reg Cnt; //2分频计数器
reg clk_cnt; //2分频输出信号
parameter DIV1 = 2;
parameter DIV2 = 4;
//2分频
always @(posedge clk_in,negedge rst_n) //上升沿计数器
begin
if(!rst_n) //异步复位
Cnt <= 1’b0;
else if(Cnt==1’b1)
Cnt <= 1’b0;
else
Cnt <= Cnt+1’b1;
end
always @(posedge clk_in,negedge rst_n) //上升沿输出时钟控制 begin if(!rst_n) clk_cnt <= 1'b0; else if(Cnt==1'b1) clk_cnt <= ~clk_cnt; else if(Cnt==1'b0) clk_cnt <= ~clk_cnt; end always @(posedge clk_cnt,negedge rst_n) //上升沿计数器 begin if(!rst_n) cnt1 <= 1'b0; else if(cnt1<DIV2) cnt1 <= cnt1 + 1'b1; else cnt1 <= 1'b0; end always @(negedge clk_cnt,negedge rst_n) //下降沿计数器 begin if(!rst_n) cnt2 <= 1'b0; else if(cnt2<DIV2) cnt2 <= cnt2 + 1'b1; else cnt2 <= 1'b0; end always @(posedge clk_cnt,negedge rst_n) //上升沿输出时钟控制 begin if(!rst_n) clk_out1 <= 1'b0; else if(cnt1==DIV1) //为2时翻转 clk_out1 <= ~clk_out1; else if(cnt1==DIV2) //为4时翻转 clk_out1 <= ~clk_out1; end always @(negedge clk_cnt,negedge rst_n) //下降沿输出时钟控制 begin if(!rst_n) clk_out2 <= 1'b0; else if(cnt2==DIV1) clk_out2 <= ~clk_out2; else if(cnt2==DIV2) clk_out2 <= ~clk_out2; end
//10分频
assign clk_out = clk_out1|clk_out2;
endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。