数字IC前端学习笔记:时钟切换电路

这篇具有很好参考价值的文章主要介绍了数字IC前端学习笔记:时钟切换电路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相关阅读

数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm=1001.2014.3001.5482


        有些时候我们需要在系统运行时切换系统时钟,最简单的方法就是使用一个MUX(数据选择器)选择输出的时钟,如下代码片所示。但这样做会导致毛刺的产生,这可能会导致寄存器的输出产生亚稳态。由于时钟在一个系统内是如此的重要,这种亚稳态可能会使整个系统宕机。一个简单的使用数据选择器的时钟切换电路如下图1所示,时钟切换时的毛刺如图2所示。

module clock_switch(input clk_1, clk_2, select, output reg clk_out);
    always@(*) begin
        if(select == 1'b1)
            clk_out = clk_1;
        else
            clk_out = clk_2;
    end        
endmodule

数字IC前端学习笔记:时钟切换电路,数字IC前端,数字IC,硬件工程,fpga开发,Verilog,前端

图1 简单的数据选择器

数字IC前端学习笔记:时钟切换电路,数字IC前端,数字IC,硬件工程,fpga开发,Verilog,前端

图2 有毛刺的波形

        一种不会产生毛刺的时钟切换电路如下图3所示。该电路的输出为两个时钟门控输出的与,上半部分电路控制时钟clk_A,当门控信号a2i_2为1时门控关闭时钟clk_A,当门控信号a2i_2为0时门控打开时钟clk_A。下半部分电路控制时钟clk_B,当门控信号a4i_2为1时门控关闭时钟clk_B,当门控信号a4i_2为0时门控打开时钟clk_B。控制信号sel用于选择clk_A还是clk_B,当sel为0时a3o输出0,由于sel和a3i_2信号都不是clk_B时钟域的信号,因此这个输出需要经过clk_B时钟域的两级同步器得到a3o_sync信号,最后a3o_sync信号通过clk_B的下降沿采样得到a4i_2和!a4i_2,a4i_2用于关闭clk_B,而!a4i_2用于拉高a1o,从而最后将a2i_2拉高,即打开时钟clk_A(注意到对于a1o,即使sel为0,a1i_1为1,也不会立刻拉高,因为!a4i_2仍然为0),对sel为1的分析与上面类似,在此不详述。可以看到这种结构在时钟切换的过程中,首先关闭正在运行的时钟(此时没有时钟输出,输出恒为0),然后再开启另一个时钟,且这个关闭和开启的动作都是由本时钟所同步的行为,即clk_A负责关闭和开启clk_A,clk_B负责关闭和开启clk_B,这样就在一定程度上避免了毛刺的产生。S3和S6这两个触发器需要下降沿触发,这是为了在关闭和打开时钟时不产生毛刺,因为寄存器S3和S6的输出有一定延迟。如果使用上升沿触发,此时时钟信号为高电平,但门控信号a2i_2和a4i_2需要延迟一段时间才会拉高或拉低,此时会在a20和a4o产生毛刺,下降沿触发则不会有这个问题,因为时钟信号为低,这保证了a20和a4o一定为低,如图4和图5所示。但值得注意的是,这在无形中对时钟的占空比提出了要求,即占空比不能太高,最好为50%左右,否则还是会导致输出出现毛刺(在S3,S6延迟较大时)。图中的B2、B3、B4、B5实际综合后可能不存在,因为有专门的下降沿触发的寄存器,同时寄存器也有取反输出端。

数字IC前端学习笔记:时钟切换电路,数字IC前端,数字IC,硬件工程,fpga开发,Verilog,前端

图3 无毛刺的时钟切换电路

数字IC前端学习笔记:时钟切换电路,数字IC前端,数字IC,硬件工程,fpga开发,Verilog,前端

图4 使用上升沿触发出现毛刺

数字IC前端学习笔记:时钟切换电路,数字IC前端,数字IC,硬件工程,fpga开发,Verilog,前端

图4 使用下升沿触发不出现毛刺

        图5是没有毛刺的切换电路的波形图,可以看到切换有一定延迟但不会出现毛刺。

数字IC前端学习笔记:时钟切换电路,数字IC前端,数字IC,硬件工程,fpga开发,Verilog,前端

图5 没有毛刺的波形

        下面是以上电路的Verilog描述,在这里面要注意S3和S6的时钟触发沿。

module clock_switch(input clk_1, clk_2, select, rst_n1, rst_n2, output clk_out);  
//上半部分时钟控制的逻辑  
    wire a1i_1, a1o, a2o;
    reg a1o_r, a1o_syn, a2i_2, a4i_2;
    assign a1i_1 = !select;
    assign a1o = a1i_1 & !a4i_2;

    always@(posedge clk_1 or negedge rst_n1)begin //打两拍同步
        if(!rst_n1)begin
            a1o_r <= 0;
            a1o_syn <= 0;
        end
        else begin
            a1o_r <= a1o;
            a1o_syn <= a1o_r;
        end
    end

    always@(negedge clk_1 or negedge rst_n1)begin //注意这里用下降沿触发
        if(!rst_n1)
            a2i_2 <= 0;
        else
            a2i_2 <= a1o_syn;
    end

    assign a2o = a2i_2 & clk_1;

//下半部分时钟控制的逻辑   
    wire a3o, a4o;
    reg a3o_r, a3o_syn;
    assign a3o = select & !a2i_2;

    always@(posedge clk_2, negedge rst_n2)begin //打两拍同步
        if(!rst_n2)begin
            a3o_r <= 0;
            a3o_syn <= 0;
        end
        else begin
            a3o_r <= a3o;
            a3o_syn <= a3o_r;
        end
    end

    always@(negedge clk_2 or negedge rst_n2)begin //注意这里用下降沿触发
        if(!rst_n2)
            a4i_2 <= 0;
        else
            a4i_2 <= a3o_syn;
    end

    assign a4o = a4i_2 & clk_2;

//输出的与门逻辑
    assign clk_out = a2o | a4o;
endmodule

 

文中图3来源于《数字IC设计入门》 文章来源地址https://www.toymoban.com/news/detail-758700.html

到了这里,关于数字IC前端学习笔记:时钟切换电路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数字IC前端学习笔记:LSFR(线性反馈移位寄存器)

    相关文章 数字IC前端专栏 https://blog.csdn.net/weixin_45791458/category_12173698.html?spm=1001.2014.3001.5482 引言 LFSR(线性反馈移位寄存器)用于产生可重复的伪随机序列PRBS(Pseudo-Random Binary Sequence),结构包括n级D触发器和一些异或门(或同或门)组成,在每个时钟沿,后级D触发器输出会以

    2024年02月02日
    浏览(38)
  • 【从零开始のIC学习笔记】-跨时钟域处理

    两个不同时钟域需要进行跨时钟同步处理, 不同情况下的处理方式不同,可分为 慢时钟域到快时钟域 :          单比特         多比特 快时钟域到慢时钟域 :         单比特         多比特 多bit的跨时钟域处理,无论是快时钟域到慢时钟域,还是慢时钟域到快时钟域

    2024年02月14日
    浏览(35)
  • 【硬件学习笔记】防反接保护电路

    原理:输入接法正确时,电路正常运行;输入反接时,因二极管的存在会阻碍电流形成回路,从而达到断路的效果,避免损坏后级器件。 优点:简洁方便,元器件少,效果强劲; 不足:二极管有压降,当输入电流较大时,会有很大的损耗,例如:流过5A电流,损耗=0.55V✖5A

    2023年04月09日
    浏览(36)
  • 【数字IC/FPFA】时序约束--时钟约束

    时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个约束是我们用的最多的约束了,也是最重要的约束。 下面我们以vivado中的时钟约束为例,介绍时钟约束的相关内容。 在Vivado中我们通过使用create_clock来创建时钟周期约束。使用方法如下: 其中,参数name为创建

    2024年02月03日
    浏览(43)
  • IC验证必备的数字电路基础知识(三):时序逻辑电路

    参考教材:数字电路与逻辑设计(第2版)邬春明 目录 1. 边沿触发器(D触发器) 2. 时序电路描述/构成 3. 时序逻辑电路的功能描述方法 组合逻辑电路掌管了电路中的逻辑运算,基本单元是与或非门。而时序逻辑电路则掌管了电路中数据的存储。触发器就是构成时序逻辑电路

    2024年02月09日
    浏览(44)
  • 【硬件电路学习笔记】---- 01二极管简介与分类

    目录 1 二极管基础知识储备 1.1 半导体 1.1.2 类型  1.2 二极管简介  1.2.1 构成 1.2.2 性质 1.2.3 主要参数 1.2.4 极性的判断 1.2.5 二极管故障检测 2 常见二极管的分类  2.1 整流二极管 2.1.1 整流桥 2.2 开关二极管 2.3 稳压二极管 2.4 变容二极管 2.5 肖特基二极管 2.6 快恢复二极管 导电

    2024年02月06日
    浏览(50)
  • 【数字IC基础】跨时钟域(CDC,Clock Domain Crossing)

    1、 同步设计 : 在同步设计中,整个设计都是使用同一个时钟源,所有时钟的频率和相位都可以事先预知 2、 异步设计 :在设计中有 两个或以上的时钟 , 且时钟之间是 同频不同相 或 不同频 的关系,异步时序设计的关键就是把数据或控制信号正确地进行 跨时钟域传输 。

    2024年02月16日
    浏览(38)
  • 数字IC经典电路(3)——经典除法器的实现(除法器简介及Verilog实现)

    除法器是一种用于执行除法运算的电路或器件。在数字电路中,除法器经常被用作重要的计算单元,其主要功能是将一个数除以另一个数并给出商和余数。 与加法器和减法器类似,除法器也属于算术逻辑单元(ALU)的一种。不同的是,加法器和减法器能够执行加法和减法运算,

    2024年02月02日
    浏览(43)
  • CMOS反相器基础(数字电路学习笔记)

    通过几个问题来记录CMOS反相器是什么,以及数字电路中为什么要使用CMOS反向器。 目录 问题 Q1:模拟电路和数字电路的区别? Q2:为什么说相对模拟电路来说数字电路比较稳定? Q3:数字电路中为什么要使用CMOS门电路? Q4:CMOS的 输入噪声容限是什么? Q5:CMOS结构中P管的宽

    2023年04月16日
    浏览(50)
  • 数字IC经典电路(2)——经典乘法器的实现(乘法器简介及Verilog实现)

    数字电路中乘法器是一种常见的电子元件,其基本含义是将两个数字相乘,并输出其乘积。与加法器不同,乘法器可以实现更复杂的运算,因此在数字电路系统中有着广泛的应用。 乘法器的主要用途是在数字信号处理、计算机科学以及其他数字电路应用中进行精确的数字乘法

    2024年02月06日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包