VHDL的执行语句.ppt
文本预览下载声明
VHDL的执行语句 并行语句/顺序语句 并行语句体现电路硬件的特点: 各元件/信号相互影响,同时发生变化; 顺序语句体现设计人员的思路: 现象的因果关系、局部与整体的关系; VHDL的并行语句 并行语句的种类有: 赋值类语句:数据流描述 (逻辑函数的运算) 元件类语句:结构描述 (逻辑符号的连接) 进程语句:行为描述 (电路功能的流程) 结构体中的任何执行语句都是并行语句; 并行语句的仿真特点 在仿真时刻零点开始执行; 在任一输入信号出现变化时开始执行; (在电路模块中,一次仿真只考虑一个输入变化引起的状态变化;仅当电路进入稳定状态后,才能进行下一个输入的变化。) 并行语句的仿真过程 仿真开始---执行全部并行语句(耗时?t),计算出所有的输出信号值,但在计算过程中不改变信号值; 执行完毕,根据执行结果为所有并行语句的输出信号赋值; 并行语句的仿真过程 赋值后,检查有没有导致任何语句的输入信号发生变化; 若有变化,则立即开始下一次执行; 继续上述过程直到电路进入稳定状态(没有输入信号再发生变化),本次仿真过程结束,等待下一次仿真时刻; VHDL中的数据流设计:信号赋值语句 以基本信号为基础,描述信号间的相互关系(函数关系); 也称为“寄存器传输描述方式” ; 信号赋值语句主要包括3种形式: 直接赋值、条件赋值、选择赋值。 直接赋值语句 信号名 = 信号值(表达式); 赋值语句将“=”右边的值赋给左边的信号;右边可以是直接常数、信号、表达式、函数; 赋值式双方应为相同类型; 直接赋值语句 每条赋值语句对应一个电路模块,右边信号为输入信号,左边信号为输出信号; 赋值号左边不能为端口输入信号,右边不能含有端口输出信号; 赋值号双方不能出现同一信号名; 在一个程序块中,应避免采用多条赋值语句为同一信号赋值; 直接赋值的例题程序 例: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; 例:奇偶校验电路的设计 library ieee;use ieee.std_logic_1164.all; ? entity kparity is port (n: in std_logic_vector (3 downto 0); odd,even: out std_logic); end kparity; ? architecture rtl of kparity is signal oddi:std_logic; begin oddi = n(3) xor n(2) xor n(1) xor n(0); odd = oddi; even = not oddi; end rtl; 例:素数检测器的设计p.287(表4-53) 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 rtl1 of prime is signal n3l_n0,n3l_n2l_n1,n2l_n1_n0 ,n2_n1l_n0:std_logic; begin n3l_n0 = not n(3) and n(0); n3l_n2l_n1 = not n(3) and not n(2) and n(1); n2l_n1_n0 = not n(2) and n(1) and n(0); n2_n1l_n0 = n(2) and not n(1) and n(0); f= n3l_n0 or n3l_n2l_n1 or n2l_n1_n0 or n2_n1l_n0; end rtl1; VHDL中的数据流设计:信号赋值语句 条件赋值语句:when/else 信号名=表达式1 when 布尔表达式1 else表达式2 when 布尔表达式2 …… else表达式n when 布尔表达式
显示全部