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 … 结尾的语句部分,称为结构体。 功能:通过若干顺序语句和并行语句来描述设计实体的逻辑功能(行为描述)
第4章 VHDL语言基础
设计实体
结构体1
结构体2
结构体3
。 。 。
结构体n
FPGA-CPLD原理及应用
结构体的语法
第4章 VHDL语言基础
architecture 结构体名称 of 实体名称 is [说明语句] ;
begin [(功能描述)语句];
end [architecture] 结构体名称;
注:同一实体的结构体不能同名。定义语句中的常 数、信号不能与实体中的端口同名。
equal: out std_logic ); end eqcomp4;
A[3..0] B[3..0]
equal
FPGA-CPLD原理及应用
端口声明
第4章 VHDL语言基础
确定输入、输出端口的数目和类型。
Port (端口名称{,端口名称}:端口模式
… 端口名称{,端口名称}:端口模式 );
数据类型; 数据类型
FPGA-CPLD原理及应用
VHDL组成
第4章 VHDL语言基础
库 包 实体
结构体
eqcomp4.vhd
--eqcomp4 is a four bit equality comparator
Library IEEE; use IEEE.std_logic_1164.all;
entity eqcomp4 is port(a, b:in std_logic_vector(3 downto 0);
FPGA-CPLD原理及应用
第4章 VHDL语言基础
计数器等效描述(out与buffer的区别)
FPGA-CPLD原理及应用
3、数据类型
第4章 VHDL语言基础
指端口上流动的数据表达格式,为预先定好的数据类型,如: bit、bit_vector、integer、std_logic、std_logic_vector 等。 例: entity m81 is port (a: in std_logic_vector(7 downto 0); sel: in std_logic_vector(2 downto 0); b:out bit ); end entity m81;
(完整word版)vhdl基本语法
VHDL 基础语法篇——VHDLVHDL硬件描述语言1.1 VHDL概述1.1.1 VHDL的特点VHDL语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,由于VHDL语言来源于C、Fortran等计算机高级语言,在VHDL语言中保留了部分高级语言的原语句,如if语句、子程序和函数等,便于阅读和应用。
具体特点如下:1. 支持从系统级到门级电路的描述,既支持自底向上(bottom-up)的设计也支持从顶向下(top-down)的设计,同时也支持结构、行为和数据流三种形式的混合描述。
2. VHDL的设计单元的基本组成部分是实体(entity)和结构体(architecture),实体包含设计系统单元的输入和输出端口信息,结构体描述设计单元的组成和行为,便于各模块之间数据传送。
利用单元(componet)、块(block)、过程(procure)和函数(function)等语句,用结构化层次化的描述方法,使复杂电路的设计更加简便。
采用包的概念,便于标准设计文档资料的保存和广泛使用。
3. VHDL语言有常数、信号和变量三种数据对象,每一个数据对象都要指定数据类型,VHDL的数据类型丰富,有数值数据类型和逻辑数据类型,有位型和位向量型。
既支持预定义的数据类型,又支持自定义的数据类型,其定义的数据类型具有明确的物理意义,VHDL是强类型语言。
4. 数字系统有组合电路和时序电路,时序电路又分为同步和异步,电路的动作行为有并行和串行动作,VHDL语言常用语句分为并行语句和顺序语句,完全能够描述复杂的电路结构和行为状态。
1.1.2 VHDL语言的基本结构VHDL语言是数字电路的硬件描述语言,在语句结构上吸取了Fortran和C等计算机高级语言的语句,如IF语句、循环语句、函数和子程序等,只要具备高级语言的编程技能和数字逻辑电路的设计基础,就可以在较短的时间内学会VHDL语言。
但是VHDL毕竟是一种描述数字电路的工业标准语言,该种语言的标识符号、数据类型、数据对象以及描述各种电路的语句形式和程序结构等方面具有特殊的规定,如果一开始就介绍它的语法规定,会使初学者感到枯燥无味,不得要领。
EDA第4章 VHDL基础文字规则与操作符(4.3-4.4)
第4章
VHDL基础
第4章
VHDL基础
变量数值的改变是通过变量赋值来实现的,其赋 值语句的语法格式如下: 目标变量名:=表达式; 如: VARIABLE A,B:BIT_VECTOR(0 TO 7); VARIABLE X,Y: REAL; X:=1.2; Y:=100.1+X; A:=“10101011”; A(7):=‘0’;
第4章
VHDL基础
• 常量、信号、变量的使用比较
• (1) 从硬件电路系统来看,常量相当于电路中的恒定 电平,如GND或VCC接口,而变量和信号则相当于组合 电路系统中门与门间的连接及其连线上的信号值。 • (2) 从行为仿真和VHDL语句功能上看,信号和变量的 区别主要表现在接受和保持信息的方式、信息保持与 传递的区域大小上。 • (3) 从综合后所对应的硬件电路结构来看,信号一般 将对应更多的硬件结构,但在许多情况下,信号和变 量并没有什么区别。 • (4) 虽然VHDL仿真器允许变量和信号设置初始值,但 在实际应用中,VHDL综合器并不会把这些信息综合进 去。
第4章
VHDL基础
5.段名
对应数组中某一段元素,是多个下标名的组合。表达形式: 标识符(表达式 方向 表达式) 方向----To 由低到高 DOWNTO 由高到低 如:signal a, z: bit_vector(0 to 7);-- 8位位矢量 z(0 to 3)<=a(4 to 7); --以段的方式进行赋值 z(4 to 7)<=a(0 to 3); --以段的方式进行赋值
第4讲-VHDL编程基础课件
第4讲 VHDL编程基础(1)
相应地,当我们使用VHDL语言设计一种硬件电路 时,我们至少需要描述三个方面旳信息:① 设计是在 什么规范范围内设计旳,亦即此设计符合某个设计规 范,能得到大家旳认可,这就是库、程序包使用阐明; ② 所设计旳硬件电路与外界旳接口信号,这就是设计 实体旳阐明;③ 所设计旳硬件电路其内部各构成部分 旳逻辑关系以及整个系统旳逻辑功能,这就是该设计 实体相应旳构造体阐明。
1.实体语句构造 实体阐明单元旳常用语句构造如下: ENTITY 实体名 IS [GENERIC(类属表);] [PORT(端口表);] END [ENTITY] [实体名];
第4讲 VHDL编程基础(1)
2.类属(GENERIC)阐明语句 类属(GENERIC)参量是一种端口界面常数,常以一 种阐明旳形式放在实体或块构造体前旳阐明部分。 内部电路构造和规模。 类属阐明旳一般书写格式如下: GENERIC([常数名:数据类型[:设定值] {;常数名:数据类型[:=设定值 ]});
第4讲 VHDL编程基础(1)
(3) 综合过程。任何一种语言源程序,最终都要转 换成门电路级才干被布线器或适配器所接受。
(4) 对综合器旳要求。VHDL描述语言层次较高, 不易控制底层电路,因而对综合器旳性能要求较高; Verilog和ABEL对综合器旳性能要求较低。
(5) 支持旳EDA工具。支持VHDL和Verilog旳EDA 工具诸多,但支持ABEL旳综合器仅仅Dataio一家。
PORT(A,B:IN STD_LOGIC; Y:OUT STD_LOGIC);
END COMPONENT NAND2; --元件连接阐明
第4讲 VHDL编程基础(1)
BEGIN U1:NAND2 PORT MAP(A=>A1,B=>B1,Y=>Y1); U2:NAND2 PORT MAP(A=>A2,B=>B2,Y=>Y2); U3:NAND2 PORT MAP(A3, B3, Y3); U4:NAND2 PORT MAP(A4, B4, Y4); END ARCHITECTURE ART2;
VHDL详细语法教程
VHDL详细语法教程VHDL(Very High Speed Integrated Circuit HardwareDescription Language)是一种硬件描述语言,用于对数字电路进行描述、建模和仿真。
它是一种用于描述数字系统结构和行为的语言,广泛用于FPGA(Field Programmable Gate Array)和ASIC(ApplicationSpecific Integrated Circuit)设计中。
VHDL语言具有丰富的语法结构,可以描述数字系统的结构和行为,并可以进行仿真和综合。
下面是VHDL语言的详细语法教程:1. 实体声明(Entity Declaration):VHDL代码的第一部分是实体声明,用于定义设计的接口和名称。
实体声明是设计的顶级结构,它包含输入输出端口的定义。
语法格式如下:```vhdlentity entity_name isportport_name : in/out type;port_name : in/out type;...end entity_name;```其中,entity_name为实体名称,port_name为端口名称,type为端口类型,in表示输入端口,out表示输出端口。
2. 结构体声明(Architecture declaration):在实体声明后,需要定义该实体的结构和行为。
这一部分被称为结构体声明。
语法格式如下:```vhdlarchitecture architecture_name of entity_name issignal signal_name : type;...begin...end architecture_name;```3. 信号声明(Signal declaration):信号用于在VHDL代码中传输数据。
通过信号声明,可以定义存储或传输数据的变量。
信号声明需要在结构体声明的前面进行。
语法格式如下:```vhdlsignal signal_name : type;```其中,signal_name为信号名称,type为信号类型。
VHDL第4章基本数据类型与命令语句PPT教学课件
‘0’; 波形n-1 WHEN 条件n-1 ELSE
END priority; 波形n ;
2020/12/11
29
A并R行CH语IT句ECTURE1.p信r号io赋rit值y 语O句F 。example IS
(B3)EG选I择N 型 格式:WWIITTHH c表S达EL式ECSTELECT
2020/12/11
7
ENTITY bcdadder IS
port(op1,op2:IN integer range 0 to 9;
result:out integer range 0 to 31
);
END bcdadder;
ARCHITECTURE behavior OF bcdadder IS
BEGIN C<=A(2 DOWNTO 1); B<=A(3) & D & ‘1’;
END a;
2020/12/11
16
4.3 基本结构
组成
库
2020/12/11
17
程序包
--程序包说明部分 PACKAGE 程序包名 IS --说明部分 END<PAC-KA-G程E序><包程包序体包说名明> 部分
CONSTANT adjustnum:integer:=6;
signal binadd:integer range 0 to 18;
BEGIN
binadd<=op1+op2;
PROCESS(binadd)
variable tmp:integer:=0;
BEGIN
IF binadd>9 THEN
tmp:=adjustnum;
- 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