VHDL中的process,有一个很疑惑的地方

far_2 2009-06-12 02:21:20
对于process,有一个很疑惑的地方。
书上说,仿真器对进程中的各语句自上至下地进行处理。当进程所有语句执行完毕,或者中途碰到WAIT语句时,该进程执行结束,信号代入过程最后被执行。代入同样应该按顺序自上至下地执行。
接着给出来一个这样的例子。
process (A, B, C, D) is
begin
D <= A;
X <= B + D;
D <= C;
Y <= B + D;
end process;
在这个进程中,X和Y的最后代入值都是B + C,因为像这种在一个进程中对对某信号有两次代入要取最后一个。

在一些网页上面看到。这么一个例子(同步整形电路)
process(clk)
begin
if clk'event and clk='1' then
x<=din;
y<=x;
end if;
dout<=x and (not y);
end process;
说在进程中,信号不是在改变值之后立即变化的,其他语句使用的还是该信号的旧值(未执行进程时的值),所以假设y=0,那么在时钟的上升沿:
如果din="1"小于一个时钟宽:则有x=1,y=0(虽然进程中改变了值,但不会立即被使用),则有dout=x and (not y)=1 and (not 0)=1;

小弟刚刚开始学VHDL,谢谢各位前辈了!

我不明白后面一种说“信号不是在改变值之后立即变化的,其他语句使用的还是该信号的旧值”这句话是什么意思,如果按着这种说法,那么上面的例子中X,Y为何代入的是改变之后的值?
另外,对于第二个例子,为什么y使用的是旧值,而x不是呢?
...全文
2011 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Great_Bug 2009-06-26
  • 打赏
  • 举报
回复
学VHDL还是需要一点数字电路基础的. 要理解什么是时序逻辑,什么是组合逻辑
benjaminweber 2009-06-20
  • 打赏
  • 举报
回复
硬件确实是并行处理的,他们是两个互不相干的寄存器
如果讨论仿真,仿真中没有并行,只有串行.不过这两句话可以写成
x' = din
y' = x
他们是串行执行的,不过reg'是reg下一时刻的值,在当次触发,所有<=右边为当前时刻,<=左边为下一时刻
far_2 2009-06-19
  • 打赏
  • 举报
回复
@benjamingweber
谢谢你,还是觉得你说得最右道理。
是不是说,第二个process里面
x <=din;
y <=x;
这两句是并发执行的呢?
mikeliang 2009-06-15
  • 打赏
  • 举报
回复
第一个:
在process里,是按从上到下的顺序走,不在process采取最后的值;
第二个:
把dout <=x and (not y);写在process外面就可以了
wohoo2002 2009-06-15
  • 打赏
  • 举报
回复
按时钟来取样的。
benjaminweber 2009-06-13
  • 打赏
  • 举报
回复
第二个process是由clk触发的。虽然x改变了,但是并不会重新触发。
但是第一个process是由很多变量触发的,D改变之后会重新触发,然后导致Y和B也改变。

6,127

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧