archivetemp第三章 VHDL语言基础.ppt
文本预览下载声明
VHDL的数据对象 变量: 变量是定义进程或子程序(包括函数和过程)中的变化量。 VARIABLE 变量名:数据类型:=初始值 使用格式 用途: 用于计算或暂存中间数据,是一个局部量 VARIABLE time::integer RANGE 0 TO 6 --进程中代表次数的变量 Example 注意:变量的赋值是立即生效的。 VHDL的数据对象 信号: 信号对应着硬件内部实实在在的连线 使用格式 用途: 在元件间起着互联作用,或作为一种数据容器,以保留历史值和当前值 SIGNAL 信号名:数据类型:=表达式 “:=”表示对信号的赋初值,一般不产生延时。 “=”表示信号的代入赋值,有延时。 注意: VHDL的数据对象 使用变量和信号的比较 信号是实体间动态交换数据的手段,用信号对象把实体连接在一起形成模块;实体说明,结构体说明都能说明信号。 变量用于进程语句和子程序中中间的数据存储。 信号赋值有延迟;而变量赋值没有延迟。 信号除当前值外有许多信息(历史信息,波形值);而变量只有当前值。 进程对信号敏感,对变量不敏感。信号可以是多个进程的全局信号;而变量只在定义它的进程中可见。 信号是硬件中连线的抽象描述,功能是保存变化的数据值和连接子元件,信号在原件的端口连接元件;变量在硬件中没有对应关系,而是用于硬件特性的高层次建模所需要的计算中。 在描述中,信号的赋值不会立即生效,而是要等待一个delta延迟后才会变化,否则该信号的值在delta延迟之前仍是原来的值。 VHDL的数据对象 使用变量和信号的比较 ——六分频器 library ieee; use ieee.std_logic_1164.all; entity frequencies is port(clk:in std_logic; q:out std_logic); end frequencies; architecture behav of frequencies is begin process (clk) variable time:integer range 0 to 6; begin if rising_edge(clk) then time:=time+1; if time=6 then q=1; time:=0; else q=0; end if; end if; end process; end behav; 此例为6分频器,其中time为变量。由于变量赋值是马上生效的,因此从例子中可以看出time置零是在time为6时发生的。 VHDL的数据对象 使用变量和信号的比较 ——六分频器 此例也为6分频器。其中time为信号。由于信号赋值是具有一定的延时性,因此从例子中比较time和5的大小时,语句time=time+1还未生效,time的值是上次进程结束时的结果。 library ieee; use ieee.std_logic_1164.all; entity frequencies is port(clk:in std_logic; q:out std_logic); end frequencies; architecture behav of frequencies is signal time:integer range 0 to 5; begin process (clk) begin if rising_edge(clk) then time=time+1; if time=5 then q=1; time=0; else q=0; end if; end if; end process; end behav; VHDL的数据对象 使用变量和信号的比较——六分频器的仿真 time 为变量: time为信号 可以看出两种方法是等价的。 VHDL的数据对象——小结 变量常定义在进程与子程序中,用于保存运算的中间临时数 据,或作为循环语句中的循环变量,其赋值立即发生。(:=) 常量用于保存静态的数据(:=)。 信号有明显的连线或容器的对应关系,具有输出波形,对其 赋值需要延迟时间(=), 在进程间或子程序间具有信息传递功 能。 注意对象定义的所在位置及适用区域的对应关系 VHDL基本语句 VHDL基本语句 VHDL语言与高级程序语言最大的不同就是VHDL语言是并发执行的,但是VHDL的基本语句包括顺序语句和并行语句。 顺序语句不能直接用在结构体中,需要用process进行“封装”
显示全部