目录1. 复位2.1. 异步复位 同步释放clk未采样到rst_async_n为低的情形2.2. Xilinx FPGA复位设计reg信号初始值基于PLL锁定(locked)复位设计XPM_CDC_ASYNC_RST2. 时钟1. 复位FPGA中复位设计总结深入理解复位—同步复位,异步复位,异步复位同步释放(含多时钟域)同步复位:指复位信号同步执行、同步释放。优点是时序简单,无亚稳态问题。缺点是响应依赖同步clk。Xilinx FPGA内置的FDRE含有同步复位接口,推荐同步复位。异步复位:指复位信号异步执行、异步释放。优点是不依赖同步clk、响应迅速。缺点是复位释放的时候,时钟若采样复位信号跳变时刻,寄存器信号容易出现亚稳态。例如always@(posedge clkornegedge rst_n)beginif(!rst_n)b=1'b0;elseb=a;end因此为了保证全局复位不消耗太多组合逻辑,也能保证避免异步复位释放导致的亚稳态,如何作?2.1. 异步复位 同步释放异步复位,同步释放:复位信号异步执行,释放时同步到时钟。例如下面代码中使用异步复位信号rst_async_n,生成rst_sync_n就实现了异步置0、同步置1// rst_async_n为异步复位信号always@(posedge clkornegedge rst_async_n)beginif(!rst_async_n)begin rst_s1=1'b0;rst_sync_n=1'b0;endelsebegin rst_s1=1'b1;rst_sync_n=rst_s1;end end//由于rst_sync_n复位启动还是异步的,所以必须加入敏感列表中always@(posedge clkornegedge rst_sync_n)beginif(!rst_sync_n)dout=1'b0;elsedout=din;end综合电路如下:出现亚稳态的波形图如下如上图所示:T1时刻:rst_async_n异步复位启动,rst_s1和rst_sync_n全部拉低,与clk无关注意T1时刻是异步的,不涉及clk采样,因此rst_s1和rst_sync_n不会出亚稳态T2时刻:rst_async_n异步复位释放,此时clk采样rst_async_n边沿,采样值不定,因此rst_s1出现0、1之间的亚稳态。rst_sync_n仍然保持0T3时刻:rst_s1可能恢复也可能还是亚稳态,但clk采样到rst_async_n为1,因此rst_s1恢复为1。rst_sync_n则相当于对T2时刻的rst_async_n打两拍处理,因此会稳定至0或1两种状态,并处于clk时钟域下!发现没有T2时刻本质上是对rst_async_n作电平同步!!!那么rst_sync_n一定会稳定在clk时钟域下的高电平。参考异步时钟亚稳态 的解决方案——单bit信号即T2时刻的逻辑可以看成:always@(posedge clk)begin rst_s1=rst_async_n;rst_sync_n=rst_s1;endclk未采样到rst_async_n为低的情形如果在clk稳定之前rst_async_n就已经拉高了,如下图所示可以看出rst_sync_n复位会却取决于上电初始值,初始值为1’b1则不会产生复位、初始值为1’b0实际只复位1拍。2.2. Xilinx FPGA复位设计第三章第1讲 Verilog语法reg变量复位使用以及异步复位同步释放设计(FPGA/IC设计公开课)- bilibiliXilinx FPGA异步复位同步释放——同步后的复位当作同步复位还是异步复位?【FPGA探索者】聊一聊xilinx 7系列推荐使用的复位方式Xilinx复位准则:尽量少用复位。数据路径的复位通常是不需要的,因为,老的数据总会被新数据“冲走”。控制路径可以加入复位,以确保FPGA在复位时状态可控。