首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

vhdl的问题

vhdl的问题

请教各位:
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
以前也碰到过这种情况,只能换一种思路做,不知道到底是什么原因,有没有解决办法呢?

"+"编译通不过
quatus 2 ,我只是想将dsp的读信号延长几个时钟周期作为ad的读信号,但我得时钟频率很慢,检测不到dsp的读信号,所以只能先做一个变量,当dsp发读信号是置1,再检测到时钟的上升沿时计数,计到5时将其清零使ad的读信号无效,不知道有没有别的方法可以实现
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;
多谢版主,已经解决了,用了个很笨的方法,版主的方法我也试一下,再次感谢
返回列表