【华为】同步电路设计技术及规则(二)

本次分享华为公司的《大规模逻辑设计指导书》中的“同步电路设计技术及规则”的部分内容。


6.多时钟的同步化

我们在设计中,经常预见这种情况,一个控制信号来自其它芯片,或者芯片其它模块,该信号相对本电路来讲是异步的 ,即来自不同的时钟源, 其模型可用图1.10表示.

在这里插入图片描述

在图1.10中 ,CLK1与CLK2来自不同的时钟源 ,该电路即可能出现在同一芯片里 ,又可能出现在不同芯片里, 但效果是一样的, 即存在危险性, 由于时钟源不同 ,对REG2和REG3来讲 ,在同一时刻, 一个认为 REG1的输出是 1 ,另一个认为是 0, 这必定造成电路判断出现混乱 ,导致出错。这种错误的实质是内部其它电路对输入控制信号 ,也可认为是状态信号 ,认识不一致 ,导致不同的电路进入不同的状态 ,正确的做法是在REG1之后再加一个触发器, 用CLK2的时钟沿去采样 ,然后用该触发器的输出参与其后同步电路 活动, 如图1.11所示。

在这里插入图片描述

如果输入信号是两根以上信号线, 如下图所示 ,则该处理方法不准确, 应引入专门的同步调整电路或其它特殊处理电路 。我们在设计时 ,会对总线数据进行同步调整 ,却往往忽略了对一组控制信号进行同步调整。

在这里插入图片描述

7.RS触发器

在这里插入图片描述

RS触发器是一种危险的触发器 ,R=S=1会导致不稳定态 ,初始状态也不确定, 在设计时尽量避免采用这种电路, 或用如图1.14电路改进。

在这里插入图片描述

可编程逻辑器件一般选用结构中的D触发器来完成设计。我们认为设计时最好从系统的角度来考虑 实现电路的功能 ,建议使用用VHDL直接描述所需要的设计, 这样作 既安全 ,又具有极大的灵活性。

 Process(nreset,clk)
 Begin
 If nreset = ‘0’ then
 Rs <= ‘0’;
 Elsif clk = ‘1’ and clk’event then
 Case r&s is
 When “00” =>
 Rs <= rs;
 When “01” =>
 Rs <= ‘1’;
 When “10” =>
 Rs <= ‘0’;
 When “11” =>
 --这里可以自定义R=S=1的行为
 When others =>
 Rs <= ‘0’;
 End case;
 End if; 
 End precess;

8.上升沿检测

在这里插入图片描述

不建议采用这种电路检测信号的上升沿 ,因为IN为数据信号, 上边容易有毛刺 ,使触发器误动作。

在这里插入图片描述

采用时钟检测信号 ,出现0->1的变化即为上升沿 ,当被测信号与时钟相关时 ,可以不用第一个触发器。

9.下降沿检测

在这里插入图片描述

同上升沿检测电路 ,这种电路对毛刺, 干扰极为敏感。

在这里插入图片描述

采用时钟检测信号, 出现1->0的变化即为下降沿 ,当被测信号与时钟相关时, 可以不用第一个触发器。

10.上升/下降沿检测

在这里插入图片描述

采用时钟检测信号, 出现变化即为上升/下降沿 ,当被测信号与时钟相关时, 可以不用第一个触发器。

11.对计数器的译码

在这里插入图片描述

对计数器译码 ,可能由于竞争冒险产生毛刺, 如果后级采用了同步电路 ,我们完全可以对此不予理会。如果对毛刺要求较高, 推荐采用Gray编码(PLD)或One-hot编码(FPGA)的计数器, 一般不要采用二进制码。具体描述中, 我们可以用状态机来描述 ,而利用逻辑综合工具来编码 ,有经验的选手可以自己强制定义状态机的编码。

12.门控时钟

在这里插入图片描述

门控时钟是非常危险的, 极易产生毛刺 ,使逻辑误动作 ,在可编程逻辑器件中 ,一般使用触发器的时钟使能端。而这样 ,并不增加资源 ,只要保证建立时间, 可使毛刺不起作用。

13.锁存器

在这里插入图片描述

锁存器是较危险的电路, 没有确定的初始状态, 输出随输入变化, 这意味着毛刺可以通过锁存器, 若该电路与其它D触发器电路相连, 则会影响这些触发器的建立保持时间, 除非有专用电路特别需要 ,其实总线锁存之类的功能用373之类的小规模IC更好 ,在设计内部 ,不要使用锁存器。

在这里插入图片描述

引入时钟, 可以实现锁存器的功能。

14 多级时钟或多时钟网络

由于时钟建立-保持时间的限制, FPGA设计中应尽量避免采用多时钟网络 ,或尽量减少时钟的个数。

图1.25是有问题的电路。这是一个含有险象的多级时钟的例子, 多路选择器的输入是clk和clk的2分频 ,时钟是有SEL引脚控制的多路选择器输出的, 在这两个时钟均为逻辑1时 ,当SEL线的状态改变时, 存在静态冒险竞争现象, 冒险竞争险象的程度取决于工作的条件, 图1.26是改进后的电路。

改进

总之, 任何数字设计 ,为了成功地操作 ,时钟是关键。设计不良的时钟在极限的温度, 电压或制造工艺的偏差下将导致错误的行为, 而设计良好的时钟应用 ,则是整个数字系统长期稳定工作的基础。

对于一个设计项目来说 ,全局时钟 ,或同步时钟, 是最简单和最可预测的时钟 。在真正的同步系统情况下 ,由输入引脚驱动的单个主时钟去钟控设计项目中的每一个触发器 ,几乎所有的可编程逻辑器件中都有专用的全局信号引脚。它的特殊布线方式可以直接连到器件中的每一个寄存器, 只要保证输入数据的建立和保持时间满足要求, 相应可编程器件的数据手册中可查到。整个同步系统就可以在全局时钟的驱动下可靠工作, 所以在可能的情况下 一定要使用全局时钟。

3.4 不建议使用电路

  1. 不建议使用组合逻辑时钟或门控时钟。

    组合逻辑很容易产生毛刺, 用组合逻辑的输出作为时钟很容易使系统产生误动作。

  2. 不建议使用行波时钟。

  3. 尽量避免采用多个时钟 ,多使用触发器的使能端来解决。

    在可编程逻辑器件设计时 ,由于时钟建立应尽量避免采用多时钟网络 ,或者采用适当的措施减少时钟的个数,使用频率低的时钟尽量简化消除。

  4. 触发器的置/复位端尽量避免出现毛刺, 及自我复位电路等 ,最好只用一个全局复位信号。

  5. 电路中尽量避免, 死循环电路, 如RS触发器等。

  6. 禁止时钟在不同可编程器件中级连 ,尽量降低时钟到各个器件时钟偏差值。

同一个时钟在不同可编程器件中使用时不允许级连, 而且应该保证该时钟到达不同可编程器件输入引脚的时钟偏差足够小。因为经过多个可编程器件的延时后 ,难以估计该时钟在链上各个触发器时钟之间产生的大量时间偏移, 如果这种时间偏移引起建立时间 ,保持时间难以满足的话 ,那么设计的逻辑就极有可能要失败了。

未完待续!!

往期精彩

【华为】可编程ASIC设计方法简介(三)

【华为】可编程ASIC设计方法简介(二)

【华为】可编程ASIC设计方法简介(一)

【华为】verilog语言编写规范(三)

【华为】verilog语言编写规范(二)

【华为】verilog语言编写规范(一)

【华为】Verilog HDL入门教程(5-10章)

【华为】Verilog HDL入门教程(4章)

【华为】Verilog HDL入门教程(3章)

【华为】Verilog HDL入门教程(1-2章)

【华为】FPGA设计设计规范


本文完!!!

欢迎关注,更精彩的内容等着你!

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值