首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

复位最佳方式:异步复位,同步释放

复位最佳方式:异步复位,同步释放

异步:
always @(posedge clk or negedge rst_n )
              if(!rst_n)



(优点:占用较少逻辑单元
缺点:可能会产生竞争冒险)
同步: always @(posege clk or posedge rst_n)
                If(!rst_n)


(优点:可以尽量点少竞争冒险的可能
缺点:会占用更多的逻辑单元)

Altera 最佳解决办法:异步复位,同步释放

//异步复位 同步释放rtl视图


原理:
所谓异步复位和同步释放,是指复位信号是异步有效的,即复位的发生与clk无关。后半句“同步释放”是指复位信号的撤除(释放)则与clk相关,即同步的。
下面说明一下如何实现异步复位和同步释放的。
异步复位:显而易见,rst_async_n异步复位后,rst_sync_n将拉低,即实现异步复位。

同步释放:这个是关键,看如何实现同步释放,即当复位信号rst_async_n撤除时,由于双缓冲电路的作用,rst_sync_n复位信号不会随着rst_async_n的撤除而撤除。
假设rst_async_n撤除时发生在clk上升沿,如果不加此电路则可能发生亚稳态事件(在始终上升沿附近rst置1,这时候建立时间还不够长,数据可能还未打入寄存器,导致输出不确定)。但是加上此电路以后,假设第一级D触发器clk上升沿时rst_async_n正好撤除,则D触发器1输出高电平“1”,此时第二级触发器也会更新输出,但是输出值为前一级触发器次clk来之前时的Q1输出状态。显然Q1之前为低电平,顾第二级触发器输出保持复位低电平,直到下一个clk来之后,才随着变为高电平。即同步释放。
返回列表