vhdl基本语法(简略共34页)
VHDL基本语句

例
ARCHITECTURE example OF mux4 IS BEGIN PROCESS (sel) 注 BEGIN ●CASE中的选择值必须在表达式的取值范围内; CASE sel IS WHEN 0=> q <= d0 ; ●CASE语句是无序的,所有表达式值都是并行 WHEN 1=> q <= d1 ; 处理;而IF语句是有序的,最起始、最优先 WHEN 2=> q<= d3 ; WHEN 3=> q<= d4 ; 的先处理; WHEN others => NULL; ●可以有很多分支,但OTHERS分支只能有一个, END CASE; 且只能位于最后;用来使所有选择值能涵盖表 END PROCESS; END example; 达式的所有取值,以免插入不必要的锁存器
3、用于多选控制的IF语句:
格式 IF 条件1 THEN
<顺序处理语句1>;
ELSIF 条件2 THEN <顺序处理语句2>; : ELSIF 条件n-1 THEN <顺序处理语句n-1>; ELSE <顺序处理语句n>; END IF;
P1: PROCESS (clk) BEGIN
IF (clk‘ event and clk=‗1‘ ) THEN
顺序语句
赋值语句
VHDL设计实体内的数据传递以及对端口界面外部数据的读写 都必须通过赋值语句的运行来实现。 功能是将一个值或表达式的运算结果传递给某一数据对象。 赋值语句有两种: 信号赋值语句和变量赋值语句 区别
第10章_VHDL基本语句PPT课件

注意:赋值语句和赋值源的数据类型必须严格一致
2021/2/10
5
1. 信号赋值语句 ❖格式: 目的信号量<=信号量表达式; ❖两边信号量的类型和位长度应该是一致的。
2. 变量赋值语句 ❖格式: 目的变量 :=表达式; ❖两者类型必须相同,目的变量的类型、范围、 初值应事先给出。
2021/2/10
2021/2/10
12
10.1.4 LOOP语句
❖ LOOP语句的格式一般有三种: 1. 单个LOOP语句
❖ 格式: [标号]:LOOP 顺序处理语句; END LOOP [标号];
❖ 例1 ……
L2: LOOP a:=a+1; EXIT L2 WHEN a>10;
END LOOP L2; 说明:当a大于10时结束循环执行a:=a+1 。
❖ 例:CASE sel IS WHEN 0=> q <=i0 ; WHEN 1=> q <=i1 ; WHEN 2=> q <=i2 ; WHEN 3=> q <=i3 ; END CASE;
2021/2/10
9
注意:
❖ 条件句的选择值必须在表达式的取值范围之内。
❖ 除非所有条件句中的选择值能完整覆盖CASE语句中表达式 的取值,否则最末一个条件句中的选择必须用“OTHERS” 表示。
第10章 VHDL基本语句
✓顺序语句和并行语句是程序设计中两类基本描 述语句。 ✓在逻辑系统设计中,这些语句能从多个侧面完 整描述数字系统的硬件结构和基本逻辑功能。
10.1 顺序语句
顺序语句的特点:
顺序语句的执行顺序(指仿真执行),与它们的书写顺序基 本一致;
《VHDL语法基础》PPT课件

(5) 在结构体ART3中,COMPONENT→END COMPONENT 语句结构对所要调用的或门和半加器两元件作了声明 (COMPONENT DECLARATION),并由SIGNAL语句定义了三 个信号D、E和F,作为中间信号转存点,以利于几个器件间的信 号连接。接下去的“PORT MAP( )”语句称为元件例化语句 (COMPONENT INSTANTIATION)。所谓例化,在电路板上, 相当于往上装配元器件;在逻辑原理图上,相当于从元件库中取 了一个元件符号放在电路原理图上,并对此符号的各引脚进行连 线。例化也可理解为元件映射或元件连接,MAP是映射的意思。 例如,语句“U2:H_ADDER PORT MAP(A=>E,B=>CIN, CO=>F,SO=>SUM)”表示将实体H_ADDER描述的元件U2的引 脚信号A、B、CO和SO分别连向外部信号E、CIN、F和SUM。
(2) VHDL具有丰富的仿真语句和库函数,使得在任何大系 统的设计早期,就能查验设计系统的功能可行性,随时可对系 统进行仿真模拟,使设计者对整个工程的结构和功能可行性做 出判断。
(3) VHDL语句的行为描述能力和程序结构,决定了它具 有支持大规模设计的分解和已有设计的再利用功能。符合市场 需求的大规模系统高效、高速的完成必须有多人甚至多个开发 组共同并行工作才能实现,VHDL中设计实体的概念、程序包 的概念、设计库的概念为设计的分解和并行工作提供了有利的 支持。
END ENTITY OR2; --实体OR2的结构体ART1的说明
ARCHITECTURE ART1 OF OR2 IS
BEGIN C<=A OR B; END ARCHITECTURE ART1;
2) 半加器的逻辑描述 -- IEEE库的使用说明
VHDL语言的基本语法解析

2、变量( Variable )
变量是一个局部变量,它只能在进程语句、函数语句和过程 语句结构中使用,用作局部数据存储。变量常用在实现某种算 法的赋值语句中。
一般格式:
VARIABLE 变量名:数据类型 约束条件:= 表达式;
例: VARIABLE x, y: INTEGER;
--定义x,y为整数变量
SIGNAL Y ,Z :BIT;
Y<=A(M) ;
--M是不可计算型下标表示
Z<=B(3) ;
--3是可计算型下标表示
C (0 TO 3)<=A (4 TO 7) ; -以段的方式进行赋值
C (4 TO 7)<=A (0 TO 3) ; -以段的方式进行赋值
二、VHDL语言的数据对象
1、常数( Constant )
常量的使用范围取决于它被定义的位置 :
(1)程序包中定义的常量具有最大的全局化特性,可以用在调 用此程序包的所有设计实体中;
(2)设计实体中定义的常量,其有效范围为这个实体定义的所 有的结构体;
(3)设计实体中某一结构体中定义的常量只能用于此结构体;
(4)结构体中某一单元定义的常量,如一个进程中,这个常量 只能用在这一进程中。
5,678,0,156E2(=15600) , 45_234_287(=45234287)
(2) 实数文字: 实数文字也都是十进制的数,但必 须带有小数点,如: 188.993, 88_670_551.453_909(=88670551.453909) ,
1.0,44.99E-2(=0.4499) ,1.335,0.0
?16#F.01#E+2ቤተ መጻሕፍቲ ባይዱ--( 十六进制数表示,等于 3841.00)
VHDL基本语法PPT课件

OR 、 AND 、 NAND 、 NOR 和 XOR 。常用的是前 3 种。
参加逻辑运算的 变量或者信号必 须有相同的数据类型和数据长度。逻 辑运算符适用的数据类型为
std_ logic
第1页/共59页
例:
SIGANL a,b,e,f:STD_LOGIC; SIGANL c,d: STD_LOGIC_VECTOR(7 DOWNTO 0);
a AND b; c AND d; a AND c;
a OR b; NOT a --正确
c XOR d;
NOT C --正确
--错误 , 因为数据类型不同
第2页/共59页
• 除了 not 运算符的优先级最高外 , 其余逻辑运算符的优先级相同 , 运算从左到 右展开。 因此要注意加括号 , 如 : (a AND b) OR (e AND f) 不能写成 a AND b OR e AND f
信号映射表中的各项用的书写顺序必须和por句映射的元件的端口名书写顺序一致种映射方式第52页共59页设计一个与或门实现的功能为andorresulta1anda2a4a1a2a3a4andorresultop1op2op1op2andresultorresult第53页共59页低层的设计实体andgate它将两个输入信号op1op2进行出信号andresult低层的设计实体orgate它将两个输入信号op1op2进行出信号orresult参见程序例8第54页共59页顶层设计实体andorgate它把两个低层设计实体当作元件引用
VHDL的层次结构设计
第39页/共59页
层次结构设计是设计较大规模硬件 的必要手段 , 也是 VHDL 的重要优 点。
VHDL基本语句用法 ppt课件

15
10.2.1 并行信号赋值语句
1. 简单信号赋值语句
格式:赋值目标 = 表达式
例: ARCHITECTURE curt OF bc1 IS SIGNAL s1, e, f, g, h : STD_LOGIC ; BEGIN output1 <= a AND b ; output2 <= c + d ; g <= e OR f ; h <= e XOR f ; s1 <= g ;
10.2.4 元件例化语句
1)格式:
COMPONENT 元件名 IS GENERIC (类属表); -- 元件定义(说明)语句
PORT (端口名表);
END COMPONENT 文件名;
例化名 :元件名 PORT MAP( [端口名 =>] 连接端口名,...) ;
2)说明:
- - - - 元件例化(调用)语句。
c;
END;
例1的逻辑电路图见 图1
2021/3/26
VHDL基本语句用法 ppt课件
18
3. 选择信号赋值语句
1)格式:
WITH 选择表达式 SELECT
赋值目标信号 <=表达式1 WHEN 选择值1 表达式2 WHEN 选择值2 ... 表达式n WHEN 选择值n;
2)举例:[例2]
[例3]
4)CASE 语句举例
2021/3/26
VHDL基本语句用法 ppt课件
4
例【 10.1】
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux41 IS
PORT (s4,s3, s2,s1 : IN STD_LOGIC;
第10章VHDL基本语句

END LOOP L2; ...
11
11
10.1.4 LOOP语句
(2) FOR_LOOP语句,语法格式如下: [LOOP标号:] FOR 循环变量 IN 循环次数范围 顺序语句
LOOP
END LOOP [LOOP标号];
SIGNAL tmp :STD_LOGIC ;
BEGIN
奇校验就是看2进制数旳1旳个数为奇数
PROCESS(a)
就在校验位填0 偶数就填1 使1旳个数
BEGIN
变成奇数个. 偶校验相反 把1旳个数变
tmp <='0';
成偶数.
FOR n IN 0 TO 7 LOOP 然后传送数据,接受后在做相应旳奇偶
FOR后旳”循环变量”是一种临时变量,属LOOP语句旳局 部变量,不必事先定义. 这个变量只能作为赋值源,不能被赋值,它 由LOOP语句自动定义. 使用时应该注意,在LOOP语句范围内不 要再使用其他与此循环变量同名旳标识符.
“循环次数范围”要求LOOP语句中旳顺序语句被执行次数. 循环变量从范围初值开始,每执行完一次顺序增1,直至最大值.
第 10 章 VHDL基本语句
1
1
10.1 顺序语句
VHDL有6种基本顺序语句:赋值语句、流程控制语句、等待 语句、子程序调用语句、返回语句、空操作语句.
10.1.1 赋值语句
信号赋值语句
10.1.2 IF语句
10.1.3 CASE语句
变量赋值语句
多条件选择
值体现式旳 4种形式
单个一般数值,如6。
数值选择范围,如(2 TO 4)。
VHDL语法简单总结

VHDL语法简单总结一个VHDL程序代码包含实体(entity)、结构体(architecture)、配置(configuration)、程序包(package)、库(library)等。
一、数据类型1.用户自定义数据类型使用关键字TYPE,例如:TYPE my_integer IS RANGE -32 TO 32;–用户自定义的整数类型的子集TYPE student_grade IS RANGE 0 TO 100;–用户自定义的自然数类型的子集TYPE state IS (idle, forward, backward, stop);–枚举数据类型,常用于有限状态机的状态定义一般来说,枚举类型的数据自动按顺序依次编码。
2.子类型在原有已定义数据类型上加一些约束条件,可以定义该数据类型的子类型。
VHDL不允许不同类型的数据直接进行操作运算,而某个数据类型的子类型则可以和原有类型数据直接进行操作运算。
子类型定义使用SUBTYPE关键字。
3.数组(ARRAY)ARRAY是将相同数据类型的数据集合在一起形成的一种新的数据类型。
TYPE type_name IS ARRAY (specification) OF data_type;–定义新的数组类型语法结构SIGNAL signal_name: type_name [:= initial_value];–使用新的数组类型对SIGNAL,CONSTANT, VARIABLE进行声明例如:TYPE delay_lines IS ARRAY (L-2 DOWNTO 0) OF SIGNED (W_IN-1 DOWNTO 0);–滤波器输入延迟链类型定义TYPE coeffs IS ARRAY (L-1 DOWNTO 0) OF SIGNED (W_COEF-1 DOWNTO 0);–滤波器系数类型定义SIGNAL delay_regs: delay_lines; –信号延迟寄存器声明CONSTANT coef: coeffs := ( ); –常量系数声明并赋初值4.端口数组在定义电路的输入/输出端口时,有时需把端口定义为矢量阵列,而在ENTITY中不允许使用TYPE进行类型定义,所以必须在包集(PACKAGE)中根据端口的具体信号特征建立用户自定义的数据类型,该数据类型可以供包括ENTITY在内的整个设计使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VHDL硬件描述语言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毕竟是一种描述数字电路的工业标准语言,该种语言的标识符号、数据类型、数据对象以及描述各种电路的语句形式和程序结构等方面具有特殊的规定,如果一开始就介绍它的语法规定,会使初学者感到枯燥无味,不得要领。
较好的办法是选取几个具有代表性的VHDL程序实例,先介绍整体的程序结构,再逐步介绍程序中的语法概念。
一个VHDL语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个CPU。
一般情况下,一个完整的VHDL语言程序至少要包含程序包、实体和结构体三个部分。
实体给出电路单元的外部输入输出接口信号和引脚信息,结构体给出了电路单元的内部结构和信号的行为特点, 程序包定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。
一位全加器的逻辑表达式是:S=A⊕B⊕CiCo=AB+ACi+BCi全加器的VHDL程序的文件名称是fulladder.VHD,其中VHD是VHDL程序的文件扩展名,程序如下:LIBRARY IEEE; --IEEE标准库USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fulladder IS -- fulladder是实体名称PORT(A, B, Ci : IN STD_LOGIC; --定义输入/输出信号Co, S : OUT STD_LOGIC);END fulladder;ARCHITECTURE addstr OF fulladder IS --addstr是结构体名BEGINS <= A XOR B XOR Ci;Co <= (A AND B) OR (A AND Ci) OR (B AND Ci);END addstr;从这个例子中可以看出,一段完整的VHDL代码主要由以下几部分组成:第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为IEEE的程序包库中。
第二部分是程序的实体,定义电路单元的输入/输出引脚信号。
程序的实体名称fulladder是任意取的,但是必须与VHDL程序的文件名称相同。
实体的标识符是ENTITY,实体以ENTITY开头,以END结束。
其中,定义A、B、Ci是输入信号引脚,定义Co和S是输出信号引脚。
第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。
结构体有三种描述方式,分别是行为(BEHA VIOR)描述、数据流(DATAFLOW)描述方式和结构(STRUCTURE)描述方式,其中数据流(DA TAFLOW)描述方式又称为寄存器(RTL)描述方式,例中结构体的描述方式属于数据流描述方式。
结构体以标识符ARCHITECTURE开头,以END结尾。
结构体的名称addstr是任意取的。
小提示:VHDL每条语句是以分号“;”作为结束符的,并且VHDL对空格是不敏感的,所以符合之间空格的数目是可以自己设定的。
可以按自己的习惯任意添加,增强代码可读性。
1.1.3 VHDL语言的实体(ENTITY)说明语句实体是VHDL程序设计中最基本的组成部分,在实体中定义了该设计芯片中所需要的输入/输出信号引脚。
端口信号名称表示芯片的输入/输出信号的引脚名,这种端口信号通常被称为外部信号,信号的输入/输出状态被称为端口模式,在实体中还定义信号的数据类型。
实体说明语句的格式为:ENTITY 实体名称ISGENERIC(常数名称1:类型[:=缺省值];常数名称2:类型[:=缺省值];…常数名称N:类型[:=缺省值];);PORT(端口信号名称1:输入/输出状态数据类型;端口信号名称2:输入/输出状态数据类型;…端口信号名称N:输入/输出状态数据类型);END 实体名称;小提示:VHDL语言具有87标准与93标准两种格式,以上为VHDL的87标准,对于93标准要使用END ENTITY 实体名称;结束实体。
注意为了保证代码的可综合性与通用性,最好采用87标准的VHDL格式,有些EDA工具不一定支持93标准的VHDL语言格式。
(Quartus II支持VHDL93、87标准)类属GENERIC常用来定义实体端口大小,数据宽度,元件例化数目等。
一般在简单的设计中不常用。
例1-1-2一个同步十六进制加法计数器,带有计数控制、异步清零、和进位输出等功能。
电路有三个输入端和五个输出端,分别是时钟脉冲输入端CLK,计数器状态控制端EN,异步清零控制端Rd,四位计数输出端Q0, Q1, Q2, Q3和一个进位输出端Co。
当计数器输出0000~1110时,Co=0,只有当计数器输出1111时,Co=1。
该设计的实体部分如下:ENTITY cntm16 ISPORT(EN : IN STD_LOGIC;Rd : IN STD_LOGIC;CLK : IN STD_LOGIC;Co : OUT STD_LOGIC;Q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END cntm16;1. 实体名称表示所设计电路的电路名称,必须与VHDL文件名相同,实体名称是“cntm16”,所存的VHDL文件名必须是“cntm16.VHD”。
2. 端口信号名称表示芯片的输入/输出信号的引脚名,这种端口信号通常被称为外部信号,端口信号名称可以表示一个信号,也可以表示一组信号(BUS),由数据类型定义,如EN,Rd,CLK,Co分别表示计数允许信号,异步清零信号,时钟输入信号和进位输出信号,Q是一组输出信号,用来表示四位同步二进制计数器的四位计数输出信号。
3. 端口信号输入/输出状态有以下几种状态:IN 信号进入电路单元。
OUT 信号从电路单元输出。
INOUT 信号是双向的,既可以进入电路单元也可以从电路单元输出。
BUFFER 信号从电路单元输出,同时在电路单元内部可以使用该输出信号。
小提示:O UT 与BUFFER信号的区别就在于信号是否往内部有反馈,将输出端口定义为BUFFER型,可以省去一个用于中间运算的一个临时信号,但是并不推荐这么做。
4. 端口数据类型(TYPE)定义端口信号的数据类型,在VHDL中,常用的端口信号数据类型如下:(1)位(BIT)型:表示一位信号的值,可以取值‘0’和‘1’,放在单引号里面表示,如X < =‘1’,Y <=‘0’。
(2)位向量(BIT_VECTOR)型:表示一组位型信号值,在使用时必须标明位向量的宽度(个数)和位向量的排列顺序,例如:Q : OUT BIT_VECTOR(3 downto 0),表示Q3,Q2,Q1,Q0四个位型信号。
位向量的信号值放在双引号里面表示,例如Q <= “0000”;(3)标准逻辑位(STD_LOGIC)型:IEEE标准的逻辑类型,它是BIT型数据类型的扩展,可以取值‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’等。
(4)标准逻辑位向量(STD_LOGIC_VECTOR)型:IEEE标准的逻辑向量,表示一组标准逻辑位型信号值。
VHDL是与类型高度相关的语言,不允许将一种数据类型的信号赋予另一种数据类型的信号。
除了上述介绍的数据类型外,还有其他多种数据类型用于定义内部信号和变量,请参见1-2节。
小提示:相同类型(模型相同,数据类型相同)的端口可以写在同一行,如:ENTITY cntm16 ISPORT(EN, Rd,CLK : IN STD_LOGIC;Co : OUT STD_LOGIC;Q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END cntm16;此外要注意,最后一个端口结尾没有分号!1.1.4 VHDL语言的结构体(ARCHITECTURE)结构体是VHDL程序设计中的最主要组成部分,是描述设计单元的具体结构和功能,在程序中,结构体放在实体的后面。
每一个结构体都有名称,结构体的名称是由设计者任取的,结构体是以标识符ARCHITECTURE开头,以END结尾。
结构体可以有三种描述方式,分别是行为(BEA VHER)描述方式、数据流(DATAFLOW)描述方式和结构(STRUCTURE)描述方式,其中数据流(DA TAFLOW)描述方式又称为寄存器(RTL)描述方式。
不同的结构体采用不同的描述语句。
结构体的一般格式为:ARCHITECTURE 结构体名OF 实体名称IS说明语句BEGIN电路描述语句END 结构体名;结构体说明语句是对结构体中用到的数据对象的数据类型、元件和子程序等加以说明。
电路描述语句用并行语句来描述电路的各种功能,这些并行语句包括并行信号赋值语句、条件赋值(WHEN-ELSE)语句、进程(PROCESS)语句、元件例化(COMPONET MAP)语句和子程序调用语句等。