VHDL程序设计教程 第4章 VHDL 语法基础

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

end xor_gate;
ARCHITECTURE data_flow OF xor_gate IS
BEGIN
C <= '0'WHEN a='0'AND b='0'ELSE --条件信号赋值语句
'1'WHEN a='0'AND b='1'ELSE
'1'WHEN a='1'AND b='0'ELSE
2020/7/3
山东大学 曾繁泰
9
3. 选择变量赋值语句
选择变量赋值语句的格式为:
WITH 表达式 SELECT
变量名:=
表达式1 WHEN 选择条件1 ,
表达式2 WHEN 选择条件2 ,
表达式3 WHEN 选择条件3 ,
表达式n WHEN 选择条件n ;
2020/7/3
山东大学 曾繁泰
10
通常,顺序语句(Sequential Statement)具有如下特征:
(1)顺序语句只能出现在进程 、过程、函数和模块中。
(2)顺序语句适于描述的系统 行为有:时序流、控制流、 条件分支和迭代算法等。
(3)顺序语句的操作有算术、 逻辑运算、信号、变量的赋 值、函数调用等。
2020/7/3
山东大学 曾繁泰
IF语句可用于选择器、比较器、编码器、译码器和状态机设计。 IF语句根据指定条件来确定语句执行顺序,共有一下3种类型。 1.用于门闩控制的IF语句 2. 用于二选一控制的IF语句 3. 用于多选控制的IF语句
2020/7/3
山东大学 曾繁泰
18
1.用于门闩控制的IF语句
这种类型的IF语句一般书写格式为: IF 条件 THEN <顺序处理语句> END IF; 当程序执行到该IF语句时,就要判断IF语句所指定的条件
ELSIF (d(1)='0') THEN
q<="001";
q<="110";
ELSE
ELSIF (d(2)='0') THEN
q<="000";
q<="101";
END IF;
ELSIF (d(3)='0') THEN
ENTITY xor_gateB IS
PORT (ind1,ind2:IN std_logic; --在实体部分定义端口,相当于器件的引脚
C: out std_logic);
END ENTITY xor_gateB;
ARCHITECTURE example OF xor_gateB IS
signal q :std_logic;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY priority_encoder IS
PORT (d: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
q: OUT STD_LOGIC_VECTOR (2 DOWNTO 0));
END ENTITY priority_encoder;
'1' WHEN "01" | "10";
END DATA_FLOW;
2020/7/3
山东大学 曾繁泰
16
4.3 条件分支语句与循环语句
4.3.1 4.3.2 4.4.3 4.3.4
IF语句 CASE语句 LLOP语句 NULL语句
2020/7/3
山东大学 曾繁泰
17
4.3.1 IF语句
d<=[inertial] data after 10ns; d<=data after 10ns;
2020/7/3
山东大学 曾繁泰
12
2. 条件信号代入语句
条件信号赋值语句的格式为:
信号名<= [transport | [reject 时间表达式] inertial] 表达式1 WHEN 条件1 ELSE
ARCHITECTURE example_IF OF priority_encoder IS
BEGIN
P1: PROCESS(d)
q<="011";
BEGIN
ELSIF (d(5)='0') THEN
IF (d(0) =‘0’) THEN
q<="010";
q <="111";
ELSIF (d(6)='0') THEN
VHDL程序设计教程(第4版)
第4章 VHDL 语法基础
主讲人 :曾繁泰 zft@sdu.edu.cn
VHDL语言的串行语句类型
VHDL语句是并发语言,大部分语句是并发执行的。但是 在进程、过程、块语句和函数中,还有许多顺序语句。顺 序语句完全按照程序中书写的顺序执行,顺序语句有两类 :一类是真正的顺序语句,一类既可以做顺序语句又可以 做并发语句,是具有双重特性的语句。这类语句放在进程 、块、子程序之外是并发语句,放在过程、块、子程序之 内是顺序语句。
mux2 IS BEGIN P1: PROCESS (a, b, sel) BEGIN
IF ( sel='1') THEN C <= a;
ELSE C <= b;
ENDபைடு நூலகம்IF; END PROCESS P1; END example;
2020/7/3
山东大学 曾繁泰
22
3.用于多选择控制的IF语句
是否成立。如果条件成立,IF语句所包含的顺序处理语句 将被执行;如果条件不成立,程序跳过IF包含的顺序处理 语句,执行后续语句。
2020/7/3
山东大学 曾繁泰
19
[例4-5]用IF语句设计D型触发器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY dff IS
variable assignment statement signal assignment statement procedure call过程调用语句 …
-- 变量赋值语句 -- 信号赋值语句
2020/7/3
山东大学 曾繁泰
4
VHDL语言的串行语句类型
wait 语句 if 语句 case 语句 loop 语句 next语句 exit语句 report语句 return 语句 Assert断言语句
'0'WHEN a='1'AND b='1'ELSE
'0';
END data_flow;
2020/7/3
山东大学 曾繁泰
14
3. 选择信号代入语句
选择信号代入语句的格式为:
WITH 表达式 SELECT 信号名<= [transport | [reject 时间表达式] inertial] 表达式1 WHEN 选择条件1,
PORT (clk,d: IN STD_LOGIC;
q: OUT STD_LOGIC);
END dff;
ARCHITECTURE structure OF dff IS
BEGIN
P1:PROCESS(clk)
BEGIN
IF (clk 'EVENT AND clk='1') THEN
q <= d;
进程,函数说明 定义变量
VARIABLE E,F: STD_ULOGIC;
2020/7/3
设计芯片的数据信息流动层次
山东大学 曾繁泰 6
4.2.1 变量赋值语句
变量赋值语句用于对已经声明过的变量进行赋值或更新, 是无延迟的数据传递语句。变量赋值语句是顺序执行的语 句,可以用于进程,函数和过程语句中。变量赋值语句有3 种:基本变量赋值语句、条件变量赋值语句和选择变量赋 值语句。
表达式2 WHEN 选择条件2,
表达式3 WHEN 选择条件3,

表达式n WHEN 选择条件n;
2020/7/3
山东大学 曾繁泰
15
[例4-3]选择信号代入语句设计的xor_gate
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY xor_gate IS
4.2.2 信号代入语句
信号代入语句是VHDL语言的基本语句之一。与变量赋值 语句相似,信号代入语句也分3种类型:
1. 基本信号代入语句 2. 条件信号代入语句 3. 选择信号代入语句
2020/7/3
山东大学 曾繁泰
11
1. 基本信号代入语句
基本信号代入语句的书写格式为:
信号名 <= [transport | [reject 时间表达式] inertial] 逻辑表达式;
时,执行顺序语句乙。用条件选择两条不同的程序执行路 径。
2020/7/3
山东大学 曾繁泰
21
[例4-6]用IF语句来设计的二选一电路
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux2 IS
PORT (a,b,sel:IN STD_LOGIC;
C:OUT STD_LOGIC); END mux2; ARCHITECTURE example OF
用于多选择控制的IF语句书写格式为:
IF 条件1 THEN <顺序语句1>; ELSIF 条件2 THEN <顺序语句2>;
ELSIF 条件n THEN <顺序语句n>; ELSE <顺序语句n+1>; END IF;
2020/7/3
山东大学 曾繁泰
23
[例4-7]用IF语句实现的优先级编码器
--在结构体部分定义信号,
BEGIN
p1 :PROCESS(IND1)
VARIABLE OUT_Q: STD_LOGIC; -- 在进程、函数或过程语句中定义变量
BEGIN OUT_Q := ind1 xor ind2; -- 变量赋值语句 q <= OUT_Q;
END PROCESS p1;
PORT (sel:IN Bit_vector(0 TO 1);
C: out Bit);
END ENTITY xor_gate;
ARCHITECTURE data_flow OF xor_gate IS
BEGIN
WITH sel SELECT --选择信号代入语句
C <='0' WHEN "00" | "11",
transport表示传输延迟,inertial表示惯性延迟。如果 输入信号频率太高,信号变化的时间间隔小于开关电路的 开关时间,则信号不能传输到输出端,这种延迟称为惯性 延迟。与此相反,传输延迟多表示连线延迟,与输入信号 频率无关。如果没有写明,则默认为惯性延迟,例如下面 两个语句是相同的意思。

表达式n;
2020/7/3
山东大学 曾繁泰
13
[例4-2]条件信号赋值语句设计的xor_gate
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY xor_gate IS
PORT(a,b: in std_logic;
c: out std_logic);
表达式2 WHEN 条件2 ELSE
表达式3 WHEN 条件3 ELSE

表达式n WHEN 条件n ;
也可写为:
信号名<= [transport | [reject 时间表达式] inertial]
表达式1 WHEN 条件1 ELSE
表达式2 WHEN 条件2 ELSE
表达式3 WHEN 条件3 ELSE
END IF;
END PROCESS P1;
END structure;
--条件分支语句 --等待clk活动clk’是clk的次态, --且clk=1时条件成立.
2020/7/3
山东大学 曾繁泰
20
2.用于二选一控制的IF语句
这种类型的语句书写格式为: IF 条件 THEN <顺序处理语句甲>; ELSE <顺序处理语句乙>; END IF; 当IF指定的条件满足时,执行顺序语句甲;当条件不成立
5
4.2 变量赋值语句与信号代入语句
VHDL程序在传递 数据、信息时,需 要对变量、信号等 对象进行赋值。变 量、信号和端口分 别属于VHDL程序 中不同的部分,数 据、信息传递的层 次如图4.2所示。
实体说明 定义端口 PORT(A,B:INOUT STD_LOGIC;)
结构体说明 定义信号
SIGNAL C, D: BIT;
c <= q;
2020/7/3
END example;
山东大学 曾繁泰 8
2. 条件变量赋值语句
条件变量赋值语句的格式为:
变量名:=
表达式1 WHEN 条件1
表达式2 WHEN 条件2 ELSE
表达式3 WHEN 条件3 ELSE
ELSE
表达式n-1 WHEN 条件n-1 ELSE
表达式n;
1. 基本变量赋值语句(Simple Variable Assignment) 变量赋值语句的书写格式为: 变量名 := 逻辑表达式;
2020/7/3
山东大学 曾繁泰
7
[例4-1]端口、信号、变量的适用范围
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
相关文档
最新文档