![ae95bcc8536750437c5e61a5120c3f57.png](https://i-blog.csdnimg.cn/blog_migrate/e83db80cd95258b6f093869b0cfcae69.jpeg)
总结同步和异步复位使用中的常见问题。
同步复位
问题1:
综合工具并不能轻易区分出同步复位信号和其他数据信号,综合出来的电路不唯一,某些电路结构在网表仿真时可能出现x态。
该段代码可能综合出两种电路结构。
![c83f97a1af2654f9f2c803f46b677196.png](https://i-blog.csdnimg.cn/blog_migrate/ce3141851049e441cc9d5349ae8d6f14.jpeg)
电路结构如图所示,两种电路结构功能等价。但是在门仿真时如果ld是x态,mux的输出会被悲观的认为是x态。这导致复位信号并不能在仿真时把电路带到确定的状态,该问题不影响实际电路。
![697cefe21458e23fbccc7799594fd6ed.png](https://i-blog.csdnimg.cn/blog_migrate/2853b45667dc6242e96b0fc434ac7566.png)
![f6bb44c4f97898f9c0785a4f955e4e68.png](https://i-blog.csdnimg.cn/blog_migrate/8b45905c5f7bf876db36d9acb96fcbf3.jpeg)
通过在模块中加入下边synopsys switch可以使得综合工具在电路实现时使得复位信号尽可能靠近寄存器,也可以设置如下综合变量得到同样效果。
![a08376e9be6294dba5daf1ec0df57103.png](https://i-blog.csdnimg.cn/blog_migrate/5e51c88fb5b1b559340dad072e71b374.png)
![0205f74192f6ec9c7959f2c3f9227924.png](https://i-blog.csdnimg.cn/blog_migrate/f726b7b85925b5007403de5d3ef8067c.png)
问题2:
同步复位因为需要时钟才能生效,芯片上电时三态总线的控制端如果受控于同步复位寄存器,可能出现三态总线的冲突。
![648391c79ea895bae369caedd57bcdff.png](https://i-blog.csdnimg.cn/blog_migrate/0c157a75d9da04a71ac3d5cdfaaaed40.png)
解决办法是引入rst信号直接控制三台总线的控制端。
![52573e779e0992d22fa7cc4c1c8fdaf6.png](https://i-blog.csdnimg.cn/blog_migrate/bc6cbd2e197ef3d53e9d894c7d0d647d.png)
异步复位
问题1:
包含异步复位和异步置位的寄存器的模型和实际电路行为存在不一致的可能。
带有异步复位和异步置位的触发器的verilog描述如下,从语义上看仿真时,只有在时钟上升沿,复位信号下降沿或者置位信号下降沿触发器的输出才有可能发生改变。
![1cfa7e59e6adb40939883fb15d53c66f.png](https://i-blog.csdnimg.cn/blog_migrate/3b96af9ab7dbd480c7d5b140f70e547e.png)
实际上当复位信号和置位信号同时生效时,如果复位被解除,电路应该由复位状态进入置位状态。但是仿真上复位的接触不会触发输出值的更新,造成仿真歧义。
![c5bf40e82a1a5422d6c92ca3f01f1633.png](https://i-blog.csdnimg.cn/blog_migrate/1ab1b155d062db7e53d89356d76fd8fb.jpeg)
设计上强烈不推荐使用同时带有异步复位和异步置位端的寄存器。如果一定要使用,可以通过如下方式修正仿真模型行为。
![47cc939ca172cc69b9738c255c261d65.png](https://i-blog.csdnimg.cn/blog_migrate/fa11564891cecbea0dd2ee62317b3900.jpeg)
问题2:
异步复位对毛刺敏感。
为解决这个问题,可以在复位源头加入毛刺滤除模块。此外,复位pad也应该采用施密特触发器。
![075f1ef193bc7fd5741b72b9b03fb66b.png](https://i-blog.csdnimg.cn/blog_migrate/62a7c9065bbe1ebfeb963ef0316382ba.jpeg)
问题3:
异步复位的release如果不满足寄存器的recover和removal要求可能导致寄存器在不同时钟周期解复位或者寄存器输出亚稳态的问题。
如图所示使用复位同步器进行异步复位同步解复位可以解决异步复位release的时序问题。
![9ea8100ea8a9382f89cdd8cce69c042f.png](https://i-blog.csdnimg.cn/blog_migrate/4a78f10977fbb53e82415fb50409aff8.jpeg)
复位同步器的第二级肯定不存在亚稳态问题,这是因为第二级寄存器的D和Q在复位信号变化时均是0。
加入复位同步器后STA会做相应的检查保证复位分配树的延时满足寄存器recover和removal的要求。
![48c04b579981d2dfdafcfdcf00aa2822.png](https://i-blog.csdnimg.cn/blog_migrate/f051e2104461d3898c03a015b9112e8e.jpeg)
问题4:
异步复位信号如果在DFT时意外生效会影响DFT的功能。
解决方案是使用test_mode信号屏蔽内部的异步复位信号。
![cedf7e69a68d471a765390cb64ce148f.png](https://i-blog.csdnimg.cn/blog_migrate/65997106aba40dbe5c3eae4b8f8d1591.jpeg)
ATPG测试前可以由专门的向量测试异步复位信号。
![a69b7257bf506f6d88263cac54f5ffa8.png](https://i-blog.csdnimg.cn/blog_migrate/1ce0194b6665d53bdd29dc702393b644.jpeg)
![e4c66516a4fe4ad98d75d780feb52d2e.png](https://i-blog.csdnimg.cn/blog_migrate/8782d97eb34276a32ed62aee059d840a.png)
复位同步模块不能上链进行扫描。
![d4d111e24f6d94b7d3a37096fbdc99b2.png](https://i-blog.csdnimg.cn/blog_migrate/c46a73e8db66d06623f8603bcede80f1.png)
参考资料:
Asynchronous & Synchronous Reset Design Techniques - Part Deux