8分频verilog线_基于Verilog的任意分频器设计

本文介绍了如何使用Verilog设计奇数分频器,特别是实现占空比为50%的奇数分频器。通过分别对上升沿和下降沿计数并进行“错位相或”操作,最终获得占空比平衡的分频信号。以5分频为例,展示了具体的Verilog代码实现。
摘要由CSDN通过智能技术生成

2.奇数分频器

奇数分频器的设计比偶数分频器复杂一些,特别是占空比为50%的奇数分频器。如果对占空比没有明确的要求,则可以直接对上升沿计数,计数到(N-1)/2 时让输出翻转,计数到(N-1)时让输出状态再次翻转,并将计数器清零,这样就可以得到一个占空比为2:3的N分频(N为奇数)的分频器。而如果要实现50%的占空比,可以通过“错位相或”的方法实现。具体方法是用刚才的方法先通过对上升沿计数产生一个占空比为不是50%的N分频器,再用同样的方法对下降沿计数产生一个占空比也不是50%的N分频器,最后将这两个分频器的输出进行“或”运算,就可以得到占空比为50%的奇数N分频器,具体实现代码如下:

奇数分频器示例,5分频,占空比50%

module div_odd(clk_out, clk, rst_n);

input clk, rst_n;

output clk_out;

reg clk_p, clk_n;

reg [4:0] cnt1, cnt2;  //注意根据实际需要调整位宽

parameter N = 5;  //此处N可以设为任意奇数

//用上升沿产生非50%占空比的分频信号clk_p

always @(posedge clk or negedge rst_n)

if(!rst_n)

begin

cnt1 <= 0;

clk_p <= 0;

end

else if(cnt1 == 5'b10)        //cnt_p == (N-1)/2,翻转

begin

cnt1 <= cnt1 + 1'b1;

clk_p <= ~clk_p;

end

else if(cnt1 == 5'b100)        //cnt_p == N-1,翻转

begin

cnt1 <= 1'b0;

clk_p <= ~clk_p;

end

else cnt1 <= cnt1 +1'b1;

//用下降沿产生非50%占空比的分频信号clk_n

always @(negedge clk or negedge rst_n)

if(!rst_n)

begin

cnt2 <= 0;

clk_n <= 0;

end

else if(cnt2 == 5'b10)        //cnt_n == (N-1)/2,翻转

begin

cnt2 <= cnt2 + 1'b1;

clk_n <= ~clk_n;

end

else if(cnt2 == 5'b100)        //cnt_n == N-1,翻转

begin

cnt2 <= 1'b0;

clk_n <= ~clk_n;

end

else cnt2 <= cnt2 +1'b1;

//相与运算,得到50%占空比的分频信号

assign clk_out = clk_p | clk_n;

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值