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

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

3天内不再提示

FPGA入门之复位电路设计

jf_78858299 来源:FPGA学习者 作者:Dawn yuan 2023-05-25 15:55 次阅读

复位电路设计

前面在时序分析中提到过亚稳态的概念,每天学习一点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,则会导致亚稳态的产生。

当然了,其实在同步复位情况下,也会有亚稳态问题的产生,详情参考文章《 FPGA中亚稳态——让你无处可逃 》,作者博客园:@屋檐下的龙卷风。

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,但是在复位信号释放后延迟两个周期,到第三个周期才真正的恢复到工作状态;这跟我们一开始使用的两级触发器对释放信号进行同步有关系。

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

关于复位电路的设计就暂时说到这里,不过好像没有说完,还有关于配置PLL之后的系统复位电路怎么设计等等,以后再详细讨论

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

    关注

    1602

    文章

    21320

    浏览量

    593199
  • 亚稳态
    +关注

    关注

    0

    文章

    44

    浏览量

    13118
  • 复位电路
    +关注

    关注

    13

    文章

    308

    浏览量

    44277
  • 时序分析
    +关注

    关注

    2

    文章

    126

    浏览量

    22473
收藏 人收藏

    评论

    相关推荐

    fpga设计实战:复位电路仿真设计

    最近看advanced fpga 以及fpga设计实战演练中有讲到复位电路的设计,才知道复位电路
    发表于 09-01 15:37 1504次阅读
    <b class='flag-5'>fpga</b>设计实战:<b class='flag-5'>复位</b><b class='flag-5'>电路</b>仿真设计

    FPGA入门教程

    FPGA入门教程 FPGA 入门教程 1 .数字电路设计入门 2 .FPGA 简介 3
    发表于 08-11 11:40

    Xilinx FPGA入门连载17:PWM蜂鸣器驱动之复位FPGA重配置功能

    `Xilinx FPGA入门连载17:PWM蜂鸣器驱动之复位FPGA重配置功能特权同学,版权所有配套例程和更多资料下载链接:http://pan.baidu.com/s/1jGjAh
    发表于 10-26 12:05

    例说FPGA连载17:时钟与复位电路设计

    `例说FPGA连载17:时钟与复位电路设计特权同学,版权所有配套例程和更多资料下载链接:http://pan.baidu.com/s/1c0nf6Qc FPGA的时钟输入都有专用引脚
    发表于 08-08 17:31

    FPGA复位电路的设计

    复位电路本文节选自特权同学的图书《FPGA设计实战演练(逻辑篇)》配套例程下载链接:http://pan.baidu.com/s/1pJ5bCttFPGA器件在上电后都需要有一个确定的
    发表于 04-12 06:35

    复位电路设计选型指南

    复位电路设计选型指南 介绍安森美(ON)公司及EXAR公司所生产的各种类型复位器件,方便工程师设计选型。
    发表于 04-02 12:12 0次下载

    FPGA的理想的复位方法和技巧

    FPGA设计中,复位起到的是同步信号的作用,能够将所有的存储元件设置成已知状态。在数字电路设计中,设计人员一般把全局复位作为一个外部引脚来实现,在加电的时候初始化设计。全局
    发表于 11-22 17:03 5192次阅读
    <b class='flag-5'>FPGA</b>的理想的<b class='flag-5'>复位</b>方法和技巧

    PIC24H系列参考手册之复位

    本文主要介绍了PIC24H系列参考手册之复位模块。
    发表于 06-22 04:20 7次下载
    PIC24H系列参考手册<b class='flag-5'>之复位</b>

    dsPIC30F系列参考手册之复位

    本文主要介绍了dsPIC30F系列参考手册之复位模块。
    发表于 06-24 03:20 8次下载
    dsPIC30F系列参考手册<b class='flag-5'>之复位</b>

    PIC24F系列参考手册之复位模块

    本文主要介绍了PIC24F系列参考手册之复位模块。
    发表于 06-06 17:28 2次下载

    FPGA怎么搭复位电路 fpga复位电路设计方案

    FPGA的可靠复位是保证系统能够正常工作的必要条件,本文对FPGA设计中常用的复位设计方法进行了分类、分析和比较,并针对各种复位方式的特点,
    发表于 08-08 15:14 1w次阅读

    实现FPGA实战复位电路的设计和仿真

    最近看 advanced fpga 以及 fpga 设计实战演练中有讲到复位电路的设计,才知道复位电路
    发表于 12-22 12:54 13次下载
    实现<b class='flag-5'>FPGA</b>实战<b class='flag-5'>复位</b><b class='flag-5'>电路</b>的设计和仿真

    stm32复位电路设计

    stm32复位电路设计
    发表于 06-26 09:26 7次下载

    FPGA内部自复位电路设计方案

    。 下面将讨论FPGA/CPLD的复位电路设计。 2、分类及不同复位设计的影响 根据电路设计复位
    的头像 发表于 04-06 16:45 834次阅读

    FPGA复位电路的实现方式

    有人说FPGA不需要上电复位电路,因为内部自带上电复位信号。也有人说FPGA最好加一个上电复位
    的头像 发表于 05-25 15:50 2433次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>复位</b><b class='flag-5'>电路</b>的实现方式