0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

OpenFPGA 来源:OpenFPGA 2023-08-16 09:05 次阅读

大部分开发者使用 BUFGCTRL 或 BUFGMUX进行时钟切换,它们在时钟切换上可以提供无毛刺输出。然而,了解所涉及的原理是有好处的。

9f92d3a2-3bcc-11ee-9e74-dac502259ad0.png

当然,无论我们在同步逻辑中使用哪种技术,重要的是要确保在进行时钟切换时输出上没有毛刺。任何故障都可能导致下游逻辑的错误行为。

那么,让我们看看如何仅使用逻辑门和寄存器产生无毛刺输出的时钟切换。Peter 大神介绍了如下电路。

9fac4512-3bcc-11ee-9e74-dac502259ad0.png

使用两个寄存器来存储选择信号的状态。这些状态在时钟的下降沿更新,并且取消选择的寄存器将其时钟保持在复位状态。由于下降沿,时钟处于低电平,并且输出时钟保持低电平。它将保持低电平,直到所选时钟变低(以更新其控制寄存器)并变高。

在 Vivado 中实现这一点很简单。只需几行代码即可创建时钟切换。

libraryieee;

useieee.std_logic_1164.all;


entityclk_swisport(

clk_a:instd_logic;

clk_b:instd_logic;

sel:instd_logic;

clk_out:outstd_logic);

endentity;



architecturertlofclk_swis


signalclk_a_reg:std_logic:='0';

signalclk_b_reg:std_logic:='0';


begin


cntrl_a:process(clk_a)

begin

iffalling_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 引脚 。

9fc1c0c2-3bcc-11ee-9e74-dac502259ad0.png

使用 100 MHz 的 XPM 同步器宏来对其进行去抖。XPM 宏的输出用于切换时钟并路由至 GPIO 引脚 。

创建了一个简单的测试平台,可以在时序仿真中运行仿真,以确定实现中是否存在故障。

9fe10e00-3bcc-11ee-9e74-dac502259ad0.png

在上图中可以看到时序仿真中没有观察到任何故障。

下一步是对电路板进行编程,并观察在硬件中实现设计时设备中是否存在故障。

将频率设置为 6.25 MHz 和 8.125 MHz。默认情况下,当选择输入为低电平时,将输出 8.125 MHz 时钟。将其切换至高电平将输出切换至 6.25 MHz 时钟。

当然,我们需要能够确定切换发生时输出上是否存在任何毛刺。因此,使用示波器监测内部同步选择信号和时钟输出引脚。

从下面观察输出时钟时可以看出,当时钟的选择线改变时,在输出时钟线上没有观察到毛刺。

a003b57c-3bcc-11ee-9e74-dac502259ad0.pnga026828c-3bcc-11ee-9e74-dac502259ad0.png

尽管现代 FPGA 包含更先进、功能更强大的时钟管理和时钟电路,但一些低端FPGA上这些电路并不存在,我们就需要自己去创建始终切换电路。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5343

    浏览量

    120363
  • 存储器
    +关注

    关注

    38

    文章

    7492

    浏览量

    163834
  • 逻辑门
    +关注

    关注

    1

    文章

    142

    浏览量

    24053
  • 时钟切换电路

    关注

    0

    文章

    7

    浏览量

    5774
  • PLL电路
    +关注

    关注

    0

    文章

    92

    浏览量

    6408

原文标题:【数字实验室】时钟切换

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA实战演练逻辑篇47:消除组合逻辑毛刺

    寄存器后,新的最终的输出yreg不再随意的改变,而是在每个时钟clk的上升沿锁存当前的输出值。(特权同学,版权所有)图5.17 寄存器锁存
    发表于 07-08 10:38

    寄存器、锁存和触发的区别

    暂存。缺点:时序分析较困难。不要锁存的原因:1、锁存容易产生毛刺,2、锁存在ASIC设计
    发表于 07-03 11:50

    psoc4-4200装置是可能的CPU寄存器输出路由到逻辑的输入吗?

    你好!在psoc4-4200装置,它是可能的CPU寄存器输出路由到逻辑的输入?在我的情况下,CPU产生一个8位的数字,我需要将这些位的几
    发表于 09-03 08:51

    简谈FPGA的竞争冒险和毛刺问题

    使用。 5、延迟办法因为毛刺最终是由于延迟造成的,所以可以找出产生延迟的支路。对于相对延迟小的支路,加上毛刺宽度的延迟可以消除毛刺。还可以用高频
    发表于 05-30 17:15

    FPGA | 竞争冒险和毛刺问题

    宽度的延迟可以消除毛刺。还可以用高频时钟来驱动一移位寄存器,待延时信号作数据输入,按所需延时正确设置移位寄存器的级数,移位寄存器
    发表于 11-02 17:22

    消除组合逻辑产生毛刺—PLD设计技巧

    消除组合逻辑产生毛刺—PLD设计技巧 Design of Combinational Circuit What is Combinational Circuit Combinational Circuit if
    发表于 09-11 09:34 29次下载
    消除组合<b class='flag-5'>逻辑</b><b class='flag-5'>产生</b>的<b class='flag-5'>毛刺</b>—PLD设计技巧

    寄存器与移位寄存器

    寄存器与移位寄存器 寄存器是用来寄存数码的逻辑部件,所以必须具备接收和寄存数码的功能。任何一种
    发表于 03-12 15:19 59次下载

    传统的移位寄存器与光耦合隔离移位寄存器有什么不同

    送位,另一个用于低位,并且在脉冲发送所有位之后,电路最终并发1和0脉冲选通数据到输出寄存器。电路隔离侧的两个逻辑封装将两个负脉冲信号解码回数据,
    的头像 发表于 08-12 16:42 2269次阅读
    传统的移位<b class='flag-5'>寄存器</b>与光耦合<b class='flag-5'>器</b>隔离移位<b class='flag-5'>寄存器</b>有什么不同

    MCU时钟设计方案

    两个时钟频率可以彼此完全无关,或者它们可以是彼此的倍数。在任何一种情况下,都有可能在切换时在时钟线上产生毛刺
    发表于 09-01 10:12 2887次阅读
    MCU<b class='flag-5'>时钟</b>设计方案

    详解移位寄存器,串行输入和串行输出的分析

    串行输入,串行输出移位寄存器每级将数据延迟一个时钟时间。 它们将为每个寄存器存储一点数据。串行输入,串行输出移位
    的头像 发表于 09-24 15:18 3.3w次阅读
    详解移位<b class='flag-5'>寄存器</b>,串行输入和串行<b class='flag-5'>输出</b>的分析

    时钟毛刺注入攻击的研究分析综述

    时钟毛刺注入是现实环境中有效且常用的故障注入方法。时钟毛刺注入是通过在正常时钟周期中引入一段毛刺
    发表于 04-26 14:20 9次下载
    <b class='flag-5'>时钟</b><b class='flag-5'>毛刺</b>注入攻击的研究分析综述

    STM32寄存器点灯

    配置寄存器使STM32最小系统板上的LED灯点亮根据原理图,要使D2点亮,需要将PC13拉低,分为以下步骤:使能GPIO的时钟配置GPIO13为输出模式配置GPIO13输出低电平一、确
    发表于 12-08 17:21 3次下载
    STM32<b class='flag-5'>寄存器</b>点灯

    直接修改寄存器输出内部时钟的方法

    电子发烧友网站提供《直接修改寄存器输出内部时钟的方法.pdf》资料免费下载
    发表于 09-19 15:43 0次下载
    直接修改<b class='flag-5'>寄存器</b>来<b class='flag-5'>输出</b>内部<b class='flag-5'>时钟</b>的方法

    寄存器属于时序逻辑电路吗 寄存器是什么逻辑电路

    成部分之一。 寄存器属于时序逻辑电路。时序逻辑电路是指其输出状态不仅依赖于当前的输入,还依赖于过去的输入和时钟信号的变化。在
    的头像 发表于 02-18 09:37 1632次阅读

    寄存器逻辑功能有保持功能吗 寄存器的输入输出的方式有分别有哪几种

    操作数等。寄存器逻辑功能包括保持功能,其输入输出方式包括并行输入输出、串行输入输出和双向输入输出
    的头像 发表于 02-18 09:39 2047次阅读