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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4058|回复: 14

[求助] 请教一个问题,老鸟们请指教。

[复制链接]
发表于 2010-6-28 21:32:39 | 显示全部楼层 |阅读模式

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

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

x
程序如下:
process (clk)
begin
  if rising_edge (clk) then
     S_1<=S_1 +1;
     O_1<=S_1;
  else
     null;
   end if;
end process;
其中,S_1是signal(std_logic_vector (3 downto 0)),O_1 是输出,连接到IO引脚上。
问题来了:
当我把输出的赋值(O_1<=S_1)放在进程外面的时候,仿真结果变了,O_1的值变化要比之前的程序快上一个周期,但是当我查看technology schmatic的时候,发现这两个程序所形成的technology schmatic并没有区别,这是为什么?
发表于 2010-6-29 12:57:42 | 显示全部楼层
前者受到时钟的采样,所以晚一拍。至于为什么原理图上一样,不好解释了。
 楼主| 发表于 2010-6-29 15:20:41 | 显示全部楼层
2# gaurson
可否这么理解:
当输出赋值语句在process里面的时候,输出的变化以时钟的上升沿为触发条件,即以clk上升沿为敏感信号;
当输出赋值语句在process外面的时候,输出的变化有时钟的上升沿和输入信号两个敏感元。
呵呵
不知道我说的对不对。
发表于 2010-6-30 12:03:58 | 显示全部楼层
第一个理解是正确的,第二个理解在process外应该没有敏感的概念,如果在process外部,可能综合出来就是一条连线而已。在process里面应该是受到时序处理中顺序执行的控制,在process外面的话,则两个进程处于并发执行的控制。
 楼主| 发表于 2010-6-30 20:17:40 | 显示全部楼层
我觉得你说的很有道理,但是为什么两者的technology SChmatic是一样的呢?
呵呵,有没有感兴趣的,大家一起讨论讨论啊!
 楼主| 发表于 2010-6-30 20:21:24 | 显示全部楼层
另外,对于“Process内语句是顺序执行”这句话我一直不太理解,
例如:
process(clk)
begin
if rising_edge (clk) then
    A<=B;
    C<=D;
    E<=F;
else
    null;
end if;
end process;
这个程序中,综合出来的结果,从硬件上来看应该是并行的,但为什么说是“顺序执行”?难道说“顺序执行”的意思是综合的时候从第一句开始顺序综合?
发表于 2010-6-30 22:15:22 | 显示全部楼层
我觉得你是看错了图了吧?不可能一样啊。或者到chip planner上看一下。
 楼主| 发表于 2010-7-1 11:24:30 | 显示全部楼层
没看错,
chipplaner是什么?
7# cdsmakc
发表于 2010-7-1 13:02:48 | 显示全部楼层
6# qd0090

通常意义上是顺序执行,但是如果在时序控制下的<=赋值,需要考虑一个时间点上纵向的问题,而不是横向时间的问题。如果你在这里换成:=赋值,就能看到是顺序执行了。
 楼主| 发表于 2010-7-2 08:48:42 | 显示全部楼层
继续求解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-28 05:34 , Processed in 0.044474 second(s), 9 queries , Gzip On, MemCached On.

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