VHDL程序设计教程 第4章 VHDL 语法基础
第四讲VHDL语言基础知识

关键词 VHDL 实体 逻辑功能
此两处必须同名
逻辑行为描述
1、实体
格式
ENTITY 实体名 IS [GENERIC ( 类属表 );] [PORT ( 端口表 );] END 实体名;
说明
实体说明所设计的逻辑电路的输入、输 出信号及其特性(输入(in)输出(out)、双向 (inout)、buffer)
•文件(FILES)是传输大量数据的客体,包含一些专门数据 类型的数值。
对象说明的一般格式是: <对象类型> < 标识符表>:<子类型说明> <信号种类>: =<表达式>; 说明 标识符 <子类型说明>是类型名或类型名加限制条件 <信号种类>为BUS或REGISTER,该项为任选项 :=<表达式>为对象赋初值
IS
一个包集合由包集合标题和包集合体两 大部分组成。 包集合体是一个可选项。
5、库
格式
LIBRARY 库名; USE 库名. 程序包名. All;
USE语句的使用有两种常用格式: USE 库名.程序包名.项目名 ; USE 库名.程序包名.ALL ;
VHDL库的种类
• IEEE库:IEEE标准库, 是按IEEE组织制定的 工业标准进行编写的, 是内容丰富的资源库 使用需声明 • •STD_LOGIC_1164 程序包 •STD_LOGIC_ARITH 程序包 •STD_LOGIC_UNSIGNED 程序包
STD库:VHDL标准库,STANDARD和 TEXTIO程序包即收入在STD库中 使用无需声明
VHDL库的种类
• • •
ASIC库:EDA厂商提供库 使用需声明 WORK库:现行作业库,当前工作目录的所有设计 使用无需声明 USER库:用户自定义库 使用需声明
VHDL语言基础

VHDL语⾔基础VHDL语⾔基础1 数据对象数据对象包括常量、变量、信号和⽂件四种类型1.1 常量常量是对某⼀常量名赋予⼀个固定的值,⽽且只能赋值⼀次。
通常赋值在程序开始前进⾏,该值的数据类型则在声明语句中指明--定义常量语句:--Constant 常数名:数据类型:=表达式Constant Vcc:real:=5.2; --指定Vcc的数据类型是实数,赋值为5.0VConstant bus_width:integer:=8; --定义总线宽度为常数8常量所赋的值应和定义的数据类型⼀致;常量在程序包、实体、构造体或进程的说明性区域必须加以说明。
定义程序包内的常量课提供所包含的任何实体、构造体所引⽤,定义在实体说明内的常量只能在该实体内可见,定义在进程说明内的常量只能在该实体内可见,定义在进程说明区域中的常量只能在该进程内可见1.2 变量变量只能在进程语句、函数语句和过程语句结构中使⽤。
变量的赋值是直接的,⾮预设的。
变量不能表达“连线”或储存原件,不能设置传输延迟量--定义变量语句--Variable 变量名:数据类型:=初始值;Variable count:integer 0 to 255:=20; --定义count整数变量,变化范围0-255,初始值为20--变量赋值语句--⽬标变量名:=表达式;x:=10.0; --实数变量赋值为10.0Y:=1.5+x; --运算表达式赋值,表达式必须与⽬标变量的数据类型相同A(3 to 6):=("1101") --位⽮量赋值1.3 信号信号表⽰逻辑门的输⼊或输出,类似于连接线,也可以表达存储元件的状态。
信号通常在构造体、程序包和实体中说明--信号定义语句--Signal 信号名:数据类型:=初始值Signal clock:bit:='0'; --定义时钟信号,初始值为0Signal count:BIT_VECTOR(3 DOWNTO 0); --定义count为4位位⽮量--信号赋值语句⽬标信号名<=表达式;x<=9;Z<=x after 5 ns; --在5ns后将x的值赋给z2 数据类型2.1 VHDL的预定义数据类型类型定义说明布尔(Boolean)TYPE BOOLEAN IS (FALSE,TRUE);取值为FALSE和TRUE,不是数值,不能运算,⼀般⽤于关系运算符位(Bit)TYPE BIT IS ('0','1');取值为0和1,⽤于逻辑运算位⽮量(Bit_Vector)TYPE BIT_VECTOR IS ARRAY(Natural range<>)OF BIT;基于Bit类型的数组,⽤于逻辑运算字符(Character)TYPE CHARACTER IS (NUL,SOH,STX,...,'','!',...);通常⽤''引号引起来,区分⼤⼩写字符串(String)VARIABLE string_var:STRING(1 TO 7);string_var:="A B C D";通常⽤""引起来,区分⼤⼩写整数(Integer)variable a:integer range -63 to 63取值范围 -(231 -1)~(231-1)要求⽤RANGE⼦句为所定义的数限定范围,以便根据范围决定此信号或变量的⼆进制位数实数(Real)-取值范围-1.0E38~+1.0E38,仅可⽤于仿真不可综合时间(Time)-物理量数据,完整的包括整数和单位两个部分,⽤⾄少⼀个空格隔开,仅可⽤于仿真不可综合时间(Time)-开,仅可⽤于仿真不可综合错误等级(SeverityLevel)TYPE severity_level IS (NOTE、WARNING、ERROR、FAILURE);表⽰系统状态,仅可⽤于仿真不可⽤于综合类型定义说明2.2 IEEE预定义标准逻辑位与⽮量标准逻辑类型对数字逻辑电路的逻辑特性描述更加完整、真实,因此在VHDL程序中,对逻辑信号的定义通常采⽤标准逻辑类型标准逻辑位(Std_Logic)符号说明'U'Undefined(未初始化)'X'Forcing Unknown(强未知)'0'Forcing 0(强0)'1'Forcing 1(强1)'Z'High Impedance(⾼阻)'W'Weak Unknown(弱未知)'L'Weak 0(弱0)'H'Weak 1(弱1)'-'Don't Care(忽略)标准逻辑位⽮量(Std_Logic_Vector)基于Std_Logic类型的数组使⽤Std_Logic和Std_Logic_Vector要调⽤IEEE库中的Std_Logic_1164程序包;就综合⽽⾔,能够在数字器件中实现的是“-、0、1、Z”四种状态。
第4章_VHDL设计初步1

4.2.2 D触发器VHDL描述的语言现象说明
4. 上升沿检测表式和信号属性函数EVENT
关键词EVENT是信号属性,VHDL通过以下表式来测定 某信号的跳变边沿: <信号名>'EVENT
4.2.2 D触发器VHDL描述的语言现象说明
5. 不完整条件语句与时序电路
【例4-11】 ENTITY COMP_BAD IS PORT( a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 > b1 THEN q1 <= '1' ; ELSIF a1 < b1 THEN q1 <= '0' ;-- 未提及当a1=b1时,q1作何操作 END IF; END PROCESS ; END ;
第4章
本章内容
4.1 多路选择器VHDL描述(简单组合电 路) 4.2 寄存器描述及其VHDL语言现象(简 单时序电路) 4.3 1为二进制全加器的VHDL设计(实例) 4.4 VHDL文本输入设计方法(工具使用, 通过上机操作掌握)
本章重点掌握内容
1、实体及端口的定义。 2、结构体和信号的定义。 3、基本逻辑操作符和信号赋值操作符。 4、IF-THEN-ELSE(顺序)、WHEN-ELSE (并行)语句。 5、进程语句。 6、信号的上升沿表示方法。 7、元件例化方法。
是什么是VHDL?
Very high speed integrated Hardware Description Language (VHDL)
是IEEE、工业标准硬件描述语言 用语言的方式而非图形等方式描述硬件电路
第4章VHDL语言基础

END 结构体名;
4.1.3 结构体部分
结构体组成
结
构 体
说
明 结
构
体 结 构 体
功 能 描 述
常数说明 数据类型说明
信号说明 例化元件说明 子程序说明
块语句 进程语句 信号赋值语句 子程序调用语句 元件例化语句
结构体描述风格
行为描述 描述该设计单元的功能,主要使用函数、过程和进程语 句,以算法形式描述数据的变换和传送
例4-4
Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Use ieee.std_logic_arith.all;
行为描述
Entity eqcomp4 is Port (a,b: in std_logic_vector (3 downto 0); equals: out std_logic);
4.1.2 实体部分
实体(ENTITY)
实体是一个设计实体的表层设计单元,其功能是 对这个设计实体与外部电路进行接口描述。它规定了 设计单元的输入/输出接口信号或引脚,是设计实体 经封装后对外的一个通信界面。类似于原理图中的一 个部件符号。
4.1.2 实体部分
实体格式
ENTITY 实体名 IS
书写格式: GENERIC([常数名:数据类型[:设定值]
{;常数名:数据类型[:=设定值 ]}); 例4-1
GENERIC (cntwidth : integer:=4);
4.1.2 实体部分
PORT端口
用于定义模块所有的输入/输出信号,相当于定义一个 模块符号
VHDL语法入门

1.1 VHDL程序构件
配置说明
将具体的构造体分配给实体说明 示例
configuration conf1 of xor_gate is for data_flow end for; end conf1;
configuration conf2 of xor_gate is for structure end for; end conf1;
字符串
被双引号括起来的ASCII字符,如,“Hello”;
位串
被双引号括起来的数字序列,其前冠以基数说明符;如, B“0110_1111”,O“117”,X“FFE0”;
1.2 文法规则
文法格式
关键字、标识符:不区分大小写; 注释:‘--’,且只在该文本行有效; 分隔:‘;’为行分隔,VHDL的语句行可写在不同文本行
[端口说明;]
end [设计实体名] ;
1.1 VHDL程序构件
1.1 VHDL程序构件 IN
从外部输入至实体; 单向端口;
entity
1.1 VHDL程序构件 OUT
从实体输出至外部; 单向端口;
entity
1.1 VHDL程序构件 INOUT
可以从外部输入至实体; 也可以从实体输出至外部; 双向端口;
变量:
用于进程、子程序等模块的内部; 局部性数据对象;
1.3 数据对象及类型
例子:信号与变量
p2: process(a) variable tmp: integer:=1; begin tmp:=tmp*2; c2<=a+tmp; end process; end;
entity exmp1 is port(a: in Integer; b: out Integer); end; architecture behv of exmp1 is signal c1,c2: Integer; begin b<=c1+c2; p1: process(a) variable tmp: integer:=0; begin tmp:=tmp+1; c1<=a+tmp; end process;
《VHDL语言程序设计》课程教学大纲

《VHDL语言程序设计》课程教学大纲课程简介课程简介:本课程为软件工程专业嵌入式专业方向的专业课,是开发基于FPGA/CPLD嵌入式系统的必备基础。
主要内容包括FPGA/CPLD目标器件的结构和工作原理、EDA技术和工作流程、VHDL基础知识、VHDL实用方法和设计深入、原理图输入法、LPM宏功能模块实用方法、状态机设计以及EDA优化设计。
目的是为后续课程的学习和嵌入式系统的设计作必须的基础准备。
课程大纲一、课程的性质与任务:本课程是软件工程专业的专业方向课程。
教学任务主要包括使学生了解EDA技术的工作流程,正确使用开发平台,掌握以VHDL为代表的硬件描述语言的基本知识、编程实用方法和工程设计方法,掌握原理图设计法、状态机设计法,能够正确使用IP Core和LPM等宏功能模块。
本课程是软件工程专业嵌入式专业方向的第一门专业方向课,是后续课程的必备基础,具有较重要的地位。
二、课程的目的与基本要求:本课程涉及到的学科基础知识面广,要求软硬件兼备,需要较好的学科基础。
通过本课程的学习,最终达到能够设计基于FPGA/CPLD的ASIC,并能进行EDA优化的目的。
三、面向专业:软件工程四、先修课程:《计算系统基础》五、本课程与其它课程的联系:本课程的先行课程是计算系统基础。
服务的主要后续课程包括基于FPGA的嵌入式软件开发、基于ARM的嵌入式软件开发等。
六、教学内容安排、要求、学时分配及作业:第一章概述(2学时)1.1 EDA技术及其发展(C)1.2 硬件描述语言硬件描述语言种类、自顶向下设计方法、EDA工程设计流程。
(A)1.3 面向FPGA/CPLD的开发流程设计输入、分析综合、布局布线、仿真、下载和硬件测试。
(A)1.4 IP Core 及EDA技术发展趋势。
(C)第二章 FPGA硬件特性与编程技术(8学时)2.1 PLD发展历程及其分类(c)2.2 低密度PLD工作原理PROM、PLA、PAL、GAL。
《VHDL语言程序设计》课程教学大纲

GDOU-B-11-213《VHDL语言程序设计》课程教学大纲课程简介课程简介:本课程为软件工程专业嵌入式专业方向的专业课,是开发基于FPGA/CPLD嵌入式系统的必备基础。
主要内容包括FPGA/CPLD目标器件的结构和工作原理、EDA技术和工作流程、VHDL基础知识、VHDL实用方法和设计深入、原理图输入法、LPM宏功能模块实用方法、状态机设计以及EDA优化设计。
目的是为后续课程的学习和嵌入式系统的设计作必须的基础准备。
课程大纲一、课程的性质与任务:本课程是软件工程专业的专业方向课程。
教学任务主要包括使学生了解EDA技术的工作流程,正确使用开发平台,掌握以VHDL为代表的硬件描述语言的基本知识、编程实用方法和工程设计方法,掌握原理图设计法、状态机设计法,能够正确使用IP Core和LPM等宏功能模块。
本课程是软件工程专业嵌入式专业方向的第一门专业方向课,是后续课程的必备基础,具有较重要的地位。
二、课程的目的与基本要求:本课程涉及到的学科基础知识面广,要求软硬件兼备,需要较好的学科基础。
通过本课程的学习,最终达到能够设计基于FPGA/CPLD的ASIC,并能进行EDA优化的目的。
三、面向专业:软件工程四、先修课程:《计算系统基础》五、本课程与其它课程的联系:本课程的先行课程是计算系统基础。
服务的主要后续课程包括基于FPGA的嵌入式软件开发、基于ARM的嵌入式软件开发等。
六、教学内容安排、要求、学时分配及作业:第一章概述(2学时)1.1 EDA技术及其发展(C)1.2 硬件描述语言硬件描述语言种类、自顶向下设计方法、EDA工程设计流程。
(A)1.3 面向FPGA/CPLD的开发流程设计输入、分析综合、布局布线、仿真、下载和硬件测试。
(A)1.4 IP Core 及EDA技术发展趋势。
(C)第二章 FPGA硬件特性与编程技术(8学时)2.1 PLD发展历程及其分类(c)2.2 低密度PLD工作原理PROM、PLA、PAL、GAL。
第4章 VHDL设计初步

结构体有三种描述方式 *行为描述(behavioral):
高层次的功能描述,不必考虑在电路中到底是怎样实现的。
*数据流描述(dataflow):
描述输入信号经过怎样的变换得到输出信号
*结构化描述(structural):
【例4-2】-1 2选1多路选择器 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;
功能:s = 0
s=1
y=a y =b
ARCHITECTURE one OF mux21a IS BEGIN 并行语句 y <= (a AND (NOT s)) OR (b AND s) ; END ARCHITECTURE one;
端口模式:
IN、OUT、INOUT、BUFFER描述端口数据的流向特征。
数据类型: 数据对象承载数据的类别:BIT的定义值为逻辑'1'和'0'。
信号赋值符: “<=”,用于信号数据的传输,仿真传输延时最短为一个。
条件比较符:
“=”,在条件语句表式中用于比较待测数据的关系。
延时: 模拟器最小分辨时间,或称延时 。
port:
*在层次化设计时,Port为模块之间的接口 *在芯片级,则代表具体芯片的管脚
数据通道输入端口
数据输出端
通道选择控制信号端
图4-1 mux21a实体
(2) 以关键词ARCHITECTURE引导,END ARCHITECTURE … 结尾的语句部分,称为结构体。 功能:通过若干顺序语句和并行语句来描述设计实体的逻辑功能(行为描述)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
'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 (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",
进程,函数说明 定义变量
VARIABLE E,F: STD_ULOGIC;
2020/7/3
设计芯片的数据信息流动层次
山东大学 曾繁泰 6
4.2.1 变量赋值语句
变量赋值语句用于对已经声明过的变量进行赋值或更新, 是无延迟的数据传递语句。变量赋值语句是顺序执行的语 句,可以用于进程,函数和过程语句中。变量赋值语句有3 种:基本变量赋值语句、条件变量赋值语句和选择变量赋 值语句。
IF语句可用于选择器、比较器、编码器、译码器和状态机设计。 IF语句根据指定条件来确定语句执行顺序,共有一下3种类型。 1.用于门闩控制的IF语句 2. 用于二选一控制的IF语句 3. 用于多选控制的IF语句
2020/7/3
山东大学 曾繁泰
18
1.用于门闩控制的IF语句
这种类型的IF语句一般书写格式为: IF 条件 THEN <顺序处理语句> END IF; 当程序执行到该IF语句时,就要判断IF语句所指定的条件
'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语句
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语句
表达式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
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;
--在结构体部分定义信号,
BEGIN
p1 :PROCESS(IND1)
VARIABLE OUT_Q: STD_LOGIC; -- 在进程、函数或过程语句中定义变量
BEGIN OUT_Q := ind1 xor ind2; -- 变量赋值语句 q <= OUT_Q;
END PROCESS p1;
用于多选择控制的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语句实现的优先级编码器
5
4.2 变量赋值语句与信号代入语句
VHDL程序在传递 数据、信息时,需 要对变量、信号等 对象进行赋值。变 量、信号和端口分 别属于VHDL程序 中不同的部分,数 据、信息传递的层 次如图4.2所示。
实体说明 定义端口 PORT(A,B:INOUT STD_LOGIC;)
结构体说明 定义信号
SIGNAL C, D: BIT;
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
时,执行顺序语句乙。用条件选择两条不同的程序执行路 径。
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
通常,顺序语句(Sequential Statement)具有如下特征:
(1)顺序语句只能出现在进程 、过程、函数和模块中。
(2)顺序语句适于描述的系统 行为有:时序流、控制流、 条件分支和迭代算法等。
(3)顺序语句的操作有算术、 逻辑运算、信号、变量的赋 值、函数调用等。
2020/7/3
山东大学 曾繁泰
4.2.2 信号代入语句
信号代入语句是VHDL语言的基本语句之一。与变量赋值 语句相似,信号代入语句也分3种类型:
1. 基本信号代入语句 2. 条件信号代入语句 3. 选择信号代入语句
2020/7/3
山东大学 曾繁泰
11
1. 基本信号代入语句
基本信号代入语句的书写格式为:
信号名 <= [transport | [reject 时间表达式] inertial] 逻辑表达式;
variable assignment statement signal assignment statement procedure call过程调用语句 …
-- 变量赋值语句 -- 信号赋值语句
2020/7/3
山东大学 曾繁泰
4
VHDL语言的串行语句类型
wait 语句 if 语句 case 语句 loop 语句 next语句 exit语句 report语句 return 语句 Assert断言语句
VHDL程序设计教程(第4版)
第4章 VHDL 语法基础
主讲人 :曾繁泰 zft@
VHDL语言的串行语句类型
VHDL语句是并发语言,大部分语句是并发执行的。但是 在进程、过程、块语句和函数中,还有许多顺序语句。顺 序语句完全按照程序中书写的顺序执行,顺序语句有两类 :一类是真正的顺序语句,一类既可以做顺序语句又可以 做并发语句,是具有双重特性的语句。这类语句放在进程 、块、子程序之外是并发语句,放在过程、块、子程序之 内是顺序语句。
END IF;
END PROCESS P1;
END structure;
--条件分支语句 --等待clk活动clk’是clk的次态, --且clk=1时条件成立.
2020/7/3
山东大学 曾繁泰
20
2.用于二选一控制的IF语句
这种类型的语句书写格式为: IF 条件 THEN <顺序处理语句甲>; ELSE <顺序处理语句乙>; END IF; 当IF指定的条件满足时,执行顺序语句甲;当条件不成立
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;
2020/7/3
山东大学 曾繁泰
9
3. 选择变量赋值语句
选择变量赋值语句的格式为:
WITH 表达式 SELECT
变量名:=
表达式1 WHEN 选择条件1 ,
表达式2 WHEN 选择条件2 ,
表达式3 WHEN 选择条件3 ,
表达式n WHEN 选择条件n ;
2020/7/3
山东大学 曾繁泰
10
表达式2 WHEN 选择条件2,
表达式3 WHEN 选择条件3,
…
表达式n WHEN 选择条件n;
2020/7/3
山东大学 曾繁泰
15
[例4-3]选择信号代入语句设计的xor_gate