复位策略:同步复位与异步复位

这篇具有很好参考价值的文章主要介绍了复位策略:同步复位与异步复位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在IC设计种,复位策略分为同步复位和异步复位两种设计,根据不同的设计,会采用不同的复位方式。

复位的文章已有很多文章讲解了,这里只讨论实现策略。

 一、异步复位

1、优点:

1)无需额外的逻辑资源,实现简单,可以保证复位引脚到各个寄存器的时钟偏移最小;

2)复位信号不依赖时钟;

2、缺点:

1)复位信号易受到外界干扰,并且对电路内部的毛刺敏感;

2)复位信号的随机性,可能产生时序违规并导致电路处于亚稳态;

3、代码设计:

假设外部复位时钟信号为clk_o,复位信号为rst_n_hw。这个复位信号,我们不能直接应用于异步复位寄存器中。需要对其进行处理后,再进行使用。分析如下:

1)先对rst_n_hw进行第一次处理,产生“异步复位、同步释放”复位信号rst_n_sync;

这样方式,是在异步复位中,为了避免时序问题,必然要使用的。

其实,这种策略就是利用了同步复位和异步复位折中的方式。复位电路中的寄存器同步异步复位,全部功能寄存器同时复位,与时钟异步发生;当复位信号释放,位于这个区域的时钟在功能触发器脱离复位前必须连续触发两次以上,以避免亚稳态问题。

reg rst_sync0_n ,rst_sync1_n ,rst_sync1_n ;

asisgn rst_n_sync = rst_sync2_n ;

always @(posedge clk_o or negedge rst_n_hw)
    if(~rst_n_hw) begin
        rst_sync0_n <= 1'b0;
        rst_sync1_n <= 1'b0;
        rst_sync2_n <= 1'b0;
    end
    else begin
        rst_sync0_n <= 1'b1;
        rst_sync1_n <= rst_sync0_n ;
        rst_sync2_n <= rst_sync1_n ;
    end

2、将处理后的reset信号,再作用于各个寄存器,如:

reg [3:0] data_out1 ,data_out2 ;


always @(posedge clk_o or negedge rst_n_sync)
begin
    if(~rst_n_sync )
        data_out1 <= 4'h0;
    else
        data_out1 <= data_in1[3:0];
end

always @(posedge clk_o  or negedge rst_n_sync)
begin
    if(~rst_n_sync )
        data_out2 <= 4'h0;
    else
        data_out2 <= data_in2[3:0];
end

二、同步复位

1、优点:

1)抗干扰性强,可以剔除复位信号种周期短于时钟周期的毛刺;

2)所有的功能触发器的复位信号完全同步于时钟源;从而确保了该时钟和reset作用下的逻辑电路的启动工作的一致性,避免因为复位和时钟的关系异步,造成的启动不一致(例如:错位一个时钟周期。如果都是控制计数器工作,这些计数器工作是同时的;如果为异步复位,这些计数器工作可能会不同时工作,这样就需要利用其它逻辑来保证其同时工作)

3)有利于静态时序分析工具的分析;

4)有利于基于周期的仿真工具的仿真。

2、缺点:

1)占用更多的逻辑资源;

2)对复位信号的脉冲宽度有要求,必须大于指定的时钟周期,且很难保证复位信号到达各个寄存器的时序;

3)复位信号依赖于时钟,如果电路中的时钟信号出现问题,则无法完成复位。

3、代码设计:

假设外部复位时钟信号为clk_o,复位信号为rst_n_hw。这个复位信号,我们不能直接应用于同步复位寄存器中。需要对其进行处理后,再进行使用。分析如下:

1)先对rst_n_hw同步处理:因为该reset将要引入到clk_o同步时钟域中,而且会当作普通的信号使用,此时必须做跨时钟域处理后,在进行使用:

注意:1.1)可以看出使用同步复位时,需要保证在复位时,需要有时钟的存在而且需要大于时钟周期,否则复位信号无法被捕获到该逻辑中。

          1.2)在时钟存在时,reset才会有作用;在上电复位时,在时钟未开启时,所以的逻辑都处于未知状态;只有时钟到来后,reset才会起作用,最终进入到复位状态;等到复位释放,整个电路逻辑,进入正常工作状态。

reg rst_sync0_n ,rst_sync1_n ,rst_sync1_n ;

asisgn rst_n_sync = rst_sync2_n ;

always @(posedge clk_o)
begin
        rst_sync0_n <= rst_n_hw;
        rst_sync1_n <= rst_sync0_n ;
        rst_sync2_n <= rst_sync1_n ;
end

2、将同步后的reset信号,再作用于各个寄存器,如:文章来源地址https://www.toymoban.com/news/detail-622383.html

reg [3:0] data_out1 ,data_out2 ;


always @(posedge clk_o)
begin
    if(~rst_n_sync )
        data_out1 <= 4'h0;
    else
        data_out1 <= data_in1[3:0];
end

always @(posedge clk_o)
begin
    if(~rst_n_sync )
        data_out2 <= 4'h0;
    else
        data_out2 <= data_in2[3:0];
end

到了这里,关于复位策略:同步复位与异步复位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Quartus实现寄存器:同步复位+异步复位

    图1 寄存器输入输出引脚 图2 输入为高电平-例1 同步复位和异步复位都存在于时序逻辑中,与组合逻辑相比对毛刺有屏蔽作用。 图3 组合逻辑和时序逻辑的区别 当复位为高电平时,组合逻辑的结果是其输入,时序逻辑的输出需参考上升沿,此时红色虚线处的key_in为高电平,故

    2024年02月03日
    浏览(43)
  • verilog|关于异步复位,同步释放的几个思考

    异步复位,同步释放是一种常见的设计思路,那么 什么情况下,复位信号需要做“异步复位,同步释放”处理? 一般来说,同步系统,都使用异步复位。这是因为同步复位的电路实现,比异步复位的电路实现,要浪费更多电路资源。 未在本模块时钟域做过“异步复位,同步

    2023年04月15日
    浏览(35)
  • 应届生谈薪技巧和注意事项,怎么为自己多争取1~2k(FPGA,芯片谈薪,数字IC,嵌入式,模拟IC,FPGA探索者)

      找工作的终极目标:谈薪!谈高薪!今天【FPGA探索者】给大家分享一下谈薪的技巧和注意事项,别被HR轻易压价。   本文适用人群: 应届毕业生 。 FPGA探索者 FPGA+数字IC笔试面试,无线通信物理层及数字信号处理,半导体芯片行业求职,校招社招实习,职场趣事,行业动

    2024年01月25日
    浏览(54)
  • Verilog数字系统设计——10进制计数器,具有异步复位功能

    编程实现10进制计数器,具有异步复位功能,十位和个位用8421BCD码表示,各端口定义如下图所示: 仔细考虑端口定义中每个端口的含义; 要求完成程序编辑、编译、时序仿真; 实验提交Verilog设计文件(.v文件)、仿真波形截图以及对于第3个步骤所提出问题的回答,文件打包

    2024年02月11日
    浏览(35)
  • IC设计入门——异步FIFO

    在异步FIFO中,数据读取和写入操作使用不同的时钟频率。由于写入和读取时钟不同步,因此称为异步FIFO。通常,这些用于数据需要从一个时钟域传递到另一个时钟域的系统中,这通常称为“时钟域交叉”。因此,异步FIFO有助于在两个工作于不同时钟的系统之间同步数据流。

    2024年02月19日
    浏览(38)
  • AMD FPGA设计优化宝典笔记(4)复位桥

    高亚军老师的这本书《AMD FPGA设计优化宝典》,他主要讲了两个东西: 第一个东西是代码的良好风格; 第二个是设计收敛等的本质。 这个书的结构是一个总论,加上另外的9个优化,包含的有:时钟网络、组合逻辑、触发器、移位寄存器、存储器、乘加运算单元、状态机、扇

    2024年02月20日
    浏览(36)
  • 用Verilog设计一个8位二进制加法计数器,带异步复位端口,进行综合和仿真。

    点此处编译 这里还需将rst置1才有效 可以在clk=0;后加rst=1; 或者在clk=0;后加rst=0; 并且在#DELY clk=~clk;后加#(DELY*20) rst=~rst; 仿真即可

    2024年02月04日
    浏览(43)
  • 北邮22级信通院数电:Verilog-FPGA(9)第九周实验(2)实现下降沿触发的JK触发器(带异步复位和置位功能)

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客   目录 ​编辑 一.代码部分 1.1 JK.v 1.2 JK_tb.v 二.仿真结果

    2024年02月05日
    浏览(46)
  • AMD FPGA设计优化宝典笔记(5)低频全局复位与高扇出

    亚军老师的这本书《AMD FPGA设计优化宝典》,他主要讲了两个东西: 第一个东西是代码的良好风格; 第二个是设计收敛等的本质。 这个书的结构是一个总论,加上另外的9个优化,包含的有:时钟网络、组合逻辑、触发器、移位寄存器、存储器、乘加运算单元、状态机、扇出

    2024年02月19日
    浏览(40)
  • 【芯片设计- RTL 数字逻辑设计入门 6 -- 带同步复位的D触发器 RTL实现及testbench 验证】

    同步复位 :复位只能发生在在clk信号的上升沿,若clk信号出现问题,则无法进行复位。 Verilog 代码 testbench 代码 编译及仿真 波形如下 : 从波形可以看到,在第100ns后,第一个 clk 时钟沿变化时 q 的信号和 d 的信号保持一样,后面依次如此。 问题小结 在写 testbench 测试的时候

    2024年02月19日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包