数字二倍频电路

常用数字二倍频电路介绍

在这里插入图片描述
由一个同或门与一个时钟上升沿有效的D触发器(连接成翻转器)组成,其中clk_in为外部输入时钟周期信号,clk_out为二倍频输出信号。下图为其输入输出波形。
在这里插入图片描述
在t0时刻:(稳定状态)
clk_in为低电平,D触发器为复位状态(即Q=0、Q#=1),这样Q#与clk_in经"同或门"后为低电平(异出为0),此时为初始稳定状态,如下图所示:

当t1时刻到来时:(并非稳定状态)
clk_in时钟变为高电平,此时D触发器尚未翻转,“同或门"另一输入引脚亦仍为高电平,则"同或门"输出转变为高电平(同出为"1”),同时此输出作为有效时钟上升沿触发D触发器翻转,则有Q=1、Q#=0,如下图所示:

当t2时刻到来:(稳定状态)

之后每次输入信号变化一次,则重复一次稳定状态、不稳定状态、稳定状态的变化。从D触发器翻转输出至"同或门"输出变化那一段时间,称为延时(Tdelay),在这个电路里也就是高电平宽度。在74系列逻辑器件中,这个延时值大约为几十个纳秒(ns),在可编程逻辑(FPGA/CPLD中)则只有几个纳秒,可以通过在这个延时链路上插入多个缓冲器来增加高电平的宽度(也就是占空比)。

Verilog HDL语言描述电路

  1. 常用方法

    module frequency_multiplier
    (
    	input clk,
    	 output out_clk
    );
    reg         temp_mul;
    assign      out_clk = ~(clk ^ ~temp_mul);
    
    always @(posedge out_clk)
    begin
    	temp_mul <= ~temp_mul ;
    end
    endmodule
    

    modelsim 后仿真结果(必须用后仿真
    在这里插入图片描述

  2. 在脉冲频率不足100k(步进电机控制频率<<500k)的情况下还可以采用高频检测输入脉冲信号的上升沿和下降沿加延时5us实现倍频功能

    module frequency_multiplier
    (
    	input          clk,
    	 input          rst_n,
    	 input          clk_in,
    	output         clk_out,
    	output wire pos_edge,
    	output wire neg_edge,
    	 output wire both_edge,
    	output         ref_clk
    );
    assign  ref_clk = clk_in;
    
    reg     clkin_r0, clkin_r1;                  // 状态寄存器
    always @ (posedge clk or negedge rst_n)begin
    	 if (!rst_n) begin
    			clkin_r0 <= 1'b0;
       		 	clkin_r1 <= 1'b0;
    	end
    	 else begin
        		clkin_r0 <= clk_in;
        		clkin_r1 <= clkin_r0;
    	end
    end
    wire    clkin_sign;
    //wire    pos_edge,neg_edge,both_edge;
    
    assign pos_edge  = (~clkin_r1)& ( clkin_r0);
    assign neg_edge  =   clkin_r1 & (~clkin_r0);   
    assign both_edge =   clkin_r1 ^   clkin_r0;  // 双边沿检测,或pos_edge|neg_edge
    assign clkin_sign = ~both_edge;
    
    reg [31:0] counter;
    always @(posedge clk or negedge clkin_sign)
    begin
    	if (!clkin_sign)
       		 counter  <= 0;
    	else if (counter >= 32'd1000)            //检测到沿后延时5us
     	   counter     <= 32'd1000;
    	 else
      	  counter  <= counter + 1;
    end
    
    assign clk_out =(counter == 32'd1000)? 0 : 1;
    
    endmodule
    
### 使用D触发器实现二倍数字电路的设计方法和原理 #### 设计目标 为了实现二倍功能,即输入时钟信号 `CLK` 的率翻倍成为输出时钟信号 `CLK_out`,可以借助 D 触发器及其固有的延迟特性。 #### 工作原理 当输入时钟信号 `CLK` 发生变化时,期望输出时钟信号 `CLK_out` 能够响应两次状态转换。具体来说,在每个时钟周期内,`CLK_out` 应该经历高低电平各一次完整的切换过程[^3]。 #### 实现方案 一种常见的做法是在原有基础上增加额外的组合逻辑来控制输出行为: 1. **构建基础结构** 需要至少两个D触发器串联工作,第一个用于捕捉当前时刻的状态,第二个则负责生成最终所需的高率波形。 2. **引入反馈机制** 输出端连接至异或门的一路输入,另一路由前一级Q端提供给定相位差的数据流。此操作使得每当原始时钟边沿到来之际,都能促使新产生的脉冲序列发生跳变,进而形成两倍速率下的方波形态。 ```verilog module doubler #(parameter WIDTH=8)( input wire clk, output reg dout ); reg q; always @(posedge clk or negedge clk) begin if (!clk) begin q <= ~q; dout <= ^{dout,q}; end else begin q <= ~q; dout <= ^{dout,q}; end end endmodule ``` 上述代码片段展示了基于 Verilog HDL 描述的一个简单二倍模块实例。这里采用了敏感列表同时监听正负沿的方式确保每次时钟变动都能够引发内部变量更新并驱动外部输出发生变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值