【数字实验室】时钟切换

news2024/12/24 8:39:53

21803777b6e91638e662ac0f7bf62988.jpeg

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

6435a938c12d1622cba3a52197d0b322.png

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

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

721319ab4ed588f10751dab4c4004548.png

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

在 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';


begin


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

de5a5d88233fa7db60be83606f777d79.png

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

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

1d30d31380d476c6520f342b09a859b9.png

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

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

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

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

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

00621838fc967b01e5b6280a2fb78ec9.png 32d291a42b3541f97d9b8e830af0154c.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/892722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无涯教程-Perl - times函数

描述 此函数返回一个四元素列表,为当前进程及其子进程提供用户,系统,子进程和子系统时间。 语法 以下是此函数的简单语法- times返回值 此函数返回ARRAY,($usertime,$systemtime,$childsystem,$childuser) 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -w($use…

一、ls 标准输出时出现乱码符号及解决办法

问题描述&#xff1a;采用 QSSh 登录远程主机时&#xff0c;执行 ls 指令&#xff0c;标准输出中出现乱码符号 如下&#xff0c;在成功 SSH 到远程主机后&#xff0c;执行 ls 指令&#xff0c;标准输出中出现一堆不认识的符号。 从标准输出来看&#xff0c;英文和中文并没有乱…

安科瑞无线测温产品在浙江某半导体项目的应用-安科瑞黄安南

摘 要&#xff1a;半导体被誉为“制造业的大脑”&#xff0c;在关系国家安全和国民经济命脉的主要行业和关键领域占据支配地位&#xff0c;是国民经济的重要支柱。随着数字技术的发展和数字经济在国民经济中所占比重越来越高&#xff0c;半导体产业的重要性还会进一步提升。安全…

文心一言 VS 讯飞星火 VS chatgpt (77)-- 算法导论7.3 2题

二、如果用go语言&#xff0c;在 RANDOMIZED-QUICKSORT 的运行过程中&#xff0c;在最坏情况下&#xff0c;随机数生成器 RANDOM 被调用了多少次?在最好情况下呢?以θ符号的形式给出你的答案? 文心一言&#xff1a; 在 RANDOMIZED-QUICKSORT 的运行过程中&#xff0c;最坏…

使用贝塞尔曲线算法制作曲线

一阶贝塞尔曲线 使用两个点绘制线段 p3p1(p2-p1)*t p1:起点;p2:终点;t:0-1;p3:线段L12上的点 两个点和t的变化(0-1)可得到一条线段 二阶贝塞尔曲线 使用三个点绘制曲线 p12p1(p2-p1)*t p23p2(p3-p2)*t p123p12(p23-p12)*t p12是线段L12上的点&#xff0c; p23是线段L23上的…

android:绘图 (android.graphics包)

android:绘图 View&#xff1a;组件&#xff0c;理解为画布 Drawable:所有可见对象的描述&#xff0c;理解为&#xff1a;素材类 Bitmap&#xff1a;图片类 Canvas&#xff1a;画笔 Paint&#xff1a;画笔样式与颜色、特效的集合 近期很多网友对Android用户界面的设计表示很感…

Lnton羚通关于如何解决nanoPC-T4 upgrade报错问题?

nanoPC-T4 在 ​​# sudo apt update 和 sudo apt upgrade​​升级或安装软件 ​​sudo apt install xxx​​时遇到以下问题&#xff1a;​​Failed to set up interface with /etc/hostapd/​ Setting up hostapd (2:2.6-15ubuntu2.8) ... Job for hostapd.service failed be…

学习 Linux 系统路线图

在计算机科学领域&#xff0c;Linux 操作系统以其稳定性、灵活性和卓越性能而受到广泛欢迎。要真正掌握 Linux 系统&#xff0c;我们需要深入了解其关键组成部分&#xff0c;包括系统、内存、进程、网络和存储等模块。让我们深入探索这些模块&#xff0c;以建立起对 Linux 系统…

【轻量级神经网络】ShuffleNetv1-2详解

文章目录 1、ShuffleNetV11.1、分组卷积1.2、channel shuffle1.3、ShuffleNet基本单元1.4、整体结构 2、ShuffleNetV22.1、基本单元2.2、整体结构 1、ShuffleNetV1 1.1、分组卷积 Group convolution是将输入层的不同特征图进行分组&#xff0c;然后采用不同的卷积核再对各个组…

KVM配置使用ovs网桥

KVM配置使用ovs网桥 1、安装openvswitch 2、启动服务 3、配置ovs 重启网络服务 systemctl restart network 4、 KVM配置使用ovs网桥 配置生效&#xff1a;virsh net-define br0.xml virsh net-start bro virsh net-autostart br0 5、虚…

怎么实现技术评卷时间0投入的?(上)

01 痛苦的技术问答题评审 指针走到了九点&#xff0c;凝视着时钟的技术招聘官Jasmine从昏沉中回到现实&#xff0c;她将咖啡连同叹息一口抿了下去&#xff0c;并端正坐在电脑前。又是一天的评卷日…… 技术招聘已持续数周&#xff0c;公司筛选出了100位嵌入式工程师候选人的技…

ATA-2000系列高压放大器——应用场景介绍

ATA-2000系列高压放大器——应用场景介绍 ATA-2000系列是一款理想的可放大交、直流信号的高压放大器。最大差分输出1600Vp-p (800Vp)高压&#xff0c;可以驱动高压型负载。电压增益数控可调&#xff0c;一键保存常用设置&#xff0c;为您提供了方便简洁的操作选择&#xff0c;同…

【03 英语语法:从句(名词从句、定语从句/形容词从句、状语从句/副词从句)】

从句 从句&#xff1a;名词从句、定语从句、状语从句&#xff08;名定状名形副&#xff09;1. 名词从句&#xff08;名词&#xff09;&#xff1a;主语、宾语、表语、同位语、宾补▲名词从句的种类&#xff08;按引导词&#xff09;&#xff1a; that、whether、疑问词 句子⑴…

pycharm配置anaconda环境

前提&#xff1a; 使用anaconda已经创建了一个环境名为test&#xff0c;现在要将test环境中的python解释器作为pycharm中工程的解释器。 如何添加解释器 点击&#xff1a;File->Project->Python Interpreter->右上角Add Interpreter->Add Local Interpreter. 选…

blender 发射体粒子

发射体粒子的基础设置 选择需要添加粒子的物体&#xff0c;点击右侧粒子属性&#xff0c;在属性面板中&#xff0c;点击加号&#xff0c;物体表面会出现很多小点点&#xff0c;点击空格键&#xff0c;粒子会自动运动&#xff0c;像下雨一样&#xff1b; bender 粒子系统分为两…

UE4/UE5 “无法双击打开.uproject 点击无反应“解决

一、方法一&#xff1a;运行UnrealVersionSelector.exe 1.找到Epic Game Lancher的安装目录&#xff0c; 在lancher->Engine->Binaries->Win64->UnrealVersionSelector.exe 2.把UnrealVersionSelector.exe 分别拷贝到UE4 不同版本引擎的 Engine->Binaries->…

【Modbus通信实验二】VC++编写串口调试助手

编写串口调试助手并能在虚拟机中实现虚拟端口通信。步骤如下&#xff1a; 项目中引入Microsoft Communications Control组件&#xff0c;并编写串口初始化函数。 void CMODBUSDlg::initcomm() {//串口状态&#xff0c;避免重复打开串口CommOpenFlag FALSE;//设置串口端口号…

Maven构建工具下载与配置(图文详细)

一.下载安装 1.找到官网 2.进行下载 3.解压文件到想要的目录 二.系统配置 配置本地仓库localRepository 1.配置本地仓库位置xml 为了方便管理&#xff0c;在apache-maven-3.9.4目录下创建mvn_rep 2.找到ocalRepository标签 3.设置本地仓库路径 配置私服&#xff08;由于正常…

2023年7月京东空调行业品牌销售排行榜(京东数据运营)

上半年空调市场的热度较高&#xff0c;尽管受家电市场整体环境的影响&#xff0c;同比来看空调销量销额有一定幅度的下滑&#xff0c;但从环比来看&#xff0c;空调市场的销量销额纷纷翻倍增长。不过&#xff0c;进入7月份&#xff0c;空调市场整体就比较低迷了。 根据鲸参谋平…

matlab中exp和expm的区别

exp()为数组 X 中的每个元素返回指数 e x e^{x} ex expm()计算 X 的矩阵指数。 两个函数传入矩阵后计算的结果是不同的&#xff0c;千万不能混淆。之前曾经想当然得把exp里传入矩阵当矩阵指数使用&#xff0c;也未验证正确性&#xff0c;实不应该。