VHDL的语句特点 并行语句 顺序语句 体现电路硬件的特点:各元件/信号相互影响,同时发生变化 体现设计人员的思路:现象的因果关系、局部与整体的关系 并行语句 模拟结构体中电路硬件的变化特点 结构体中的任何语句都是并行语句; 并行语句的种类有: 赋值类语句; 数据流描述 (逻辑函数的运算) 元件类语句; 结构描述 (逻辑符号的连接) 进程语句; 行为描述 (电路功能的流程) 并行语句的执行特点: 所有语句在同一时刻执行; 在仿真时刻零点执行; 在任一输入信号出现变化时执行; 仿真虚拟过程(对并行语句的执行过程): 仿真开始---执行全部并行语句(耗时?t); 执行过程中不改变信号值; 执行完毕,根据执行结果为信号赋值; 检查上述过程有没有输入信号发生变化; 若有变化,则立即开始下一次执行; (重复上述过程,可能n次,占用时间n?t); 直到电路进入稳定状态; 若一次执行后没有任何输入信号发生变化,则等待 输入信号的变化,或程序中与时间有关的语句发生作用。 若经过足够多次执行(例如上千次),电路仍然不能 稳定,则提示错误,并随机停留在某一状态; 赋值类语句:数据流描述 以基本信号为基础,描述信号间的相互关系(函数关系); 也称为“寄存器传输描述方式”:认为各信号随时存放于 各寄存器中,信号的变化只是经过适当操作后在寄存器之间 的传递; 数据流描述方式的结构体形式: Architecture d of 实体名 is 类型说明; 常量说明; 信号说明; 函数定义; begin 赋值类语句; (并行语句,为信号赋值,表达信号输 入/输出关系) end d; 直接赋值语句: 信号名<= 信号值(表达式); 要点: 赋值式双方应为相同类型; 当采用一种类型时,表达式涉及的运算应与该类型相容; 实际数字电路中,信号的类型通常为“STD_LOGIC”,对 应的运算通常为逻辑运算; 例: 2-4译码器(采用赋值语句) library ieee; use ieee.std_logic_1164.all; entity kdecoder24 is port (a: in std_logic_vector (1 downto 0); f: out std_logic_vector (3 downto 0) ); end kdecoder24; architecture d of kdecoder24 is begin f(0) <= not a(1) and not a(0); f(1) <= not a(1) and a(0); f(2) <= a(1) and not a(0); f(3) <= a(1) and a(0); end d; 条件赋值语句: 信号名<=表达式1 when 布尔表达式1 else …… 表达式n when 布尔表达式n else 表达式(n+1); 要点: 可以用于表达信号的控制传输;通常采用多个2选1数 据选择器形成串接形式; 布尔表达式采用的运算只能是关系运算,结果为“true” 时执行when之前的表达式,结果为“false”的时候执行else 之 后的语句; <= 既是赋值符号,又是小于等于符号,在使用时应注意 场合和意义; 例:4选1数据选择器(采用条件赋值语句) library ieee; use ieee.std_logic_1164.all; entity kmux4_1 is port (a: in std_logic_vector (1 downto 0); d: in std_logic_vector (3 downto 0); f: out std_logic); end kmux4_1; architecture d of kmux4_1 is begin f<= d(0) when a="00" else d(1) when a="01" else d(2) when a="10" else d(3); end d; 选择赋值语句: with 选择表达式 select 信号名<=表达式 when 选择值; …… 表达式 when others; 要点: 选择赋值语句根据选择表达式当前所取的不同选择值, 对信号进行不同赋值; 语句应用与条件赋值语句类似,用于信号的控制传输; 通常采用多路数据选择器方式实现; 例 4位质数检测器(采用选择赋值语句) library ieee; use ieee.std_logic_1164.all; entity prime is port (n: in std_logic_vector (3 downto 0); f: out std_logic); end prime; architecture d of prime is begin with n select f<= '1' when "0001", '1' when "0010", '1' when "0011"|"0101"|"0111", '1' when "1011"|"1101", '0' when others; end d; 时间延迟语句 数据在传输过程中必然出现时间延迟,为了表达信号的 延时,可以在赋值语句中加上对于延迟时间的说明; 信号名<=表达式 after k ns; 各信号之间的传输时间可以表达门电路的延迟,也可以 表达传输线的延迟,可以根据实验的结果来不断修改; 在基本门电路的设计时,可以为上升沿和下降沿分别设 定不同的延迟时间; after语句只是对电路物理性质的一种模拟描述,可以方 便于仿真检查,但对于电路综合不会产生任何影响; 作业: 1 采用直接赋值语句为2-4线译码器进行设计; 2 采用选择赋值语句设计4选1MUX; 要求:程序应包括:库和包集合说明、实体和结构体。 对所设计器件进行功能仿真,以波形图形式表明该器件能够 实现设计要求。