RST_GEN设计规范系列之同步释放原则

系列文章目录

第一章: 同步释放原则


前言

在SOC系统中,rst_gen是专门为系统各个模块产生复位逻辑,用于接DFF的复位端口。为了保证系统复位正常,rst_gen模块设计有严格的要求,一般会跟clk_gen匹配产生,好的rst_gen设计不但可以保证系统复位的鲁棒性,还有利于中后端recovery/removal的timing收敛。


提示:以下是本篇文章正文内容,下面案例可供参考

一、rst_gen是什么?

这里说的rst_gen是指一个专门管理系统复位的模块设计。该模块为系统中其他所有模块提供复位源。

二、什么是同步释放

1. DFF的时钟复位端口

代码如下(示例):

reg example_name;

always@(posedge clk or negedge rst_n)

beign

  if(!rst_n)

    example_name <= 1'b0;

  else

    example_name <= others;

end

如上例子定义一个寄存器 example_name,该寄存器的CK端为clk,复位端为rst_n。

2. recovery and removal检查

在实际电路中,timing约束会对clk和rst_n的timing进行约束检查。跟检查CK与D端数据一样,当timing不满足需求时,D触发器输出Q端的状态会出现亚稳态,一旦该亚稳态级联到后续的组合逻辑中,会导致电路出现不可控的状态。因此,对于D触发器来说,不但要满足CK到D端的检查,也要满足clk与rst_n的时序。

3. 同步释放

所谓同步释放,即rst_n要经过clk进行同步后输出,这样就保证了rst_n与clk处于同一个domain,中后端才会对齐进行时序检查,而对于clk与rst_n未做同步释放的,中后端认为异步关系,对于异步关系,中后端是没有办法进行约束的,即当作false path处理,对于这种中后端未做约束的情况,一旦不满足recovery/removal,就会出现timing问题,导致逻辑紊乱。

而进行同步释放的复位,中断会对timing进行约束和检查,保证了后续电路能够正常工作。

async_2ff u_async_2ff_rst(.clk_source(clk),.rst_n_source(por_n),.sig_in(1'b1),.sig_out(rst_n));

上述同步释放过程,por_n可以是任意一个异步复位源,但是D端接固定电平,这样即即使clk与por_n存在recovery/removal违例,但是是属于异步复位,复位优先级最高,此时因为D端(其他端也不变的情况,SE,SI等,仅仅是por_n变化)不变,Q端也会hold在固定电平上。当por_n撤销时,rst_n会在clk的上升沿输出,即保证了rst_n属于clk domain中。这样rst_n接到其他DFF的clk端时,就属于被clk domain cover住了。

 


总结

例如:以上就是今天要讲的内容,本文介绍了异步复位的同步释放相关的背景及意义,对于系统中的不同clk对应的复位,一定要在相应的clk下做同步释放,这样中后端才能对齐进行timing约束,保证了时序的约束在可控范围内,否则就有可能出现亚稳态,导致电路出现异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

love混世_魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值