欢迎来到天天文库
浏览记录
ID:13752048
大小:67.50 KB
页数:4页
时间:2018-07-24
《eetop.cn_一个异步信号用于复位的问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一个关于异步信号作同步复位的问题关键字:亚稳态异步复位同步复位Serinf.vhd模块中有一段代码经过synplify综合以及QuartusII布局布线后,下载到FPGA执行的过程中出现了一段不符合逻辑的波形。代码如下:process(rst,clk_lc32_i)beginifrst='0'thencnt<=(others=>'0');elsifrising_edge(clk_lc32_i)thenifcs='1'thencnt<=(others=>'0');elsif(svcksft(2downto1)="01")t
2、henifcnt=18thencnt<=(others=>'0');--自动清零elsecnt<=cnt+1;endif;endif;endif;endprocess;其中cs是来自cpu的片选信号,svcksft是保存cpu时钟沿的移位寄存器综合后,通过QuartusII自带工具RTLviewer看到的结果如下图所示:其中红线为代码中的cs信号,经过cyclone_LCELL(1555)这个组合逻辑单元,作为寄存器cyclone_lcell(5A5A)的sclr(同步清零)端。波形如图:波形图1波形图2这两幅图都是采c
3、s的下降沿得到的,多数情况下抓到的都是波形图2的波形,当cs=1时对cnt清零,cs=0时,cnt不变。但是有的时候抓到的波形如波形图1,当cs=1时对cnt清零,cs=0时,cnt被置位。这种情况不符合逻辑。将代码改为process(rst,clk_lc32_i)beginifrst='0'orcs=’1’thencnt<=(others=>'0');elsifrising_edge(clk_lc32_i)then--ifcs='1'then--cnt<=(others=>'0');if(svcksft(2downto
4、1)="01")thenifcnt=18thencnt<=(others=>'0');--自动清零elsecnt<=cnt+1;endif;endif;endif;endprocess;综合后的电路如图所示。从综合结果可以看出,经过这样的修改,cs信号和rst信号先经过一个组合逻辑单元,然后给cnt寄存器提供aclr(异步清零),代码经过这样处理后,cs依然实现了清零的功能,而且不会出现上述波形图1的情况。将代码改为process(rst,clk_lc32_i)beginifrst=’0’thencs_d<=‘0’;cs
5、_dd<=‘0’;elsifrising_edge(clk_lc32_i)thencs_d<=cs;cs_dd<=cs_d;endifendprocess;process(rst,clk_lc32_i)beginifrst='0'thencnt<=(others=>'0');elsifrising_edge(clk_lc32_i)thenifcs_dd='1'thencnt<=(others=>'0');elsif(svcksft(2downto1)="01")thenifcnt=18thencnt<=(others=>
6、'0');--自动清零elsecnt<=cnt+1;endif;endif;endif;endprocess;即对cs信号加入两级触发器,综合后的结果如下图,其中cs先经过寄存器cyclone_lcell(0704),然后作为cyclone_lcell(5A5A)的sclr(同步清零)端,综合的结果就不会出现问题。结论:不能用异步信号直接进行同步复位操作。修改方案:1.用该异步信号作为异步复位端。2.对异步复位信号做两级同步后,再来驱动同步复位端。
此文档下载收益归作者所有