VHDL语言入门
VHDL入门教程
VHDL入门教程VHDL(Very High-speed Integrated Circuit HardwareDescription Language)是一种用于设计数字电路的硬件描述语言。
它是IEEE 1076标准中规定的一种语言,广泛应用于数字电路的设计、仿真和综合等领域。
本文将为大家介绍VHDL的基础知识和入门教程。
一、VHDL的基本概念1. 实体(Entity):VHDL代码的最高层次,用于定义模块的输入、输出和内部信号。
2. 架构(Architecture):定义了实体中的各个信号和组合逻辑的行为。
3. 信号(Signal):表示数据在电路中的传输和操作。
4. 进程(Process):定义了组合逻辑的行为,用于描述信号之间的关系。
5. 实体声明(Entity Declaration):用于描述模块的名称、输入、输出和内部信号。
6. 架构声明(Architecture Declaration):用于描述模块的内部逻辑。
二、VHDL的基本语法1.实体声明语法:```entity entity_name isport ( port_list );end entity_name;```其中,entity_name是实体的名称,port_list是实体的输入、输出和内部信号。
2.架构声明语法:```architecture architecture_name of entity_name issignal signal_list;beginprocess (sensitivity_list)begin--逻辑行为描述end process;end architecture_name;```其中,architecture_name是架构的名称,entity_name是实体的名称,signal_list是架构的内部信号,sensitivity_list是触发事件的信号列表。
三、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库:用户自定义库 使用需声明
第1章VHDL语言基础
位矢量(BIT_VECTOR)。若端口定义为BIT,则其信号值 是一个1位的二进制数,取值只能是0或1;若端口定义为 BIT_VECTOR,则其信号值是一组二进制数。
➢ 在电路中,如果实体代表一个器件符号,则结构体描述了 这个符号的内部行为。当把这个符号例化成一个实际的器 件安装到电路上时,则需用配置语句为这个例化的器件指 定一个结构体(即指定一种实现方案),或由编译器自动选一 个结构体。
1. 结构体的一般语句格式 ARCHITECTURE 结构体名 OF 实体名 IS [说明语句;] BEGIN [功能描述语句;] END [ARCHITECTURE] [结构体名];
1.1 VHDL程序基本结构
一、VHDL程序设计约定 ➢ 语句结构描述中方括号“[ ]”内的内容为可选内容。 ➢ 对于VHDL的编译器和综合器来说,程序文字的大小写是不
加区分的。 ➢ 程序中的注释使用双横线“- -”。 ➢ 源程序命名与实体同名(MAX+plus Ⅱ要求)。
二、VHDL程序设计引例( 74LS00的设计 )
③ 信号赋值语句将设计实体内的处理结果向定义的信号或界面 端口进行赋值。
④ 子程序调用语句用于调用一个已设计好的子程序。
⑤ 元件例化语句对其他的设计实体作元件调用说明,并将此元 件的端口与其他的元件、信号或高层次实体的界面端口进行 连接。
A
A NAND2
Y
Y
B
B
(a)
A1
A NAND2
U1 Y
Y1
B1
B
A2
A NAND2
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”四种状态。
VHDL入门
第2章VHDL 入门2.1VHDL 程序结构一个完整的VHDL 程序的结构以及各如图2-1所示。
•图2-1VHDL 程序结构并非所有VHDL 程序都具有图2-1的语法结构。
理论上,只有ENTITY 和ARCHITECTURE 是程序所必备的;而在实际应用中,我们常常需要在定义ENITY 之前调用库和库中相应的程序包(只是“调用”,而不是“编写”程序包)。
因此,图2-2所示的这个VHDL 程序结构,是实际应用中最基本、最常见的程序结构,也是本书中大部分例程所用的结构。
•图2-2VHDL 程序基本结构例程2-1为2分频电路的VHDL程序,读者可以通过此程序的说明加深对VHDL程序基本结构的了解。
例程2-12分频电路LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider ISPORT(Clock:IN Std_Logic;Clkout:OUT Std_Logic);END;ARCHITECTURE Behavior OF FreDevider IS SIGNAL Clk:Std_Logic;BEGINPROCESS(Clock)BEGINIF rising_edge(Clock)THENClk<=NOT Clk;END IF; END PROCESS; Clkout<=Clk; END;实体声明(Entity Declaration)结构体定义(Architecture Definition)库、程序包调用例程2-1的功能与例程1-1完全相同,只是程序中多了一行注释。
VHDL中的注释以双连字号“--”标识,类似于C语言中的“//”。
注释对程序结果无任何响应,但可以增加程序的可读性和可维护性。
需要注意的是,在MAX+plusII中,编辑汉字很容易出现乱码,不但影响程序的可读性,而且常常会影响整个程序的编译。
因此,建议读者在写程序注释的时候,尽量用英文(本书中所有例程的注释原为英文,考虑到读者的习惯,所以在编入书中时都译成中文)。
VHDL入门
元件声明
y1 : OUT BIT);
END COMPONENT;
1
COMPONENT or_2
位
PORT( i3, i4 : IN BIT;
全
y2 : OUT BIT); END COMPONENT;
加
COMPONENT xor_2
器
PORT( a, b : IN BIT;
c : OUT BIT);
END adder;
2、结构体
ARCHITECTURE <结构体名> OF <实体名> IS
[结构体说明部分]; BEGIN <并行处理语句>; END结构体名;
•ARCHITECTURE a OF adder IS •BEGIN •s<=a XOR b XOR cin; •co<=((a XOR b) AND cin) OR (a AND b); •END a;
体
说
s ,co : OUT BIT);
明
图二 实体说明的描述
u2
cin
=1
s
u1
u3 tmp
END adder; ARCHITECTURE a OF adder IS BEGIN
a
&2
b
=1 tmp
1 u4
u5
结
&
≥1
co
s<=a XOR b XOR cin;
构 体
图三 1位全加器的逻辑图
co<=((a XOR b) AND cin) OR (a AND b);
中,通过调用库 中的元件或已设 计好的模块来对 当前的设计进行
u5:or_2 PORT MAP (tmp2,tmp3,co); 描述。
VHDL语言基础
3.1 概 述
3.1.5 VHDL与其他硬件描述语言的比较
VHDL: 具有较强的系统级抽象描述能力,适合行为级和RTL
级的描述,设计者可不必了解电路细节,所以工作比较 少,效率高。但对综合器的要求高,不易控制底层电路 的生成。IEEEE标准,支持广泛。
RTL: Register Translate Level (寄存器传输级)
with input select drive<=B”1111110” when 0, drive<=B”0110000” when 1, drive<=B”1101101” when 2, drive<=B”1111001” when 3, drive<=B”1111110” when 4, drive<=B”0110000” when 5, drive<=B”1101101” when 6, drive<=B”1111001” when 7,, drive<=B”0110000” when 8, drive<=B”1101101” when 9,
1、程序包说明(包首): 语法: package 程序包名 is { 包说明项 } end 程序包名;
包声明项可由以下语句组成: use 语句(用来包括其他程序包); 类型说明;子类型说明;常量说明;信号说明;
子程序说明;元件说明。
例:程序包说明:
2、程序包包体 程序包的内容:子程序的实现算法 包体的语法: package body 程序包名 is { 包体说明项 } end 程序包名;
如:一个可置数的16位计数器的电路原理图
3.1 概 述
用VHDL语言描述的可置数的16位计数器
3.1 概 述
VHDL入门教程
VHDL入门教程VHDL(Very High-Speed Integrated Circuit HardwareDescription Language)是一种硬件描述语言,用于设计数字电路和系统。
它是由美国国防部在20世纪80年代早期开发的,并由IEEE 1076标准化。
VHDL可以用于描述电路结构、电路行为和模拟。
一、VHDL概述VHDL是一种硬件描述语言,它允许工程师以更高级的语言编写硬件描述。
它可以描述电路结构、电路行为和模拟。
VHDL可以应用于各种电子系统的设计,从简单的数字逻辑门到复杂的处理器。
二、VHDL基本结构VHDL的基本结构包括实体声明、体声明和结构化代码。
实体声明描述了电路的接口,包括输入和输出。
主体声明描述了电路的行为。
结构化代码定义了电路的结构。
三、VHDL数据类型VHDL提供了多种数据类型,包括标量类型(比如整数和实数)、数组类型和记录类型。
每种类型都有其特定的操作和范围。
四、VHDL信号VHDL中的信号用于在电路中传递信息。
信号可以在过程中赋值,并且具有各种延迟属性。
信号还可以连接到模块的输入和输出端口,以实现电路之间的通信。
五、VHDL实体和体VHDL设计包含实体和体。
实体描述了电路的接口和连接,而体描述了电路的行为。
实体和体之间使用端口来传递信息。
六、VHDL组件VHDL中的组件用于将电路模块化,以实现更高层次的设计和复用。
组件可以在实体中声明,并在体中实例化。
七、VHDL并发语句VHDL中的并发语句用于描述电路中多个同时运行的过程。
并发语句包括并行语句、过程、并行块和并行时钟。
八、VHDL测试VHDL测试包括自动测试和手动测试。
自动测试使用测试工具和仿真器来验证电路的正确性。
手动测试包括使用仿真器进行手工测试和调试。
九、VHDL实例以下是一个简单的VHDL实例,实现了一个4位二进制加法器:```vhdllibrary IEEE;use IEEE.STD_LOGIC_1164.all;entity binary_adder isporta : in std_logic_vector(3 downto 0);b : in std_logic_vector(3 downto 0);sum : out std_logic_vector(4 downto 0);carry : out std_logicend binary_adder;architecture behavior of binary_adder isbeginprocess(a, b)variable temp_sum : std_logic_vector(4 downto 0);variable temp_carry : std_logic;begintemp_sum := ("0000" & a) + ("0000" & b);temp_carry := '0' when temp_sum(4) = '0' else '1';sum <= temp_sum;carry <= temp_carry;end process;end behavior;```上述VHDL代码定义了一个名为`binary_adder`的实体,它有两个4位输入`a`和`b`,一个5位输出`sum`和一个单一位输出`carry`。
VHDL学习入门
第一章第一章 VHDL 设计初步第一节 2选1多路选择器的VHDL 描述例1-1是2选1多路选择器的VHDL 完整描述,即可以直接综合出实现相应功能的逻辑电路及其功能器件。
图1-1是此描述对应的逻辑图或者器件图,图中,a 和b 分别是两个数据输入端的端口名,s 为通道选择控制信号输入端的端口名,y 为输出端的端口名。
“mux21a ”是此器件的名称,这类似于“74LS138”、“CD4013”等器件的名称。
电路图图1-2是例1-1综合后获得的电路,因而可以认为是多路选择器“mux21a ”内部电路结构。
由例1-1可见,此电路的VHDL 描述由两大部分组成: 1、由关键词ENTITY 引导,以 END ENTITY mux21a 结尾的语句部分,称为实体。
实体描述电路器件的外部情况及各信号端口的基本性质。
图1-1可以认为是实体的图形表达。
【例1-2】 【例1-4】ENTITY mux21a IS ENTITY mux21a ISPORT ( a, b : IN BIT; PORT ( a, b : IN BIT;s : IN BIT; s : IN BIT;y : OUT BIT ); y : OUT BIT );END ENTITY mux21a; END ENTITY mux21a;ARCHITECTURE one OF mux21a IS ARCHITECTURE one OF mux21a ISSIGNAL d,e : BIT; BEGINBEGIN IF s = '0' THENd <= a AND (NOT S) ; y <= a ; ELSEe <= b AND s ; y <= b ; y <= d OR e ; END IF;END ARCHITECTURE one ; END PROCESS;【例1-3】 END ARCHITECTURE one ;. . .ARCHITECTURE one OF mux21a ISBEGINy<=(a AND(NOT s)) OR (b AND s);END ARCHITECTURE one ;【例1-1】 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN y <= a WHEN s='0' ELSE b ; END ARCHITECTURE one ;图1-1 mux21a 实体 图1-2 mux21a 结构体2、由关键词ARCHITECTURE引导,以END ARCHITECTURE one结尾的语句部分,称为结构体。
第2章 VHDL语言基础
End 实体名;
端口名
端口模式
数据类型
(2)ENTITY
端口模式(MODE)有以下几种类型: IN ;OUT;INOUT ;BUFFER 端口模式可用下图说明:(黑框代表一个设计或模块)
IN
OUT
BUFFER
INOUT
二输入与门电路设计范例
Library std; Use std.standard.all;
(4)CONFIGURATION定义区
定义格式: Configuration 配置名 of 实体名 is for 选用的结构体名 end for; end configuration 配置名 ;
二输入与门电路设计范例
a c
b电Leabharlann 真值表abc
0
0
0
1
0
0
0
1
0
1
1
1
二输入与门电路设计范例
Architecture Na of and2 is
‘1’; 符号<=为信号直接赋值符。
End Na;
--结构体Na
Architecture Nb of and2 is
Begin
c <= a and b;
--and 为逻辑与操作
End Nb; --结构体Nb
Library ieee; Use ieee.std_logic_1164.all;
Entity half_adder is Port( x,y : in std_logic;sum,carry : out hlf_adder); End half_adder;
(4)CONFIGURATION定义区
一个完整VHDL电路设计必须有一个实体 和对应的结构体,即实体和结构体对构成一个 完整的VHDL设计。
VHDL语言入门教程
VHDL语言入门教程VHDL是一种硬件描述语言,主要用于设计数字电路和系统。
它是由美国国防部门于1980年代初开发的,目的是为了改进电子设计自动化(EDA)工具的开发效率和设计文档的可重复性。
VHDL广泛应用于数字信号处理(DSP)、嵌入式系统、通信系统和各种ASIC(专用集成电路)和FPGA(现场可编程门阵列)的设计。
本教程将介绍VHDL的基础知识,包括语法、数据类型和常见的建模技术。
一、VHDL的语法VHDL的语法由标识符、关键字、运算符和分隔符组成。
其中,标识符用于给变量、信号和实体命名,关键字用于定义语言特定的操作,运算符用于数学和逻辑运算,分隔符用于分隔语句。
VHDL中的代码以一个实体(entity)的声明开始,然后是体(architecture)的声明,最后是信号声明和进程(process)的描述。
以下是一个简单的例子:```vhdlentity AND_gate isportA, B: in std_logic;C: out std_logicend entity AND_gate;architecture Behavior of AND_gate isbeginC <= A and B;end architecture Behavior;```在这个例子中,我们声明了一个名为AND_gate的实体,它有两个输入信号A和B,一个输出信号C。
然后我们定义了一个名为Behavior的体,它描述了AND门的行为:C等于A与B的逻辑与运算结果。
二、VHDL的数据类型VHDL支持许多数据类型,包括标量类型、数据类型、自定义类型和引用类型。
标量类型包括bit、bit_vector、integer、real、std_logic和std_ulogic等。
其中,bit_vector是一组连续的位,std_logic和std_ulogic用于表示单个信号。
数据类型是由标量类型和数组类型组成的。
数组类型可以是一维、二维或更高维的,用于存储多个数据。
vhdl入门
2.2.1 VHDL 预定义数据类型
1.布尔数据类型 值范围true(1)、false (0) 用于逻辑关系 2. 位数据类型 Bit 0 ,1
3. 位矢量数据类型 位矢量基于位的数组
Bit_vector(0 to n); Bit_vector(n downto 0); 关键字 TO 表示数组从左到右升序排列 关键字 downto 表示数组从右到左降序排列 使用downto
+, *,/ **,MOD,REM,ABS +,-,* 可以综合,但不推荐用*,如果用乘法,选 用库函数 / 只有除数是2的N次幂才能综合,不用 如果用的话,选用库函数 其他不能综合。
2.4.2 并置运算符
& 用于多个元素或矢量连接成新的矢量
例
2.4.3 关系运算符
= 、/=、 <、<=、>、>=
2.1.2 结构体
注意:
⑴声明语句用于说明和定义内部信号、常量、 数据类型、子过程、元件等 ⑵内部说明信号不必规定信号方向 ⑶功能描述语句允许信号赋值、块、进程、 子程序调用、生成、元件例示等语句
功能描述语句主要用到 1.进程语句 2. 信号赋值语句 3.元件例化语句
例
2.1.3 库和包的调用
2.3.3 常数
书写格式: constant 常量名 :数据类型 [:= <表达式>]; 作用: 1.保证常数描述的数据在程序中不会因误操作被改变 2.对程序中某些关键数据值命名,可以提高程序的可 读性 3.将出现次数多的关键数值用数值表示,易于修改
例
2.4 VHDL运算符
2.4.1 算术运算符
1.1.1 VHDL特点
1.支持“自顶向下”的设计方法
VHDL入门易懂教程
VHDL入门易懂教程VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述数字系统的行为,结构和时序。
它是一种用于设计和开发数字电路的语言,比如FPGA(Field-Programmable Gate Array)和ASIC (Application-Specific Integrated Circuit)。
本文将提供一个易懂的VHDL入门教程,以帮助初学者快速了解并上手VHDL语言。
一、VHDL概述VHDL最初是为了满足军事和航空航天领域的需求而开发的,目前已经成为了一种广泛使用的硬件描述语言。
它不仅可以用于系统级的设计,还可以用于模块级和门级的设计。
VHDL的设计思想是从高级抽象开始,逐步转化为底层的物理设计,这使得VHDL非常适合大型和复杂的设计项目。
二、VHDL语法1.声明语句在VHDL中,首先需要声明各种信号和变量,以便在后续的代码中使用。
声明语句的语法如下:```signal signal_name : signal_type := initial_value;variable variable_name : variable_type := initial_value;```其中,signal_name和variable_name为信号和变量的名称,signal_type和variable_type分别为信号和变量的类型,initial_value为信号和变量的初始值。
2.过程语句VHDL中的过程类似于程序中的函数,用于执行一系列的操作。
过程语句的语法如下:```process (sensitivity_list)begin-- codeend process;```sensitivity_list是一个由信号组成的列表,当列表中的任意一个信号发生变化时,过程会被触发执行。
过程中的代码为具体的操作。
3.结构语句VHDL中的结构语句用于描述数字系统的结构,也就是各个模块之间的连接关系。
VHDL语法入门
§1. VHDL语法 入门
1.3 数据对象及类型
枚举: type Bit is (’0’,’1’); type Boolean is (false, true); 物理: type Time is range –2147483647 to +2147483647 units fs; ps=1000 fs; ns=1000 ps; us=1000 ns; ms=1000 us; sec=1000 ms; min=60 sec; hr= 60 min; end units;
§1. 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;
1.3 数据对象及类型
数据对象 数据类型
§1. VHDL语法 入门
1.3 数据对象及类型
数据对象
VHDL语言中用于进行赋值等操作的客体 信号(Signal)
信号赋值: sig <= a + b; 信号说明:
端口信号 port (端口信号名:端口模式 数据类型名 [:=初始 值];…); 内部信号 signal 信号名:数据类型名 [:=初始值]; 例:signal sel: bit := ’0’;
第1章 VHDL语言基础
说明:根据图b右侧的MY74LS00原理图,实体MY74LS00定 义了引脚的端口信号属性和数据类型。
--实体MY74LS00的结构体ART2的说明 ARCHITECTURE ART2 OF MY74LS00 IS --元件调用声明 COMPONENT NAND2 IS PORT(A,B:IN STD_LOGIC; Y:OUT STD_LOGIC); END COMPONENT NAND2; --元件连接说明 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;
① 规范范围,亦即此设计符合某个设计规范,能得到大家的认可, 这就是库、程序包使用说明。 ② 硬件电路与外界的接口信号,这就是设计实体的说明。 ③ 硬件电路其内部各组成部分的逻辑关系以及整个系统的逻辑 功能,这就是该设计实体对应的结构体说明。
1.设计思路 74LS00芯片由四个2输入与非门组成。因此设计时可先设计 一个2输入与非门(图a所示),再由四个2输入与非门构成一个 整体—MY74LS00(图b所示)。
第1章 VHDL语言基础
1.1 VHDL程序基本结构 1.2 VHDL程序的实体 1.3 VHDL程序的结构体
1.1 VHDL程序基本结构
一、VHDL程序设计约定 语句结构描述中方括号“[ ]”内的内容为可选内容。 对于VHDL的编译器和综合器来说,程序文字的大小写是不 加区分的。 程序中的注释使用双横线“- -”。 源程序命名与实体同名(MAX+plus Ⅱ要求)。
第一讲 VHDL语言基础
建议采用原理图和HDL结合的方法来设计
Verilog HDL
学习Verilog HDL几点提示 四 学习 几点提示
了解HDL的可综合性问题 所有的HDL描述都可以用于仿真,但不是所 有的HDL描述都能用硬件实现。 用硬件电路设计思想来编写HDL 语法掌握贵在精,不在多
实践、实践、再实践! 实践、实践、再实践!
1.3.2 HDL分类
一 VHDL
VHDL(Very-High-Speed Integrated Circuit HDL)诞生于1982年。1987年底,VHDL被 IEEE和美国国防部确认为标准硬件描述语言。
HDL分类
二 Verilog HDL
1983年:GDA公司的Phil Moorby首创 1984-1985年:Moorby设计出第一个Verilog仿真 器 1986年:Moorby提出快速门级仿真的XL算法 1989年:Cadence公司收购了GDA公司 1990年:Cadence公司公开发表Verilog HDL语言, OVI(Open Verilog International)组织成立 1 9 9 5 年 : IEEE 制 定 了 Verilog HDL 标 准 , 即 IEEE1364-1995
VLSI设计方法
优势
体积与重量↓ 工作速度↑ 功耗↓ 可靠性↑ 柔性↑ 成本↓
设计特点
系统(算法)与芯片(结构) 协同设计 软件与硬件协同设计 从顶向下和从底向上结合设计 综合与验证同步进行 充分利用IP或设计再利用模块
1.2 基于HDL的VLSI设计流程
VLSI设计的典型流程 设计的典型流程
HDL分类 三 VHDL和Verilog HDL的区别 和 的区别 VHDL在系统级描述方面具有潜在的适应性,在行为级 描述方面略强于Verilog HDL,而Verilog HDL则在结 构描述方面远优于VHDL,因而在ASIC领域得到了更 为广泛的应用 VHDL不能完成开关级描述,所以即便是VHDL的设计 环境,在底层实质上也是由Verilog HDL描述的器件库 支持的 Verilog HDL与VHDL的代码数之比为3:1,前者的编 程风格更加简洁、高效 VHDL源于ADA语言,而Verilog HDL源于C语言,易 学易用,建议学习HDL应该从学习Verilog HDL开始
VHDL语言快速入门必读
一·1。
数据类型BIT与STD_LOGIC有什么区别。
BIT类型的取值只能是0或1,没有不定状态X,也没有高阻态。
STD_LOGIC类型可以有9种不同的值,包括U—初始值,X-不定,0-0,1—1,Z—高阻态,W—弱信号不定,L—弱信号0,H弱信号1。
‘—’不可能情况.2.信号和变量的异同。
信号是全局量,只要在结构体中已经定义,就可以在结构体中的所有地方使用,信号的赋值符号是”〈=”,信号带入时可以附加延时,信号实际带入过程和带入语句的处理时分开进行的。
变量是局部量,只能在进程,子程序内部定义和使用,变量的赋值符号是“:=",变量的赋值是立即执行的,不能附加延时。
3.VHDL语言的基本顺序语句和并行语句有哪些?双性语句:信号带入语句顺序语句:WHAT语句,断言语句,变量赋值语句,IF语句,CASE语句,LOOP语句,NEXT语句,EXIT语句,过程调用语句,NULL语句。
并行语句:进程(PROCESS)语句,条件带入语句,选择信号带入语句,并发过程调用语句,块语句。
4.用VHDL语言进行硬件设计的流程是什么?1。
分析实际的需求2确定芯片的功能3。
用VHDL 语言描述改元件4.编译,如果有错误修改后再编译直至编译通过。
5。
仿真,如果仿真不符合设计要求,修改程序直至仿真通过。
6。
测试7.综合,8.下载到实际的芯片上。
5.基本的硬件描述语言的种类有哪些?美国国防部开发的VHDL。
Verilog公司开发的Verilog-HDL.日本电子工业振兴协会开发的UDL/I语言。
6.VHDL语言中包含的库的种类有哪些?库:是经编译后的数据的集合,它存放包集合定义,实体定义,构造体定义,和配置定义。
库的种类:1.IEEE库,2。
STD库,3。
面向ASIC 的库,4.WORK库,5。
用户定义库7.IEEE库中所包含的基本类型转换函数有1。
包含程序所用的库LIBRARY IEEE;USE IEEE.STD_LOGIC_1164。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实体
ARCHITECTURE one OF mux21a IS BEGIN y <= a WHEN s = '0' ELSE b ; END ARCHITECTURE one ;
结构体
VHDL基本结构
库声明:实现库的调用,具体调用的是程序包中的内容
实体:描述电路的外部特性,即电路的输入与输出; 结构:描述电路内部实现的功能; VHDL允许一个实体对应多种结构。
上例中,在使用IEEE std_logic_1164提供的数据类型时,必须在 实体说明以前加上两条语句,以便对VHDL程序进行模拟和综合时, 能从指定库的程序包中找到数据类型的定义。 library ieee; use ieee.std_logic_1164.all
实体声明
实体申明部分指定了设计单元的输入/输出端口或引脚,是设计
数据对象
信号与变量
信号声明 变量声明 信号赋值符号 <= 变量赋值符号 :=
信号与变量赋值语句功能的比较
信号SIGNAL 变量VARIABLE
基本用法
适用范围 行为特性
用于作为电路中的信号连线
在整个结构体内的任何地方都能适用 信号的数据传入不是立即的
用于作为进程中局部数据存储单元
在进程、过程、函数中使用
3 选择信号赋值语句 WITH 选择表达式 SELECT 赋值目标<=表达式 WHEN 选择值, 表达式 WHEN 选择值, … 表达式 WHEN 选择值, [表达式 WHEN OTHERS];
函数
函数调用前需要将函数的内容装入程序包中。 函数调用语句是出现在结构体和块中的并行语句。
函数首: FUNCTION 函数名 (参数表) RETURN 数据类型; 函数体: FUNCTION 函数名 (参数表) RETURN 数据类型 IS [声明部分] BEGIN 顺序语句; RETURN [返回变量名];
注意:EXIT语句是用来从整个循环中跳出而结束循环; NEXT语句是用来结束循环执行过程的某一次循环,重新 执行下一次循环。
顺序语句
WAIT语句:在进程中,用来将程序挂起暂停执行,直到满足此语句设置
的结束挂起条件中,才重新执行程序。
格式1:WAIT 格式2:WAIT ON 敏感信号表 注意:含WAIT语句的进程PROCESS的括号中不能再加敏感信号,否则 是非法的。 格式3:WAIT UNTIL 条件表达式 格式4:WAIT FOR 时间表达式
信号
作为一种数值容器,不仅可容纳当前值,也可保存历史值。 信号类似于连接线,可以作为设计实体中各并行语句模块间的信 息交流通道。 在结构体声明后才能使用。 信号的数据传入不是即时的,即目标信号需要一定延迟时间,才 能接收到源信号的数据。 在进程中只能将信号列入敏感表,而不能将变量列入 信号声明格式 SIGNAL 信号名:数据类型 约束条件:=表达式 信号赋值格式 目标信号名<=表达式
实体对外的一个通信界面,是外界可以看到的部分。
mode(信号方向):in—输入,out—输出,inout—输入和输出, buffer—缓冲输出(在实体的结构体内部可以被读出)
结构体
结构体用来描述设计实体的逻辑结构和逻辑功能,在电路上相当 于器件的内部电路结构。是外界不可见的部分。
数据对象
数据对象指用来存放各种类型数据的容器。包括变量、常量、 信号和文件四类。
块语句
块名: BLOCK [声明部分] BEGIN 并行语句; END BLOCK 块名;
并行信号赋值
1 简单信号赋值语句 赋值目标<=表达式; 2 条件信号赋值语句 赋值目标<=表达式 WHEN 赋值条件1 ELSE 表达式 WHEN 赋值条件2 ELSE … 表达式 WHEN 赋值条件N ELSE 表达式
常量
设计者给实体某一个常量名赋予固定值 格式:CONSTANT 常量名:数据类型:=表达式; 常量名一经赋值,在程序运行中不变
文件
传输大量数据的客器。 包含一些专门数据类型的数值。 仿真测试时,测试的输入激励和仿真结果都要用文件来进行。
变量
局部量 只用于进程、函数和子程序 不能将信息带出对它定义的当前设计单元 变量赋值立即有效,不存在任何延时。 变量声明格式 VARIABLE 变量名:数据类型 约束条件 := 表达式 变量赋值格式 目标变量名 := 表达式 例 VARIABLE x:STD_LOGIC:=‘0’; VARIABLE count:INTEGER RANGE 0 TO 255:=10
元件例化语句
元件例化是将预先设计好的设计实体作为一个实体,连接到一
个当前设计实体中的指定端口。
元件例化语句格式为: COMPONENT 元件名 IS
GENERIC Declaration;
PORT Declaration; END COMPONENT 元件名; 元件例化中,“元件”引脚与“插座”引脚的连接关系,称为关联。 关联方法有位置映射法和名称映射法。 位置映射法:u1:and (a1,b1,y1);
END 函数名;
函数调用语句 赋值目标<=函数名 (关联参数表);
过程
过程调用前需将过程的内容装入程序包中。 过程调用语句可出现在进程中,结构体和块语句中。
过程首: PROCEDURE 过程名 (参数表) 过程体: PROCEDURE 过程名 (参数表) IS
[声明部分] BEGI用户自定义数据类型
VHDL允许用户自己定义数据类型。用户自定义数据类型分为基本 数据类型定义和子类型数据定义两种格式。的又是枚举类型,通过列 举该类型的值而定义。
枚举类型的声明如上表第1行所示。
value-list是类型所有值的列表,由逗号隔开。 如:
操作符
类型 操作符 + & * / MOD REM SLL SRL SLA SRA ROL ROR ** ABS 功能 加 减 并 乘 除 取模 求余 逻辑左移 逻辑右移 算术左移 算术右移 逻辑循环左移 逻辑循环左移 乘方 取绝对值 类型 关 系 操 作 符 逻 辑 操 作 符 操作符 = /= < > <= >= AND OR NAND NOR XOR NXOR NOT 功能 等于 不等于 小于 大于 小于等于 大于等于 与 或 与非 或非 异或 异或非 非
VHDL设计实例
2选1多路选择器的VHDL描述
Library IEEE; USE IEEE.std_logic_1164.all;
库声明
ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ; END ENTITY mux21a ;
顺序语句
NEXT语句:主要在LOOP语句中执行,进行有条件或无条件的转向控制。 格式1:NEXT 格式2:NEXT 标号 格式3:NEXT WHEN 条件表达式 EXIT语句:主要在LOOP语句中执行,进行有条件或无条件的跳转控制。 格式1:EXIT 格式2:EXIT 标号
格式3:EXIT WHEN 条件表达式
名称映射法:u1:and(a=>a1,b=>b1,y=>y1);
生成语句
生成语句有一种复制作用,在设计中只要根据某些条件,设计好 某一元件,用生成语句复制一组完成相同的并行元件或设计单元。
格式1: [标号:] FOR 循环变量 IN 取值范围 GENERATE [声明部分] BEGIN [并行语句]; END GENERATE[标号]; 格式2: [标号:] IF 条件 GENERATE [声明部分] BEGIN [并行语句]; END GENERATE[标号];
VHDL硬件描述语言
什么是VHDL?
Very high speed integrated Hardware Description Language (VHDL)
– 是IEEE、工业国际标准硬件描述语言
– 用语言的方式而非图形等方式描述硬件电路 容易修改 容易保存 – 特别适合于设计的电路有: 复杂组合逻辑电路,如: 译码器、编码器、加减法器、多路选择器、地址译码器…... 状态机 等等……..
进程语句
进程语句由顺序语句组成,但其本身却是并行语句。 进程语句分带敏感信号参数表格式和不带敏感信号参数表格式两种。 带敏感信号参数表的PROCESS语句格式为: [进程标号:] PROCESS [(敏感信号参数表)] [IS] [进程声明部分] BEGIN 顺序语句; END PROCESS [进程标号]; 不带敏感信号参数表的PROCESS语句格式为: [进程标号:] PROCESS [IS] [进程声明部分] BEGIN WAIT语句; 顺序语句; END PROCESS [进程标号];
库、程序包 实体(ENTITY) 设计实体 结构体 (ARCHITECTURE)
配置 (CONFIGURATION)
库、程序包
在VHDL程序中使用的文字、数据对象、数据类型都需要预先 定义。为了方便用VHDL编程,IEEE将预定义的数据类型、元件 调用声明及一些常用子程序收集在一起,形成程序包,供VHDL 设计实体共享和调用。若干个程序包形成库,因此,在每个设计 实体开始都有打开库或程序包的语句。
过程调用语句 过程名 (关联参数表);
顺序语句
赋值语句
1 变量赋值语句 目标变量名:=表达式; 2 信号赋值语句 目标信号名<=表达式; 3 流程控制语句 IF 语句 CASE语句 格式: CASE 表达式 IS WHEN 选择值=>顺序语句; WHEN 选择值=>顺序语句; … WHEN OTHERS=>顺序语句; END CASE; LOOP语句
立即赋值,其值可立即使用
数据类型