奇数偶数分频电路(占空比50%)

数字电路中经常会遇到需要将时钟信号进行分频,一般分为奇数分频和偶数分频,同时对占空比的要求也不一样,常见的是需要保持占空比仍为50%。本文通过Verilog代码实现简单的分频电路。文末附上所有代码和仿真波形。

二分频

二分频电路简单,只需要一个D触发器,将触发器的输出Q反相之后再接回输入D端即可完成。

三分频

三分频电路比较复杂一点,因为要保证占空比为50%,所以势必分频后的时钟信号有一个沿是跟着输入时钟的下降沿变化的,想清楚这一点,下面的波形图就很容易得到。
三分频电路仿真波形
可见需要首先产生两个特殊的三分频的电路,其占空比为1/3,将两个信号或之后就得到了占空比为50%的三分频信号。

四分频

偶数分频的电路都比较简单,只需要控制好计数器进行翻转即可。

五分频

五分频电路类似三分频,具体见代码和仿真波形。

代码

module divider
(
    input clk,
    input rst_n,
    output reg div_clk_2,
    output wire div_clk_3,
    output reg div_clk_4,
    output wire div_clk_5
);

//div_2
always @ (posedge clk or negedge rst_n) begin
    if(!rst_n)
### 如何在数字电路中实现奇数分频并保持50%占空比 #### 设计思路 为了实现在数字电路中的奇数分频并且维持50%占空比,一种常用的技术是通过生成两个具有特定相位差的较高频率信号,并利用逻辑运算得到所需的输出。具体来说,可以先创建两个相同频率但相差半个周期(即180度相移)的两倍于目标分频因子N的偶数次方波形,之后对这两个波形执行异或操作来获得最终的结果[^3]。 #### Verilog代码示例 下面给出一段基于上述原理编写的Verilog代码片段用于说明如何构建一个7分频(即DIVIDE_BY=7),同时确保其拥有理想的50%占空比特性: ```verilog module odd_divider ( input wire clk_in, // 输入时钟 output reg clk_out // 输出时钟 ); parameter N = 7; // 定义分频系数为7 // 创建第一个2*N分频信号 reg [3:0] count_1; wire div_clk_1; always @(posedge clk_in or negedge rst_n) begin : proc_count_1 if (!rst_n) count_1 <= 4'b0; else if (count_1 >= ((2 * N)/2)-1) count_1 <= 4'b0; else count_1 <= count_1 + 1; end assign div_clk_1 = (count_1 >= ((2 * N)/4)); // 创建第二个2*N分频信号,与div_clk_1有90°相位偏移 reg [3:0] count_2; wire div_clk_2; always @(posedge clk_in or negedge rst_n) begin : proc_count_2 if (!rst_n) count_2 <= 4'b0; else if (count_2 >= (((2 * N)/2)+((2 * N)/4))-1) count_2 <= 4'b0; else count_2 <= count_2 + 1; end assign div_clk_2 = (count_2 >= ((2 * N)/4)*3); // 使用XOR门组合两个信号以形成期望的7分频输出 assign clk_out = div_clk_1 ^ div_clk_2; endmodule ``` 此模块接受一个输入时钟`clk_in`作为源,并产生一个新的经过处理后的时钟信号`clk_out`,该信号被设定为原始时钟速率除以7的关系,而且在整个过程中始终保持大约一半的时间处于高电平状态,另一半则处于低电平状态,从而实现了真正的50%占空比
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值