process进程内外的串行并行?
我是个新手,想请教各位达人一个关于process进程内外的串行并行的问题。在两个不同的process进程中的程序是并行的,那么在同一个process进程内部几条程序是并行还是串行?
例如:
P1:process(clk,reset)
begin
if reset = '0' then
s1 <= '0' ;
elsif (clk'event and clk='1') then
s1 <= PIn ; --PIn为输入信号
end if ;
end process P1;
P2:process(clk,reset,s1)
begin
if reset = '0' then
s2 <= '0' ;
elsif (clk'event and clk='1') then
s2 <= s1 ;
end if ;
end process P2;
和
process(clk,reset,s1)
begin
if reset = '0' then
s1 <= '0' ;
s2 <= '0' ;
elsif (clk'event and clk='1') then
s1 <= PIn ;
s2 <= s1;
end if ;
end process ;
在s2获得s1的时间上是不是存在差异? 两段程序的效果完全一致,在s2获得s1的时间上不存在差异,<br>
你可以通过仿真(时序)去验证呀 楼上的验证过了吗?<br>
因为前一段程序可以实现用2个D触发器进行1个时钟周期信号延时的效果,后面的可以吗? 当然可以啦!下面的程序还可以实现4个时钟周期信号延时的效果呢!<br>
<br>
process(clk,reset )<br>
begin <br>
if reset = '0' then<br>
a <= '0' ;<br>
b <= '0' ;<br>
c <= '0' ;<br>
d <= '0' ;<br>
elsif (clk'event and clk='1') then<br>
a <= PIn ;<br>
b <= a ;<br>
c <= b ;<br>
d <= c ;<br>
end if ;<br>
end process ;<br>
<br>
[ 本帖最后由 dianzi 于 2007-2-27 11:45 编辑 ] 应该是可以的。<br>
因为信号的赋值需要经过延时,信号值的更新不能立刻为下一个赋值语句所用,下一个赋值语句得到的是前一个赋值语句上一态的值。如果是变量就不同了。 原帖由 luyeallen 于 2007-2-27 12:02 发表<br>
应该是可以的。<br>
因为信号的赋值需要经过延时,信号值的更新不能立刻为下一个赋值语句所用,下一个赋值语句得到的是前一个赋值语句上一态的值。如果是变量就不同了。 所说极是,<br>
<br>
显然上面的程序中使用的都是信号,因为没有看见在进程中定义变量,那么它们只能是在结构体中定义的信号了。<br>
<br>
LZ需要搞清楚变量和信号之间的差别 谢谢!楼上的兄弟们!<br>
那么是不是说,如果是进程内部定义的变量,就不可能实现这个D触发器的延时?只有信号才可以? 对了还有个问题!<br>
信号是不占用寄存器资源的吧?那它会占用些什么呢?<br>
CPLD中的寄存器资源一般有哪几种使用方式? ******。。。。。。。。。。。。。。。 学习中。。。。
页:
[1]
2