同步复位异步释放

描述

题目描述:    

请使用异步复位同步释放来将输入数据a存储到寄存器中,并画图说明异步复位同步释放的机制原理。

信号示意图:

clk为时钟

rst_n为低电平复位

d信号输入

dout信号输出

波形示意图:

输入描述:

clk为时钟

rst_n为低电平复位

d信号输入

输出描述:

dout信号输出 

1、确定题目要求

复位可以在任何时候发生,表面上看跟时钟没有关系,但真实情况是异步复位也需考虑时钟跳变沿,因为时钟沿变化和异步复位都可以引起Q端数据变化。同步复位虽然解决了当时钟的有效沿来临的时候rst的边沿也正好来临所出现的冒险与竞争。但是从综合的电路上可以看出,多了一个组合逻辑MUX。如果设计中所有的复位都是这样的,那会增加很多的资源,导致芯片面积很大,而异步复位同步释放机制可以解决这一问题。

异步复位同步释放的主要目的就是在减少资源损耗的同时避免毛刺的出现。其机制如下:

异步复位会出现亚稳态是因为无法保证clk的上升沿时,rst释放信号能够满足其建立保持时间,触发器无法判断rst有效还是无效,因而出现亚稳态;而同步释放的处理机制可以保证rst释放信号的建立时间点与clk的posedge同步,在当前clk的posedge检测到rst稳定的低电平,在下一个clk的posedge可以检测到已经稳定的rst高电平,满足了rst的建立保持时间要求,从而不会出现亚稳态。

所谓“异步复位”是针对D触发器的复位端口,它是异步的,所谓“同步释放”,实际上是由于设计了同步逻辑电路,外部复位信号不会在出现释放时与clk信号竞争,整个系统将与全局时钟clk信号同步。

module ali16(

input  wire clk,

input  wire rst_n,

input  wire d,

output reg dout

 );

 

reg rst0,rst1;

always @ (posedge clk or negedge rst_n) begin

       if (!rst_n) begin

              rst0 <= 0;

           rst1 <= 0;

       end

       else begin

              rst0 <= 1;

              rst1 <= rst0;

       end

end

 

           

always @ (posedge clk or negedge rst1)begin

        if(!rst1) begin

                     dout <= 1'b0;

              end

        else begin

                    dout <= d;

              end       

end           


           

endmodule
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,需要说明的是同步复位异步复位,以及同步释放异步释放的概念: 同步复位:是指通过时钟信号来控制复位信号的出现和消失。在时钟信号为高电平时,复位信号保持有效,而在时钟信号为低电平时,复位信号无效。 异步复位:是指不依赖于时钟信号来控制复位信号的出现和消失。当复位信号为高电平时,系统被复位,而当复位信号为低电平时,系统恢复正常工作。 同步释放:是指通过时钟信号来控制释放信号的出现和消失。在时钟信号为高电平时,释放信号保持有效,而在时钟信号为低电平时,释放信号无效。 异步释放:是指不依赖于时钟信号来控制释放信号的出现和消失。当释放信号为高电平时,系统被释放,而当释放信号为低电平时,系统不被释放。 下面是同步复位异步释放异步复位同步释放的Verilog代码以及逐行解释: 同步复位异步释放: ``` module sync_reset_async_release( input clk, input rst_n, input async_release, output reg out ); always @(posedge clk or negedge rst_n) begin if (~rst_n) begin out <= 1'b0; end else begin if (rst_n && async_release) begin out <= 1'b1; end end end endmodule ``` 逐行解释: - 第1行:定义模块名称和输入输出端口。 - 第3行:输入时钟信号。 - 第4行:输入同步复位信号。 - 第5行:输入异步释放信号。 - 第6行:输出信号。 - 第8-14行:始终块。在时钟的上升沿或复位信号的下降沿触发。在复位信号为低电平时,out为0;在复位信号为高电平时,如果异步释放信号为高电平,则out为1。 异步复位同步释放: ``` module async_reset_sync_release( input clk, input rst_n, input async_reset, input sync_release, output reg out ); always @(posedge clk) begin if (async_reset) begin out <= 1'b0; end else begin if (sync_release) begin out <= 1'b1; end end end endmodule ``` 逐行解释: - 第1行:定义模块名称和输入输出端口。 - 第3行:输入时钟信号。 - 第4行:输入异步复位信号。 - 第5行:输入同步释放信号。 - 第6行:输出信号。 - 第8-13行:始终块。在时钟的上升沿触发。在异步复位信号为高电平时,out为0;在异步复位信号为低电平时,如果同步释放信号为高电平,则out为1。 两者的作用: 同步复位异步释放异步复位同步释放都是用来实现系统复位释放的,只不过控制信号的形式有所不同。同步复位异步释放适用于需要时钟同步的场合,而异步复位同步释放适用于不需要时钟同步的场合。选择哪种方式取决于具体的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值