逻辑时钟_求职攻略| 异步电路中的时钟无毛刺切换(GlitchFree)

本文围绕时钟无毛刺切换(Glitch-Free)问题展开,探讨异步电路中如何避免毛刺的产生,适合IC和FPGA求职者。内容包括单比特信号跨时钟域问题、毛刺滤除代码实现、减小串扰的技巧,以及IC和FPGA领域的笔试题解析,帮助求职者提升专业知识。
摘要由CSDN通过智能技术生成

不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我

5b6ee19637dd910f878194c4bd06a4a4.gif 76bdd0b126dd07acac2b7601216024a7.gif

上一期我们讲解了门控时钟电路的设计,当使用纯组合逻辑的方式实现时会产生毛刺(Glitch),这是异步电路最常见的问题。今天我们来讲解另一个笔试、面试中常见的去毛刺问题——时钟无毛刺切换(Glitch-Free)。IC岗位笔试常会出现,如给电路图画波形。

在SoC的设计中,根据实际需求,经常需要对不同频率、相位的时钟源进行选择与切换,最简单的时钟切换电路就是两个时钟切换,可以用纯组合逻辑来实现。我们先画一下用组合逻辑实现功能后的波形大概是怎样的,如下所示。

ba93046e97a7e3b74eaf71800357799e.png

当sel为高时选通sclk1,当sel为低时选通sclk2,clk_out为切换输出的结果,我们可以清晰的发现①和②处有毛刺产生,我们用RTL代码来描述并仿真验证。 //-------------------------- 01 module test ( 02      input    wire     sclk1   , 03      input    wire     sclk2   , 04      input    wire     sel     , 05      06      output   wire     clk_out      07 ); 08                 09 assign clk_out = ( sel & sclk1 ) | (~ sel & sclk2 ); 10 11 endmodule

//--------------------------

综合出的RTL视图如下所示:

027af4c6ff79edf11d000f51f9fe99c5.png

经过仿真我们发现在①处和②处时钟选择信号变化的时候会导致切换后的输出时钟产生毛刺,这显然是我们不想要的结果,所以要对上述的电路结构进行修改。

8c7d08576e70c050c108064685af51a4.png

我们先思考一下产生毛刺的原因,然后再想办法怎么修改。从上图可以看出,主要是选择信号sel导致的。由于我们使用的是组合逻辑实现的切换功能,所以当选择信号sel发生变化时,输出时钟立刻发生变化,也就是说选择信号sel是不受控制的,随时可以跳变,这样纯组合逻辑输出得到的clk_out就完全有可能会产生毛刺,所以我们需要改进电路。于是我们尝试着将sel信号分别同步于sclk1和sclk2后再实现切换的功能,RTL代码如下所示: //------------------------ 01 module test ( 02      input    wire     sclk1   , 03      input    wire     sclk2   , 04      input    wire     rst_n   , 05      input    wire     sel     , 06      07      output   wire     clk_out      08 ); 09   10 reg sel_sclk1 ; 11 reg sel_sclk2 ; 12   13 always @( posedge sclk1 or negedge rst_n ) 14      if ( rst_n == 1'b0 ) 15          sel_sclk1 <= 1'b0 ; 16      else       17          sel_sclk1 <= sel ; 18 19 always @( posedge sclk2 or negedge rst_n ) 20      if ( rst_n == 1'b0 ) 21          sel_sclk2 <= 1'b0 ; 22      else       23          sel_sclk2 <= ~ sel ; 24 25 assign clk_out = ( sel_sclk1 & sclk1 ) | ( sel_sclk2 & sclk2 ); 26 27 endmodule

//---------------------

综合出的RTL视图如下所示:

8e5c616d99e1e6d2952872c1d36999e9.png

我们可以看到如下所示的仿真结果,发现原来②处的毛刺已经消除了,而①处的毛刺还存在,这是怎么回事儿呢?

104b5f465102916e5ec5a56859b07007.png

我们仔细分析未消除毛刺的原因,发现在①处附近sel信号分别同步于sclk1和sclk2后的信号sel_sclk1和sel_slck2同时为高,这样会在最后的组合逻辑运算的时候两个时钟同时有效,在或运算的时候产生毛刺。为了避免这种情况,我们需要做的就是让sel_sclk1和sel_slck2信号不能同时有效。所以我们使用一个小技巧,让彼此寄存器输出的信号取反后再和对应的sel信号相与即可,RTL代码如下所示: //-------------------------- 01 module test ( 02      input    wire     sclk1   , 03      input    wire     sclk2   , 04      input    wire     rst_n   , 05      input    wire     sel     , 06      07      output   wire     clk_out      08 ); 09   10 reg sel_sclk1 ; 11 reg sel_sclk2 ; 12   13 always @( posedge sclk1 or negedge rst_n ) 14      if ( rst_n == 1'b0 ) 15          sel_sclk1 <= 1'b0 ; 16      else       17          sel_sclk1 <= sel & ~ sel_sclk2 ; 18 19 always @( posedge sclk2 or negedge rst_n ) 20      if ( rst_n == 1'b0 ) 21          sel_sclk2 <= 1'b0 ; 22      else       23          sel_sclk2 <= ~ sel & ~ sel_sclk1 ; 24 25 assign clk_out = ( sel_sclk1 & sclk1 ) | ( sel_sclk2 & sclk2 ); 26 27 endmodule //----------------------- 综合出的RTL视图如下所示:

0b0987be71b6ec5e1e9d2812f5eb0cc2.png

我们可以看到如下所示的仿真结果,发现毛刺已经完全消除了,因为sel_sclk1和sel_slck2信号不存在同时有效的情况,所以完美的实现了两个时钟的切换。

f8fd240f136fe337208078122e2fd7a0.png

我们可以观察到sel_sclk1信号在sclk1时钟域产生,需要取反后再和sel信号相与到sclk2时钟域,这样会出现跨时钟域问题产生亚稳态现象,所以我们可以在sclk2时钟域多加一级寄存器通过打拍的方式处理亚稳态问题(sel_sclk2信号同理)。 其实在FPGA中有专门对应时钟切换的原语可以使用,既方便切换效果又好,也是一种不错的选择。

0b3dd42a1c3b2ba62c9c82fac5860006.png

END 02b0cc493b1b191a57729f71e433b18a.png

目前,我们正在通过大疆硬件岗和FPGA逻辑岗的题目,为大家带来笔试题的解析,以及知识的补充。如果有想要解析的题目,可以发给达尔闻安排。同时,欢迎加入达尔闻求职技术交流群,进群方式:添加妮姐微信(459888529),并备注求职,即可邀请进群

达尔闻求职系列: 华为海思校招机考范围 求职攻略| 运放压摆率&三运放仪表放大电路分析,含仿真文件 磁珠的用法、PCB布线3W规则

单比特信号跨时钟域问题详解

如何搞定状态机问题 电容击穿表现为短路? MOS管导通损耗和什么有关?

毛刺滤除的代码应该如何写

资深工程师总结减小串扰的7种方法

二进制数11.101对应的十进制数是多少

FGPA时序分析看这篇就够了 逻辑电路24种表达式

芯片工艺28nm的28是指什么

FPGA设计中的时序收敛准则 华为硬件逻辑岗(FPGA) 紫光展锐数字IC岗(编程题) 从无人机爱好者到获得DJI大疆Offer offer拿到手软,最后选华为!

IO的时序约束该如何设置

典型FPGA器件常用资源

死活清除不了的亚稳态,怎么减少出现概率?

典型5级流水线RSIC结构中的5大功能

三步优化FPGA时序设计

噪声还分颜色?粉红、白噪声解析

电源拓扑别再傻傻搞不清楚

开关电源中的MOS功耗来源

晶体管的静态工作点一步快速搞定!

老司机也复习功率二极管、三相半波可控整流电路

2021年校招提前批第一枪(vivo芯片设计岗)

建立时间VS保持时间,竞争VS冒险(紫光展锐IC笔试题)

RAM的大小为520*8bit,其地址需要多少位

有符号4位二进制数运算0101+1000,还会计算吗

错综复杂的建立保持时间路径你能搞明白吗

关于稳压二极管的坑,你一定要知道

学会分频,“为所欲为”

一网打尽状态机的套路

8个case学会FPGA中的阻塞与非阻塞

这种情况一定要用门控时钟!

34502b269a27f5e46149eaa53b8c2f03.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值