占空比50%的分频器

分频器、倍频器:就是基于某个时钟频率扩展出多个时钟频率

结构如下

根据上图可以看出,偶数分频的触发条件对应所有时钟的上升沿,当然下降沿也可以,奇数分频既包含上升沿也包含下降沿,以2分频举例,基本时钟上升沿到来一次,时钟翻转一次,4分频就是基本时钟上升沿到来两次,时钟翻转一次。

偶数分频代码如下:

//实现偶数分频
module div_even(
input clk,
input rst_n,
output clk_div
);
parameter div_num = 4;//分频数
reg[3:0] cnt; //上升沿采样计数值,位宽根据分频数设置

//上升沿计数
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        cnt <= 0;
    else if(cnt < div_num-1)//cnt取值0-div_num-1
        cnt <= cnt + 1'b1;
    else
        cnt <= 0; 
end
assign	clk_div=(cnt>(div_num/2-1))?1:0;//

endmodule


`timescale 1ns/1ps
module tb_div_even;
  reg       clk,rst_n;
  wire      clk_div;
   
  div_even dut(.clk(clk),.rst_n(rst_n),.clk_div(clk_div));
  initial begin 
    			clk <= 0;rst_n<=0;
    			#14	rst_n<=1;
                #1000 $stop;
  end
always #5 clk<=~clk;
endmodule

四分频结果 ,分频数可以修改使用,但要注意计数器位宽

 奇数分频以3分频为例,可以分为一个上升沿和一个下降沿的或

 奇数分频代码如下,分频数可以修改使用,注意计数器的位宽;

//实现奇数分频
module div_odd(
input clk,
input rst_n,
output clk_div
);
parameter div_num = 3;//分频数
reg[2:0] cnt1,cnt2; //上升沿和下降沿计数
wire   clk1, clk2;//上升沿和下降沿触发时钟频率
   
//上升沿计数
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        cnt1 <= 0;
    else if(cnt1 < div_num - 1)//cnt取0-div_num - 1
        cnt1 <= cnt1 + 1'b1;
    else
        cnt1 <= 0; 
end
assign	clk1=(cnt1>((div_num-1)/2))?1:0;//

//下降沿计数
always @(negedge clk or negedge rst_n) begin
    if(!rst_n)
       cnt2 <= 0;
    else if(cnt2 < div_num - 1)
       cnt2 <= cnt2 + 1'b1;
    else
       cnt2 <= 0;
end
assign	clk2=(cnt2>((div_num-1)/2))?1:0;//下降沿触发时钟频率
assign clk_div = clk1 | clk2;//上升沿触发时钟和下降沿触发时钟相或
endmodule


`timescale 1ns/1ps
module tb_div_odd;
  reg       clk,rst_n;
  wire      clk_div;
   
  div_odd dut(.clk(clk),.rst_n(rst_n),.clk_div(clk_div));
  initial begin 
		    clk <= 0;rst_n<=0;
		    #14	rst_n<=1;
		    #1000	$stop;
  end
 always #5	clk<=~clk;
endmodule

五分频结果

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值