50 likes | 194 Views
VHDL 的进程行为. 顺序行为:执行的顺序是一个接在另一个之后严格执行。. 顺序行为的语句存在于 VHDL 程序中的 进程行为 之中。. 进程行为之间是并行行为语句. 进程行为语句的一般形式如下 :. < 进程标号 > : PROCESS < 敏感信号表 > < 进程说明区 > BEGIN < 语句部分 > WAIT ON < 敏感信号表 > ;
E N D
VHDL的进程行为 顺序行为:执行的顺序是一个接在另一个之后严格执行。 顺序行为的语句存在于VHDL程序中的进程行为之中。 进程行为之间是并行行为语句 进程行为语句的一般形式如下: < 进程标号> :PROCESS < 敏感信号表> < 进程说明区> BEGIN < 语句部分> WAIT ON < 敏感信号表> ; WAIT UNTIL < 条件表达式> ; WAIT FOR < 时间表达式> ; END PROCESS;
VHDL的进程行为 进程行为的说明区定义该进程所需要的局部数据环境、它 包括子程序说明、属性说明和变量说明等 变量说明的一般形式为 VARIABLE < 定义变量表> :< 类型说明:= 初始值> ; 下面进程说明区中说明了变量count,进程也可对变量赋值。 PROCESS VARIABLE count:INTEGER:= 0; BEGIN count:= count+1; WAIT FOR 1000 ns; END PROCESS;
整个实体模块中的每个进程行为语句,可以在任何时候被整个实体模块中的每个进程行为语句,可以在任何时候被 激活,所有被激活的进程是并行执行的 下面举一个三八通用译码器程序的例子,说明进程语句 如何工作。 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ENTITY decoder ISPORT(sel : IN UNSIGNED(2 DOWNTO 0); dout : OUT UNSIGNED(7 DOWNTO 0)); END decoder; ARCHITECTURE decoder_arc OF decoder IS SIGNAL sel1 :INTEGER; BEGIN PROCESS(sel) BEGIN
sel1 <= CONV_INTEGER(sel); CASE sel1 IS WHEN 0 => dout <= (‘0’,’0’,’0’,’0’,’0’,’0’,’0’,’1’) AFTER 5 ns; WHEN 1 => dout <= (‘0’,’0’,’0’,’0’,’0’,’0’,’1’,’0’) AFTER 5 ns; WHEN 2 => dout <= (‘0’,’0’,’0’,’0’,’0’,’1’,’0’,’0’) AFTER 5 ns; WHEN 3 => dout <= (‘0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’) AFTER 5 ns; WHEN 4 => dout <= (‘0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’) AFTER 5 ns; WHEN 5 => dout <= (‘0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’) AFTER 5 ns; WHEN 6 => dout <= (‘0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’) AFTER 5 ns; WHEN OTHERS => dout <= (‘1’,’0’,’0’,’0’,’0’,’0’,’0’,’0’) AFTER 5 ns; END CASE; END PROCESS; END decoder_arc;
下例是另一种激活进程的方式: ENTITY reg ISPORT(d,clk:IN BIT; q1,q2:OUT BIT); END reg; ARCHITECTURE reg_arc OF reg IS BEGIN VHDL的每个结构 体中可以有多个进程 行为语句。 PROCESSBEGIN WAIT UNTIL clk= ‘1’; q1 <= d; END PROCESS; 它的关键之处是: PROCESS BEGINWAIT UNTIL clk= ‘0’; q2 <= d; END PROCESS; END reg_arc; 进程行为语句之间是 并行关系,进程行为 语句内部是顺序关系。