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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[求助] 请教几个问题

[复制链接]
发表于 2010-6-12 15:17:33 | 显示全部楼层 |阅读模式

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

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

x
1.process 语句里的语句是顺序语句还是并行语句?
process(clk)
begin
   if rising_edge(clk) then
      S_1<=not S_1;
      S_2<=S_1;
   end if;
end process;
在上面这个程序中,S_1和S_2都是signal ,std_logic。
我现在假设S_1初值是0,那么当时钟上升沿过后,S_1变成1,S_2变成0。
现在问题来了:书上说process里的语句是顺序语句,也就是所process中的语句是顺序执行,那就意味着程序执行完S_1<=not S_1;再执行S_2<=S_1; 那照这个逻辑的话,S_2应该是1才对啊?

2.signal和variable的区别是什么?
同样是上面的程序,我把S_1换成变量(Variable),S_2依然是信号(signal),那么结果就变了:还是假设S_1是0(注意此时S_1是变量);当时钟上升沿过后;S_1变成1;S_2变成1;为什么?
发表于 2010-6-12 15:31:44 | 显示全部楼层
1. 在这个语句中,综合成电路的话,S_2就是S_1的下一级寄存器,
也就是S_1像时钟一样在翻转,它的值的变化,要在下一个时钟才传到S_2的,

2.对VAR不懂,觉得signal就够用了,省得出问题。
在有些公司规定,写RTL代码要用最通常的用法,稍微复杂点的就不用让,反正代码的作用是为了实现电路功能,也有几分道理。
 楼主| 发表于 2010-6-12 16:59:07 | 显示全部楼层
2# eaglelsb
你的意思是信号的赋值要延迟一个周期?
还有,process里的语句是顺序执行还是并行执行?
比如
process
begin
if rising_edge clk then
A<=B;
B<=C;
end if;
end process;

process
begin
if rising_edge clk then
B<=C;
A<=B;
end if;
end process;
两者之间有区别么?
发表于 2010-6-12 17:30:33 | 显示全部楼层
没有区别,都是时钟上升沿变化
发表于 2010-6-13 08:40:24 | 显示全部楼层
对于这种要综合的东西。不要去考虑他什么并发执行还是顺序执行的。直接看综合出的硬件结构。这才是王道。HDL语言。你在写之前要明白这一段会被综合成什么,你想要什么样的结构。
你的方向偏了。
发表于 2010-6-13 11:20:52 | 显示全部楼层
3# qd0090
你写的这代码完全一样的啊,
LS的说得有理,多考虑综合成的硬件电路是怎样的,简单的代码可以用synplify pro综合后看一下Hierarchical view,在HDL-Analsy->RTL->里找到,就一目了然了,同时如果有warning,注意查看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-27 22:28 , Processed in 0.025943 second(s), 9 queries , Gzip On, MemCached On.

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