从并发代码和顺序代码两个方面来讲解信号和变量的使用方法。 并发代码:信号:信号的赋值都是即时执行的。如:signal_out<=signal_in,即是若signal_in发生改变,signal_out立即被赋值为signal_in; 变量:变量不能在并发代码中使用。 顺序代码:考虑到信号和变量相互之间的赋值,分四种情况分析:1.信号被信号赋值。如下: 1 signal_1<=signal_2; 2 signal_2其他赋值操作; 信号的赋值非即时执行,只有当整个顺序代码执行完后,再进行赋值,所以代码顺序不影响结果。此种用法一般用于在时钟控制下生产寄存器,使得signal_1被赋予signal_2的上一次的值,而非signal_2现在被赋的值,实现了寄存器。若没有时钟控制,此种用法情况较为复杂,不建议使用。详见附录。2.信号被变量赋值。如下: 1 signal_1<=variable_1; 2 variable_1其他赋值操作; 信号的赋值非即时执行,只有当整个顺序代码执行完后,再进行赋值;但变量的赋值是即时执行的,所以代码顺序影响结果,变量的赋值在前面还是后面要根据实际来安排。3.变量被信号赋值。如下: 1 variable_1:=signal_1; 2 signal_1其他赋值操作; 变量的赋值是即时执行的,所以变量立即被赋值;而信号的赋值非即时执行,只有当整个顺序代码执行完后,再进行赋值。所以代码顺序不影响结果。4.变量被变量赋值。如下: 1 variable_1:=variable_2; 2 variable_2其他赋值操作; 变量的赋值是即时执行的,所以代码顺序影响结果。顺序的安排要根据实际情况。 附录:若在顺序代码中使用信号对信号的赋值,但却缺失时钟控制,这样将不能生成寄存器。如: a<=in; b<=a; c<=b; out<=c;这段代码在有时钟控制下,将综合成移位寄存器;在无时钟控制下,将综合成in和out直接相连,这显然不是我们想要的。可以看出,此时信号的表现某种程度上与变量相似了,赋值像是即时执行一般。所以不建议这样使用,以防产生意想不到的错误。 文章来源:http://blog.sina.com.cn/s/blog_62b33cb901015cra.html |