在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2384|回复: 7

[求助] 哪位大神帮我看看这段程序问题出在哪里了

[复制链接]
发表于 2012-8-16 16:58:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
PROCESS(CLK,RESET)
   BEGIN
   IF RESET='1' THEN
   OLD<="0000000000000000";
   SPD<="0000000000000001";
  ELSIF CLK'EVENT AND CLK='1' THEN
        IF CE1='1' THEN OLD<=IP;IP<=CNT;
    END IF;
   END IF;
  END PROCESS;
  CE1<=CLKA;
  SPD<=IP-OLD;
  SPD_OUT<=SPD;

其中cnt为一个递增计数器,clka的频率为1khz。我的理解:经过ce1的延时,得到old,ip两个值,old是1khz之前的ip的值,两者相减输出给spd_out,即spd为这1ms时间内cnt递增了多少的数值。我把这段程序下载之后,ip,old,cnt都成递增,但spd的输出一直为0,若把spd的复位值改为0000000000000001,则输出0000000000000001,就是spd就一直是复位值,不会变,这是怎么回事,问题出在哪里了呢?希望哪位大神帮帮忙。。。
发表于 2012-8-16 22:09:15 | 显示全部楼层
时序逻辑以外的<=都没有时间轴的事务队列的概念,所以综合之后spd<=ip-old; spd_out<=spd;就成了spd_out<=ip-old了。你看到的结果可能就是这个。
发表于 2012-8-17 11:01:54 | 显示全部楼层
2楼说的对。。。。要区别清时序逻辑和组合逻辑的区别。。。
发表于 2012-8-17 12:49:51 | 显示全部楼层
应该是SPD被优化成了一个常数值!你去掉spd_out.直接输出spd,应该就没有问题!
发表于 2012-8-17 12:53:35 | 显示全部楼层
PROCESS(CLK,RESET)
    BEGIN
    IF RESET='1' THEN
    OLD<="0000000000000000";
    SPD<="0000000000000001";
   ELSIF CLK'EVENT AND CLK='1' THEN
         IF CE1='1' THEN
                         OLD<=IP;
                         IP<=CNT;
                         SPD<=IP-OLD;
     END IF;
    END IF;
   END PROCESS;
   CE1<=CLKA;
   
   SPD_OUT<=SPD;
你这样写应该就没有问题了
发表于 2012-8-17 22:56:13 | 显示全部楼层
SPD 在Process中有复位,而process外对SPD又赋值,肯定是工具把process外的语句优化掉落。SPD要只写在process内或外,不要内外都写。
 楼主| 发表于 2012-8-23 17:32:42 | 显示全部楼层
回复 6# seesea11


    感谢,十分感谢,又学了点东西
 楼主| 发表于 2012-8-23 17:33:29 | 显示全部楼层
回复 5# kaiseradler


    恩,运行正确了,十分感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 12:52 , Processed in 0.039820 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表