第6节 信号的赋值
设计数字电路的行为可以简单的描述为基于某些输入信号的组合来创建新的输出信号。从计算机系统到应用设备内的控制器,再到媒体播放设备,数字电路处理从信号源来的输入信号并产生有用的输出信号。因此,在VHDL中信号赋值操作符是最基本的操作符。
信号赋值操作符(“<=”)用来定义输出信号是怎样被驱动的。简单的例子有A<=’1’,意思是信号A被赋予了逻辑值‘1’(假定为LHV)。或是A<=B,意思是信号A被赋予了信号B的值。只要信号赋值为一个新值,那么在信号采用新值之前VHDL仿真器要花一定的时间来执行赋值操作。这是因为VHDL模型电路使用连接线来传递信号-由于连接线上电压不可能瞬间改变,那么VHDL中的信号赋值也 可能瞬间发生。这是VHDL语言与计算机语言,比如“C”语言之间的本质区别。当VHDL程序执行时,它是以实时的方式仿真电路。但是“实时”对于计算机来说,就是其存储在内存中的一个计数值。在VHDL中,当赋值A<=’1’发生时,时间计数器在“430ns”,那么只有时间增加到430ns时A才会开始赋值到‘1’。这是和C程序本质的不同,在C程序中,信息转换发生时间不是强制的。
由于在每一个VHDL转换中,时间都是一个重要因素。因此,VHDL代码在本质上是并行的,这意味着在任何给定的时间点,一些信号的赋值可能是被阻塞的。在VHDL代码中,产生-有效的关系与表达式的出现位置无关,但却与时间模型有关。比如,在C程序中,先有X=Y ,然后紧跟着Z=X,并且变量X原值为1,变量Y原值为2,那么这段程序就隐含表示了Z=Y,并且Z最终等于2。而在VHDL里,这就完全不一样了:如果先有A<=B,然后紧跟着C<=A,那么当时间达到并允许A赋值为B值以及稍后的C赋值为A的时候,C将一直为1。
信号赋值操作符可以根据输入信号上的操作功能(操作符“<=”左边的信号是输出,右边的是输入)来给输出信号赋予新值。在VHDL工具中,基本逻辑操作都作为了一个标准功能,这样信号赋值就可以这样写:“A<=C or D”(and,or,nand,nor,xor,xnor以及not都可以使用)。因此,几乎就不用写基本逻辑电路的VHDL代码了。VHDL包括了其它更有力的信号赋值操作符,以及更加“内置化”的功能,但这些将在后面的练习中再做深入讨论。注意,在VHDL中所有的信号赋值表达式最后都要写上一个分号。
在开始实验环节之前,你应该先到网站上浏览一遍ISE/WebPack指南手册中VHDL部分。尽管在指南手册中,只表述了使用VHDL设计数字逻辑电路所需要的最基本特征和概念,但也足够满足本实验的要求了。后面的练习会更加深入的发掘VHDL语言的特性以及WebPack中用到的特性。
在开始实验环节之前,你应该先到网站上浏览一遍ISE/WebPack指南手册中VHDL部分。尽管在指南手册中,只表述了使用VHDL设计数字逻辑电路所需要的最基本特征和概念,但也足够满足本实验的要求了。后面的练习会更加深入的发掘VHDL语言的特性以及WebPack中用到的特性。


