顺序语句

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.4 VHDL顺序语句(Sequential)
ENTITY ARCHITECTURE
Process
Sequential Process
Process
Sequential Process component
硬件执行:并发执行(VHDL本质) 仿真执行:顺序执行、并发执行 分为两大类:顺序(Sequential)描述语句 并发(Concurrent)描述语句
3) If语句的多选择控制 if语句的多选择控制又称为if语句的嵌套。 格式: IF 条件句 THEN
顺序语句 ELSIF 条件句 THEN 顺序语句}; . . ELSIF 条件句 THEN 顺序语句; ELSE 顺序语句; END IF;
典型电路是多选一(四选一)电路:
library ieee; use ieee.std_logic_1164.all; entity mux4 is port(input : in std_logic_vector(3 downto 0); sel : in std_logic_vector(1 downto 0); y : out std_logic ); end mux4; Architecture rt1 of mux4 is Begin process(input,sel) begin if (sel=“00”) then y<=input(0); elsif (sel=“01”) then y<=input(1); elsif (sel=“10”) then y<=input(2); else y<=input(3); end process; end rt1;
process (s4,s3,s2,s1) begin sel<=0; if s1=‘1’ then sel<=sel+1; elsif s2=‘1’ then sel<=sel+2; elsif s3=‘1’ then sel<=sel+4; elsif s4=‘1’ then sel<=sel+8; else null; end if;
architecture art of coder is begin process(input) begin if input(7)=‘0’ then output<=“000”; elsif input(6)=‘0’ then output<=“001”; elsif input(5)=‘0’ then output<=“010”; elsif input(4)=‘0’ then output<=“011”;
2. 变量赋值与信号赋值
变量与信号的差异: 1)赋值方式的不同: 变量:=表达式; 信号<=表达式; 2)硬件实现的功能不同: 信号代表电路单元、功能模块间的互联, 代表实际的硬件连线; 变量代表电路单元内部的操作,代表暂存 的临时数据。
3)有效范围的不用: 信号:程序包、实体、结构体;全局量。 变量:进程、子程序;局部量。
用case语句描述四选一电路:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX41 IS PORT(S1,S2: IN STD_LOGIC; A,B,C,D:IN STD_LOGIC; Z: OUT STD_LOGIC); END ENTITY MUX41; ARCHITECTURE ART OF MUX41 IS SIGNAL S :STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN S<=S1 & S2;
VHDL主要描述语句 VHDL主要描述语句
在结构体 (ARCHITECTURE) ) 中 执行的语句 硬件 描述 的特 点
并行处理语句
(Sequential Statements)来自百度文库
顺序处理语句
(Concurrent Statements)
在进程( 在进程(PROCESS) ) 函数( 函数(FUNCTION) ) 过程( 过程(PROCEDURE) ) 中执行的语句
If 条件 then 顺序处理语句; end if;
例: if (ena=“1”) then q<=d; end if; 综合后生成锁存器(latch)
LATCH d ena ENA D Q q
2). if语句的二选择控制 格式: IF 条件句 THEN 顺序语句 ELSE 顺序语句; END IF; 用条件来选择两条不同程序执行的路径。
例:case语句的误用 signal value :integer range 0 to 15; signal out_1:bit; case value is end case; ---缺少when条件语句
case value is ---分支条件不包含2到15 when 0 =>out_1<=‘1’; when 1 =>out_1<=‘0’; end case
PROCESS(S1,S2,A,B,C,D) BEGIN CASE S IS WHEN "00"=>Z<=A; WHEN "01"=>Z<=B; WHEN "10"=>Z<=C; WHEN "11"=>Z<=D; WHEN OTHERS =>Z<='X'; END CASE; END PROCESS; END ART;
elsif input(3)=‘0’ then output<=“100”; elsif input(2)=‘0’ then output<=“101”; elsif input(1)=‘0’ then output<=“110”; else output<=“111”; end if; end process; end art;
高级 语言 的特 点
顺序描述语句: 执行(指仿真执行)顺序与书写顺序基本一 致,与传统软件执行语言的特点相似。顺序 语句只能用在进程与子程序中。 可描述组合逻辑、时序逻辑。 常用的顺序描述语句: 赋值语句;if语句;case语句;loop语句; next语句;exit语句;子程序;return语 句;wait语句;null语句。
case value is ---在5到10上发生重叠 when 0 to 10 => out_1<=‘1’; when 5 to 15 => out_1<=‘0’; end case;
例:根据输入确定输出值 library ieee; use ieee.std_logic_1164.all; entity mux41 is port(s4,s3,s2,s1 : in std_logic; z4,z3,z2,z1 : out std_logic); end mux41; Architecture art of mux41 is signal sel:integer range 0 to 15; begin
其中的分支条件可有以下的形式: when 值 => 顺序处理语句; when 值 to 值 => 顺序处理语句; when 值|值|值|…|值 => 顺序处理语句; 以上三种方式的混合: When others => 顺序处理语句;
case语句使用注意: 语句使用注意: 语句使用注意 1)分支条件的值必须在表达式的取值范围 内; 2)两个分支条件不能重叠; 3)case语句执行时必须选中,且只能选中 一个分支条件。 4) 如果没有others分支条件存在,则分支 条件必须覆盖表达式所有可能的值。对 std_logic, std_logic_vector数据类型要 特别注意使用others分支条件。
2. case语句 语句 case语句常用来表达描述总线或编码、译 码行为。可读性比if语句强。格式如下:
CASE 表达式 IS WHEN 分支条件 =>顺序 语句; WHEN 分支条件 =>顺序 语句; … WHEN 分支条件 =>顺序 语句; [ WHEN OTHERS =>顺 序语句;] END CASE;
mux4 input(3..0) y sel(1..0)
If_then_elsif语句中隐含了优先级别的判断, 最先出现的条件优先级最高,可用于设计具有 优先级的电路。如8-3优先级编码器。 library ieee; use ieee.std_logic_1164.all; entity coder is port(input : in std_logic_vector(7 downto 0); output : out std_logic_vector(2 downto 0)); end coder;
3.4.1 对象与赋值语句
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). 所有对象均分为:变量和信号 对象:=表达式; ----变量赋值 对象<=表达式; ----信号赋值 要求:表达式的值必须与对象的类型、宽度一致。
此描述的典型电路是二选一电路:
Architecture rt1 of mux2 is begin process(a,b,sel) begin if (sel=“1”) then y<=a; else y<=b; end if; end process; end rt1; a b sel 21mux A B S MULTIPLEXER y Y
例:信号赋值与变量赋值的比较 信号赋值: Architecture rt1 of sig is signal a,b : std_logic; Begin process(a,b) begin a<=b; b<=a; end process; End rt1; ----结果是a和b的值互换
变量赋值: Architecture rt1 of var is Begin process variable a,b: std_logic; begin a:=b; b:=a; end process; End rt1; ----结果是a和b的值都等于b的初值
ARCHITETURE {SIGNAL Declarations} Label1:PROCESS {VARIABLE Declarations} . . Label2:PROCESS {VARIABLE Declarations}
4) 赋值行为的不同: 信号赋值延迟更新数值、时序电路; 变量赋值立即更新数值、组合电路。 5)信号的多次赋值: a. 一个进程: 最后一次赋值有效 b. 多个进程: 多源驱动 线与、线或、三态
3.4.2 转向控制语句
转向控制语句通过条件控制开关决定是否执 行一条或几条语句,或重得执行一条或几条语 句,或跳过一条或几条语句。 分为5种: if语句、case语句、 loop语句、next语句、 exit语句
1. if语句 语句 if语句执行一序列的语句,其次序依赖于 一个或多个条件的值。 1)if语句的门闩控制
例:信号的多次赋值
Architecture rtl of ex is signal a : std_logic; Begin process(…) begin a<=b; … a<=c; end process; End rtl; End rtl; process(…) begin a<=c; … end process; Architecture rtl of ex is signal a : std_logic; Begin process(…) begin a<=b; … end process;
z1<=‘0’; z2<=‘0’; z3<=‘0’; z4<=‘0’; case sel is when 0=>z1<=‘1’; when 1|3=>z2<=‘1’; when 4 to 7|2=>z3<=‘1’; when others=>z4<=‘1’; end case; end process; end art;
相关文档
最新文档