当前位置: 首页 > news >正文

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

相关阅读

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


在数字系统设计中,有时需要在系统运行过程中对系统时钟进行切换,例如在不同工作模式下切换主时钟源、在功能时钟与测试时钟之间切换,或者在低功耗场景中切换到较低频率时钟。
从直观上看,最简单的做法是使用一个多路选择器(MUX)在两个时钟之间进行选择,例如下面这段代码所示:

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

这种写法从功能上看似乎没有问题,但实际上会带来一个非常严重的隐患:毛刺(glitch)。
原因在于,select信号很可能在两个时钟都未处于安全切换窗口时发生变化,从而使输出时钟在切换瞬间出现异常窄脉冲。对于普通数据信号来说,偶发毛刺有时尚可容忍;但对时钟信号而言,毛刺往往是致命的,因为它可能被后级触发器误认为有效时钟沿,进而导致寄存器误触发,甚至引发亚稳态。由于时钟是整个系统的核心控制信号,一旦这里出现问题,就可能影响整个系统的正常运行,严重时甚至导致系统宕机。

一个简单的基于数据选择器的时钟切换电路如图1所示,其切换时产生毛刺的波形如图2所示。

图1 简单的数据选择器

图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实际综合后可能不存在,因为有专门的下降沿触发的寄存器,同时寄存器也有取反输出端。

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

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

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

图6给出了无毛刺时钟切换电路的波形。从图中可以看出,这种切换方式确实会引入一定延迟,也就是说,输出不会在select信号变化的瞬间立刻切换到新时钟,而是要经历一个先关闭、后开启的过程。

图6 没有毛刺的波形

下面给出上述无毛刺时钟切换电路的一种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设计入门》

http://www.jsqmd.com/news/654960/

相关文章:

  • 终极解决方案:2分钟快速安装iPhone USB网络共享驱动程序
  • 热议靠谱的消泡剂服务商,多角度为你解读品牌和服务如何选择 - myqiye
  • 护发精油品牌推荐:暨2026年护发精油推荐 - 博客万
  • 5分钟快速上手:使用DDrawCompat彻底解决Windows老游戏兼容性问题
  • 解密Windows HEIC缩略图:探索苹果与微软之间的格式桥梁
  • Labelme标注神器进阶:用Python脚本批量转换COCO数据集(含自定义类别处理)
  • Java 8 Stream实战:findAny和findFirst到底怎么选?5个真实业务场景告诉你答案
  • 成都市蜀宏吊装工程有限责任公司:成都市设备吊装搬运 - LYL仔仔
  • 从一次内部渗透测试说起:利用Aria2任意文件写入漏洞,我是如何一步步拿到Shell的
  • 数控立车服务商家哪个口碑好,正规厂家与应用案例细聊 - 工业品网
  • 终极浏览器下载管理指南:5分钟快速上手Motrix WebExtension
  • 程序员和设计师的效率利器:我是如何用Directory Opus双窗格和标签页管理海量项目文件的
  • 【嵌入式】HC32F460驱动ILI9341 SPI屏:从硬件接线到GUI框架移植的实战解析
  • 2026酒店布草定制源头厂家精选:专业民宿布草供应商推荐合集 - 栗子测评
  • 2026年温度指标贴市场规模:国产实力品牌商表现亮眼,深圳市润彩标牌成行业优选! - 品牌推荐大师1
  • 美胸-年美-造相Z-Turbo开源大模型:保留版权的LoRA定制化图像生成方案
  • 2026年靠谱的管道加热器专业厂家推荐,为你揭秘高性价比之选 - mypinpai
  • 告别乱码!手把手教你用在线工具将任意TTF字体转为Adafruit GFX格式(附ESP8266/ESP32实战)
  • 别再只会用INVITE了!聊聊SIP协议里那个能‘呼叫转移’和‘推送网页’的REFER方法
  • 安全合规,高效便捷——融智天费用控制系统薪酬奖金发放管理体验 - 业财科技
  • UMA 与 MESI 详细技术笔记
  • 探寻2026年适合女生的专业,成都新东方高级技工学校有哪些热门专业 - 工业设备
  • 别只盯着密码破解!用Python+NumPy逆向分析CTF图片隐写术:从‘随机打乱’中恢复原始图像
  • 终极游戏串流革命:Sunshine跨平台游戏共享深度解析
  • 3分钟免费激活Windows和Office:KMS智能激活工具终极指南
  • 2026佛山鼎钻钢业不锈钢拉丝板无指纹表面工艺与现代装饰应用白皮书 - 博客万
  • 从零玩转工业树莓派:手把手教你用CODESYS V3.5配置EtherCAT主站,驱动台达ASDA-A2伺服
  • WebAssembly多线程与SharedArrayBuffer避坑指南:从COOP/COEP配置到C++递归线程安全
  • 成都市蜀宏吊装工程有限责任公司:郫都区设备吊装搬运公司 - LYL仔仔
  • 若依框架的权限系统怎么用?我用一个医院管理系统给你讲明白(SpringBoot+Vue版)