笔试

2023-11-18


前言

嗨,今天来学习复位电路设计相关问题~
微信关注《FPGA学习者》获取更多精彩内容


40.复位电路设计

前面在时序分析中提到过亚稳态的概念,每天学习一点FPGA知识点(9)之时序分析并且在电路设计中如果不满足Tsu(建立时间)和Th(保持时间),很容易就出现亚稳态;在跨时钟域传输的一系列措施也是为了降低亚稳态发生的概率。

今天再说另一个可能会产生亚稳态问题的电路;
复位电路;

1️⃣recovery time和removal time

在正式开始复位电路设计之前,先说明两个概念,恢复时间(recovery time)和移除时间(removal time)。[注,此处以低电平复位为例]

恢复时间:撤销复位时,复位信号无效到时钟有效沿来临之前需要维持的最小的时间,称为恢复时间,类似于同步时钟的建立时间setup time;

移除时间:撤销复位时,在时钟有效沿来临之后复位信号还需要保持复位状态的时间为去除时间,类似于同步时钟的保持时间hold time;

如下图所示:
在这里插入图片描述
[注]:

①概念中所说的两个时钟沿并不是同一个时钟沿,可以从另一个角度解释:以复位结束的上升沿(低电平复位的情况下)为基准,复位结束前一个时钟沿到复位结束之间为移除时间;复位结束后到下一个时钟沿之间为恢复时间。

②两个定义都是在复位结束的时候定义的,因为复位结束,系统马上处于工作状态,所以才需要考虑亚稳态问题。

2️⃣同步复位和异步复位

①同步复位

同步复位:指的是加到所有功能触发器上的复位信号完全同步于时钟信号源。复位信号只有在时钟上升沿到来时,才能有效,否则,无法完成对系统的复位工作。复位原理如下图所示:
在这里插入图片描述
[图源:CSDN@小汪的IC自习室]
其代码如下:

module test(
  input        sys_clk,
  input        sys_rst_n,

  input        din,
  output  reg   dout
  );

  always@(posedge sys_clk) begin
    if(!sys_rst_n)
      dout <= 1'b0;
    else
      dout <= din;
  end
endmodule

综合后的电路图如下:
在这里插入图片描述
优点:

*系统为同步时序,有利于时序分析;
*抗干扰性能好,能有效剔除信号中短于时钟周期的毛刺;

缺点:

*复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。同时还要考虑如:时钟偏移、组合逻辑路径延时、复位延时等因素。

*由于大多数的厂商目标库内的触发器都只有异步复位端口,采用同步复位的话,就会耗费较多的逻辑资源(如上图中使用了一个2选1多路选择器)。

②异步复位

复位信号直接接到功能触发器的异步复位引脚,复位只与复位信号有关,与时钟无关。无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。异步复位的工作原理如下图所示:
在这里插入图片描述
其代码如下:


module test(
  input        sys_clk,
  input        sys_rst_n,

  input        din,
  output  reg   dout
  );

  always@(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
      dout <= 1'b0;
    else
      dout <= din;
  end
endmodule

综合出的电路图,如下图所示
在这里插入图片描述
通过这个图能很明显得看出来,比同步复位电路少用了一些资源。

优点:

*异步复位信号识别方便,很容易应用到全局复位;
*可以节省逻辑资源(对比两个复位电路即可看出);

缺点:

*复位信号容易受到毛刺的影响,一点毛刺信号就有可能引发电路复位,造成系统运行错误。
*复位信号的释放具有随机性,如果复位信号释放不满足recovery或者removal,则会导致亚稳态的产生。

3️⃣异步复位同步释放

对于复位情况下的亚稳态,常常是因为不满足时序要求造成的(主要是recovery和removal),最常用的处理方式是异步复位,同步释放。

通过异步复位和同步释放,可以使复位信号到来时,不受时钟控制,可以立即复位;但是复位信号释放时,受同步时钟控制。

其电路原理图如下:
在这里插入图片描述
先通过两级触发器进行异步复位信号的同步,输出的信号作为后续整个系统的复位信号;

其对应的代码如下:


module test(
  input        sys_clk,        //系统时钟信号
  input        async_rst_n,    //外部输入的复位信号

  input        din,          //输入的数据信号
  output  reg   dout          //输出的数据信号
  );    
  reg  sync_rst_n1;            //第一级触发器输出
  reg  sync_rst_n2;            //第二级触发器输出,经释放同步后的复位信号

  always@(posedge sys_clk or negedge async_rst_n)begin
    if(!async_rst_n)begin
      sync_rst_n1 <= 1'b0;
      sync_rst_n2 <= 1'b0;
    end
    else begin
      sync_rst_n1 <= 1'b1;
      sync_rst_n2 <= sync_rst_n1;
    end
  end

    always@(posedge sys_clk or negedge sync_rst_n2) begin
        if(!sync_rst_n2)
      dout <= 1'b0;
    else
      dout <= din;
    end
endmodule

综合后的电路图如图所示:
在这里插入图片描述接下来,对该电路进行仿真分析,看看是如何异步复位、同步释放的。testbench文件如下:

`timescale 1ns/1ps

module test_tb;

  reg  sys_clk;        //系统时钟信号
  reg  async_rst_n;    //外部输入的复位信号
    
  reg  din;          //输入的数据信号
  wire  dout;          //输出的数据信号


test test_u1(
  .sys_clk(sys_clk),        //系统时钟信号
  .async_rst_n(async_rst_n),    //外部输入的复位信号
  
  .din(din),          //输入的数据信号
  .dout(dout)          //输出的数据信号
  );    

  always #10 sys_clk = ~sys_clk;
  
  initial begin
    sys_clk = 0;
    async_rst_n = 0;
    din = 1;
    #19;
    async_rst_n = 1;
    #99;
    async_rst_n = 0;
    #34;
    async_rst_n = 1;
    #97;
    async_rst_n = 0;
    #3;
    async_rst_n = 1;
    #71;
    async_rst_n = 0;
    #16;
    async_rst_n = 1;
  
    #200;
    $stop;
  end

endmodule

当然了,我只是简单的仿真一下,也许写的testbench并不是很好,能说明问题即可,仿真图如下图所示:
在这里插入图片描述
上图中,很明显的可以看出,异步复位信号(低电平)到来时,dout立马变为0,但是在复位信号释放后延迟两个周期,到第三个周期才真正的恢复到工作状态;这跟我们一开始使用的两级触发器对释放信号进行同步有关系。

异步复位和同步释放,其实可以分开来看,单纯的理解为两个信号来控制着整个系统。同步释放信号相对于外部复位信号的释放总是存在一定的延迟,不过延迟很小,也就两个周期,实际中也是可以接受的。

本文参考:

微信关注“FPGA学习者”获取更多精彩内容


往期精彩

笔试|面试|FPGA知识点大全系列(1)
笔试|面试|FPGA知识点大全系列(2)
笔试|面试|FPGA知识点大全系列(3)
笔试|面试|FPGA知识点大全系列(4)
笔试|面试|FPGA知识点大全系列(5)
笔试|面试|FPGA知识点大全系列(6)
笔试|面试|FPGA知识点大全系列(7)之异步FIFO设计
笔试|面试|FPGA知识点大全系列(8)之时序分析
笔试|面试|FPGA知识点大全系列(9)FIFO深度计算详解
笔试|面试|FPGA知识点大全系列(10)跨时钟域问题大全解(上)
笔试|面试|FPGA知识点大全系列(11)跨时钟域问题大全解(下)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

笔试 的相关文章

  • 中国科学信息科学latex模板编译报错的解决办法

    中国科学 信息科学 latex模板编译不通过解决办法 1 前言 本文的解决办法不需要重新下载ctex 只需要添加两个文件即可 主要参考了下面的这篇文章如果你想知道为什么要这么改 强烈推荐阅读这篇博客 编译 CCT 模板 stone zeng
  • Django 模板的导入与继承

    目录 模板的导入和继承 1 模板的导入之include标签 2 模板的继承 派生之extendds标签 block标签 模板的导入和继承 在实际开发中 模板文件彼此之间可能会有大量冗余代码 为此django提供了专门的语法来解决这个问题 主

随机推荐

  • AIGC之GPT-4:GPT-4的简介与详细攻略

    AIGC之GPT 4 GPT 4的简介与详细攻略 简介 欢迎来到人工智能生成内容 AIGC 时代的新篇章 本篇博客将介绍GPT 4 Generative Pre trained Transformer 4 的核心原理 意义 亮点 技术点 缺
  • 【java笔记】泛型定义和使用

    为什么使用泛型 泛型的字面意思就是广泛的类型 利用泛型 同一套代码可以用于多种数据类型 这样 不仅可以复用代码 降低耦合 而且可以提高代码的可读性和安全性 可读性 var s new ArrayList
  • 【OpenGL进阶】04.支持多贴图的Shader

    这篇文章来实现一下多贴图的效果 在这篇文章中 再次对代码进行了封装 是代码看起来更加清晰明了 shader h中添加了SetTexture接口 pragma once include ggl h struct UniformTexture
  • [canvas] 坐标旋转

    坐标旋转 做圆周运动 vr 0 1 angle 0 radius 100 centerX 0 centerY 0 object x centerX Math sin angle radius object y centerY Math co
  • git报错:warning: unable to access

    git操作的时候出现该错误 warning unable to access Users a10 12 config git ignore Permission denied warning unable to access Users a
  • 一个女孩的就业之路(同济大学BBS上两年不沉的帖子)

    文章很长 有机会见到这篇文章的童鞋 希望能耐心看完 其他不多说 我是2005年毕业的 偶尔来这里看看 不常灌水 今天来随意写下一些 如果对各位有任何的帮助 是我衷心所愿 1 考研与就业 2004年的暑假 我和大多数人一样 艰难的抉择 究竟是
  • NacosValue 注解

    NacosValue 定义在 nacos api 工程中 com alibaba nacos api config annotation NacosValue 注解解析在 nacos spring project 工程中 com aliba
  • 阻塞队列java实现

    阻塞队列 目前队列存在的问题 1 很多场景要求分离生产者和消费者两个角色 它们得由不同的线程来担当 而之前的实现根本没有考虑线程安全问题 2 队列为空 那么在之前的实现里会返回null 如果硬拿到一个元素 只能不断循环尝试 3 队列为满 那
  • PHP魔术方(2)

    PHP魔术方 2 文章目录 PHP魔术方 2 1 toString 和 invoke tostring 和 invoke 两者的触发形式接近 2 call 用来检测所调用的成员方法是否存在 3 callStatic 4 get 5 set
  • 在Linux系统上用C++将主机名称转换为IPv4、IPv6地址

    在Linux系统上用C 将主机名称转换为IPv4 IPv6地址 功能 指定一个std string类型的主机名称 函数解析主机名称为IP地址 含IPv4和IPv6 解析结果以std vector
  • vue div高度自适应

    1 在 js文件中编写自定义指令 export default install Vue 在组件标签上绑定 v resizable 指令 并使用对象的形式通过绑定值传递宽度和高度以及最大 最小高度的值 在 bind 函数中 获取传递的值 并根
  • 走进区块链企业 I 用实践赋能实体产业,坚持提供价值服务的旺链科技

    作为华东师范大学MBA高材生 他在高科技制造 金融行业有着超过16年的业务咨询管理和技术架构经验 他是中国云体系产业创新联盟理事会常务理事 边缘计算产业联盟专家委员 也是原 Accenture资深总监 集成技术专家 而在如今话题正盛的 区块
  • linux创建,恢复和删除screen

    学习记录 侵删 目录 1 创建 2 恢复 3 删除 使用服务器训练模型时 如果服务器断开 之前的训练结果显示的终端就不好找到了 貌似可以通过线程去恢复 没试过 可以使用screen 训练前先打开一个screen 如果服务器断开 重连后可以恢
  • 最新免费版 Office 全家桶Copilot,Gamma+MindShow 两大ChatGPT AI创意工具GPT-4神器助力高效智能制作 PPT,一键生成,与AI智能对话修改PPT(免安装)

    目录 前言 ChatGPT MindShow 1 使用ChatGPT工具生成PPT内容 2 使用MindShow工具一键智能制作PPT MindShow简介 使用网页版制作 pdf转ppt GAMMA AI神器 GAMMA app介绍 注册
  • MySQL基础篇:sql_mode配置

    文章目录 零 简介 一 sql mode常用来解决的几类问题 二 sql mode包含的模式 三 sql mode各个选项作用示例 3 1 sql mode为空 对于不符合定义的值 会截断到符合定义类型 3 2 sql mode为ANSI
  • 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏 附完整源码 上图 写在前面 技术源于分享 所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习 java确实不适合写桌面应用 这里只是通过这个游戏让大家理解oop面向对象编程的过程
  • 【React】路由(详解)

    目录 单页应用程序 SPA 路由 前端路由 后端路由 路由的基本使用 使用步骤 常用组件说明 BrowserRouter和HashRouter的区别 路由的执行过程 默认路由 精确匹配 Switch的使用 重定向路由 嵌套路由 向路由组件传
  • 计算机网络体系结构 - 运输层

    一 运输层协议概述 运输层为应用进程之间提供端到端的逻辑通信 二 运输层的端口 端口 port 也称为协议端口号 protocol port number 对上层的应用进程进行标识 端口用一个16位端口号进行标志 端口号只具有本地意义 端口
  • 剑指offer-输出字符串所有种类的排列组合

    常规题 先校验长度 不符合则直接输出 符合则判断是否为最后一个字符 是则直接new对象输出 不是则交换begin和i位置的数字 再用递归输出 public class Test28 先校验 public static void permut
  • 笔试

    文章目录 前言 40 复位电路设计 1 recovery time和removal time 2 同步复位和异步复位 3 异步复位同步释放 本文参考 往期精彩 前言 嗨 今天来学习复位电路设计相关问题 微信关注 FPGA学习者 获取更多精彩