家装公司需要什么条件,昆明网站优化推广平台,校园微信网站模板,在线商城开发费用大部分开发者使用 BUFGCTRL 或 BUFGMUX进行时钟切换#xff0c;它们在时钟切换上可以提供无毛刺输出。然而#xff0c;了解所涉及的原理是有好处的。 当然#xff0c;无论我们在同步逻辑中使用哪种技术#xff0c;重要的是要确保在进行时钟切换时输出上没有毛刺。任何故障都… 大部分开发者使用 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)beginif falling_edge(clk_a) then clk_a_reg (not sel) and (not clk_b_reg);end if;end process;cntrl_b : process(clk_b)beginif 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上这些电路并不存在我们就需要自己去创建时钟切换电路。