534VHDL顺序语句( Sequential) ENTITY ARCHITECTURE Process Process ports Sequential Combinational orts Process Process component 硬件执行:并发执行(VHDL本质) 仿真执行:顺序执行、并发执行 分为两大类:顺序( Sequentia)描述语句 并发( Concurrent)描述语句
1 硬件执行:并发执行(VHDL本质) 仿真执行:顺序执行、并发执行 分为两大类:顺序(Sequential)描述语句 并发(Concurrent)描述语句 ARCHITECTURE Process Process ENTITY Sequential Process Combinational Process ports ports component §3.4 VHDL顺序语句(Sequential)
顺序描述语句 执行顺序与书写顺序一致,与传统软件设计 语言的特点相似。顺序语句只能用在进程与子程 序中 可描述组合逻辑、时序逻辑。 常用的顺序描述语句 赋值语句;i语句;case语句;|oop语句 next语句;exit语句;子程序; return语句; Wait语句;nu语句
2 顺序描述语句: 执行顺序与书写顺序一致,与传统软件设计 语言的特点相似。顺序语句只能用在进程与子程 序中。 可描述组合逻辑、时序逻辑。 常用的顺序描述语句: 赋值语句; if语句;case语句;loop语句; next语句;exit语句;子程序;return语句; wait语句;null语句
对象与赋值语句 1、ⅥHDL中常用的5种对象 1)简单名称,如 my_var; 2)索引名称,如 my array3"to6) 3)片断名称,如 my_array_var( 4)记录域名,如 my_record. a_ field; 5)集合,如 my_var1, my_-var2)。 所有对象均分为:变量和信号 对象:=表达式;-变量赋值 对象<=表达式;--信号赋值 要求:表达式的值必须与对象的类型、宽度 致
3 一 对象与赋值语句 1、VHDL中常用的 5 种对象: 1)简单名称,如 my_var; 2)索引名称,如 my_array_var(3); 3)片断名称,如 my_array_var(3 to 6); 4)记录域名,如 my_record.a_field; 5)集合,如(my_var1, my_var2)。 所有对象均分为:变量和信号 对象 := 表达式; -- 变量赋值 对象 < = 表达式; -- 信号赋值 要求:表达式的值必须与对象的类型、宽度一 致
2、变量赋值与信号赋值 变量与信号的差异 1)赋值方式的不同 变量:=表达式; 信号<=表达式; 2)硬件实现的功能不同 信号代表电路单元、功能模块间的互联, 代表实际的硬件连线 变量代表电路单元內部的操作,代表暂 存的临时数据
4 2、变量赋值与信号赋值 变量与信号的差异: 1)赋值方式的不同: 变量:= 表达式; 信号 < = 表达式; 2)硬件实现的功能不同: 信号代表电路单元、功能模块间的互联, 代表实际的硬件连线; 变量代表电路单元内部的操作,代表暂 存的临时数据
3)有效范围的不同 信号:程序包、实体、结构体;全局量 变量:进程、子程序;局部量 ARCHITECTURE ISIGNAL Declarations label1: PROCESS VARIABLE Declarations label2. PROCESS VARIABLE Declarations
5 3)有效范围的不同: 信号:程序包、实体、结构体;全局量。 变量:进程、子程序;局部量。 ARCHITECTURE {SIGNAL Declarations} label1: PROCESS {VARIABLE Declarations} label2: PROCESS {VARIABLE Declarations} ┇
4)赋值行为的不同: 信号赋值延迟更新数值、时序电路 变量赋值立即更新数值、组合电路 5)信号的多次赋值 a.一个进程:最后一次赋值有效 b.多个进程:多源驱动 线与、线或、三态
6 4)赋值行为的不同: 信号赋值延迟更新数值、时序电路; 变量赋值立即更新数值、组合电路。 5)信号的多次赋值 a. 一个进程:最后一次赋值有效 b. 多个进程:多源驱动 线与、线或、三态
例:信号的多次赋值 architecture rtl of ex is architecture rtl of ex is signal a: std logic signal a: std logic; begin egin orocess process(.) begin a <=b begin a<=b end process; a <= c process(….) begin end process a C end rtl end process; end ex
7 例:信号的多次赋值 architecture rtl of ex is signal a : std_logic; begin process(…) begin a <= b; … a <= c; end process; end rtl; architecture rtl of ex is signal a : std_logic; begin process(…) begin a <= b; … end process; process(…) begin a <= c; ... end process; end ex;
例:信号赋值与变量赋值的比较 信号赋值: architecture rtl of sig is signal a, b: std_logic;-定义信号 begin process(a, b) egIn a<= b b<= a end process; end rtl;--结果是a和b的值互换
8 例:信号赋值与变量赋值的比较 信号赋值: architecture rtl of sig is signal a,b : std_logic; -- 定义信号 begin process(a, b) begin a <= b ; b <= a ; end process ; end rtl ; -- 结果是 a 和 b 的值互换
变量赋值: architecture rt of var is begin process variable a, b: std_logic;-定义变量 begin a = b b::= a end process end rtl 结果是a和b的值都等于b的初值
9 变量赋值: architecture rtl of var is begin process variable a,b:std_logic; -- 定义变量 begin a := b ; b := a ; end process ; end rtl; -- 结果是a和b的值都等于b的初值
例:变量赋值实现循环语句功能 process(indicator, sig) variable temp: std_logic begin temp: =0 for i in 0 to 3 loop temp: =temp xor(sig(i) and indicator() end loop output < temp end process
10 例:变量赋值实现循环语句功能 process(indicator, sig) variable temp : std_logic; begin temp := ‘0’ ; for i in 0 to 3 loop temp:=temp xor (sig(i) and indicator(i)); end loop ; output <= temp; end process;