请教各位: if clk'event and clk='1' then if cnt_read>0 and cnt_read <5 then cnt_read:=cnt_read+1; else cnt_read:=0;ad2_read<='1'; end if; end if; 我想让cnt_read对时钟技术,计到5变为零,实际上就是让ad2_read低电平5个时钟周期,可编译时出错Error: VHDL error at ioctr.vhd(96): can't infer register for signal gen_rc:cnt_read[0] because signal does not hold its value outside clock edge 以前也碰到过这种情况,只能换一种思路做,不知道到底是什么原因,有没有解决办法呢?
cpld的时钟是4m,dsp的读信号是40ns,而ad要求的读信号至少为70ns,如果用时钟同步可能检测不到读信号,所以我先异步检测读信号,又同步延长的,以下是完整一些的程序:
if dsp_aoe='0' and dsp_ce0='0' and dsp_ea11='1' then
ad2_read<='0';
if cnt_read=0 then cnt_read:=1;
end if;
elsif cnt_read=0 then ad2_read<='1';
end if;
if clk'event and clk='1' then
if cnt_read>0 and cnt_read <5 then cnt_read:=cnt_read+1;
else cnt_read:=0;ad2_read<='1';
end if;
cnt_read为integer range 0 to 6;这是在一个process中完成的,不知道是不是相互影响
我把dsp_aoe dsp_ce0 dsp_ea11 clk都作为敏感信号了,还有就是我将cnt_read定义为信号时发现不论cnt_read是多少,只要一碰到时钟的上升沿就加一,好像判断是否在0-5之间的条件没起作用,版主帮我看一下这条语句有什么不妥吗?
if cnt_read>0 and cnt_read <5 then cnt_read:=cnt_read+1;