1、一个关于异步信号作同步复位的问题关键字:亚稳态 异步复位 同步复位Serinf.vhd 模块中有一段代码经过 synplify 综合以及 QuartusII 布局布线后,下载到FPGA 执行的过程中出现了一段不符合逻辑的波形。代码如下:process(rst,clk_lc32_i)beginif rst=0 thencnt 0);elsif rising_edge(clk_lc32_i) thenif cs = 1 thencnt 0);elsif (svcksft(2 downto 1)=“01“) thenif cnt = 18 thencnt 0);-自动清零elsecnt 0);els
2、if rising_edge(clk_lc32_i) then-if cs = 1 then- cnt 0);if (svcksft(2 downto 1)=“01“) thenif cnt = 18 thencnt 0);-自动清零elsecnt 0);elsif rising_edge(clk_lc32_i) thenif cs_dd = 1 thencnt 0);elsif (svcksft(2 downto 1)=“01“) thenif cnt = 18 thencnt 0);-自动清零elsecnt = cnt + 1;end if;end if;end if;end process;即对 cs 信号加入两级触发器,综合后的结果如下图,其中 cs 先经过寄存器cyclone_lcell(0704),然后作为 cyclone_lcell(5A5A)的 sclr(同步清零)端,综合的结果就不会出现问题。结论:不能用异步信号直接进行同步复位操作。修改方案:1. 用该异步信号作为异步复位端。2. 对异步复位信号做两级同步后,再来驱动同步复位端。