打印

求助:VHDL的变量赋值

[复制链接]
3128|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
神之胡之|  楼主 | 2012-4-8 19:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
mr.king| | 2012-4-8 20:19 | 只看该作者
得不到,好像结果就是A+B,因为进程完成之前,S<=2的值没生效。你这样写是出考题?实际工作千万不要玩弄代码

使用特权

评论回复
板凳
神之胡之|  楼主 | 2012-4-8 20:30 | 只看该作者
为什么“进程完成之前,S<=2的值没生效 ”?process里的语句不是顺序执行的吗?我可能没有理解透彻,能再说的详细点吗?
我是学生,这个问题是课件里的

使用特权

评论回复
地板
mr.king| | 2012-4-8 21:05 | 只看该作者
这个老师的课件真是,把学生忽悠到云里雾里,我说把,工程上傻瓜才这样写代码。替我揍下你老师

使用特权

评论回复
5
神之胡之|  楼主 | 2012-4-8 21:13 | 只看该作者
你不要较真嘛,老师只是列出一个错误的代码,想让我们避免犯这样的错误,正确的是
process(A, B)
variable V: integer;
begin
   V := A + B;
   V := V + 2;
   S <= V;
end process;
为什么“S<=2的值没生效”啊:dizzy:

使用特权

评论回复
6
mr.king| | 2012-4-8 21:21 | 只看该作者
就是这样的呀,end process之前所有<=代码都没执行,end process时同时(只相差路径延时)执行

使用特权

评论回复
7
meitian51| | 2012-4-10 19:13 | 只看该作者
S<=2有这样赋值的,
2为integer
<=是给信号赋值的,也就是STD_LOGIC,
感觉这里有问题吧

使用特权

评论回复
8
GoldSunMonkey| | 2012-4-11 17:01 | 只看该作者
因为是S使用的signal变量,这个这种变量需要在end process的时候才能赋值。
而variable是直接赋值立马变化的。

使用特权

评论回复
9
nir| | 2012-4-12 10:31 | 只看该作者
楼上正解。
V是variable变量,如同是组合逻辑中的线和线相连,S是signal变量,如同时序逻辑中的门电路,要经过delta时间后才赋值。你把S在一个process块中一次循环两次赋值,只能是最后一次的结果有效。
实际上S即使能两次赋值,你的结果也不对,因为你没有把S放在敏感表中。

使用特权

评论回复
10
zzz110zzz| | 2012-4-16 22:03 | 只看该作者
学习中

使用特权

评论回复
11
jillermy| | 2012-5-29 22:53 | 只看该作者
数据类型和信号与变量是两个不同概念,只需引用一个IEEE的库就行了

使用特权

评论回复
12
GoldSunMonkey| | 2012-5-29 23:31 | 只看该作者
:L为什么我没有分数呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

23

帖子

1

粉丝