如何仅使用逻辑门和寄存器产生无毛刺输出的时钟切换?

大部分开发者使用 bufgctrl 或 bufgmux进行时钟切换,它们在时钟切换上可以提供无毛刺输出。然而,了解所涉及的原理是有好处的。
当然,无论我们在同步逻辑中使用哪种技术,重要的是要确保在进行时钟切换时输出上没有毛刺。任何故障都可能导致下游逻辑的错误行为。
那么,让我们看看如何仅使用逻辑门和寄存器产生无毛刺输出的时钟切换。peter 大神介绍了如下电路。
使用两个寄存器来存储选择信号的状态。这些状态在时钟的下降沿更新,并且取消选择的寄存器将其时钟保持在复位状态。由于下降沿,时钟处于低电平,并且输出时钟保持低电平。它将保持低电平,直到所选时钟变低(以更新其控制寄存器)并变高。
在 vivado 中实现这一点很简单。只需几行代码即可创建时钟切换。
library ieee;use ieee.std_logic_1164.all;entity clk_sw is port(    clk_a : in std_logic;    clk_b : in std_logic;    sel : in std_logic;    clk_out : out std_logic);end entity; architecture rtl of clk_sw is signal clk_a_reg : std_logic :='0';signal clk_b_reg : std_logic :='0';begincntrl_a : process(clk_a)begin    if falling_edge(clk_a) then         clk_a_reg <= (not sel) and (not clk_b_reg);    end if;end process;cntrl_b : process(clk_b)begin    if falling_edge(clk_b) then         clk_b_reg <= sel and (not clk_a_reg);    end if;end process;clk_out <= (clk_a_reg and clk_a) or (clk_b_reg and clk_b);end architecture;  
使用pll将系统的时钟 (100mhz) 划分为两个随机且不相关的频率。输出时钟引出到gpio 引脚 。
使用 100 mhz 的 xpm 同步器宏来对其进行去抖。xpm 宏的输出用于切换时钟并路由至 gpio 引脚 。
创建了一个简单的测试平台,可以在时序仿真中运行仿真,以确定实现中是否存在故障。
在上图中可以看到时序仿真中没有观察到任何故障。
下一步是对电路板进行编程,并观察在硬件中实现设计时设备中是否存在故障。
将频率设置为 6.25 mhz 和 8.125 mhz。默认情况下,当选择输入为低电平时,将输出 8.125 mhz 时钟。将其切换至高电平将输出切换至 6.25 mhz 时钟。
当然,我们需要能够确定切换发生时输出上是否存在任何毛刺。因此,使用示波器监测内部同步选择信号和时钟输出引脚。
从下面观察输出时钟时可以看出,当时钟的选择线改变时,在输出时钟线上没有观察到毛刺。
尽管现代 fpga 包含更先进、功能更强大的时钟管理和时钟电路,但一些低端fpga上这些电路并不存在,我们就需要自己去创建始终切换电路。


前端工程师到底需要掌握哪些技能
低功耗串行数/模转换器MAX504的性能特点及电机应用
AI需求强劲,英伟达发财报后股价涨了一个AMD,下季度还能创纪录吗?
美图开始走“奢华”手机路线?到底能不能赚钱
模拟技术在AT切割晶体谐振器设计上的应用
如何仅使用逻辑门和寄存器产生无毛刺输出的时钟切换?
关于华为P50 Pro的简单介绍
无人机技术在矿业领域中的应用分析
联电正在谈判明年的合同,该公司将再次提高晶圆代工的价格
《唐人街探案2》的黑科技,借助aigo固态U盘我们也能够轻松做到
基于DSP的加速度计温度控制系统的硬件设计
现场总线如何保证工业通信的数据稳定快速传输
基于放大器模块和集成滤波器MAX263实现新型程控滤波器的设计
如何在FPGA内实现扰码过程
华为Mate9终于降价,华为P10功不可没
rs232c串口接线图详解
从PC串行口实现简单红外数据传输
魅蓝6T评测 在有限的硬件上做到了超越同级的体验
iPhone8终极样机偷曝,屏幕太惊人!这样的iphone8是你期待的吗?
苹果今年没有出5G版iPhone怪高通