VHDL基础入门学习

合集下载

第四讲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库:用户自定义库 使用需声明

第4章VHDL语言基础

第4章VHDL语言基础
常数说明
结构体组成
结 构 体 说 明 结
数据类型说明 信号说明 例化元件说明 子程序说明
构 体 块语句 结 构 体 功 能 描 述 进程语句 信号赋值语句 子程序调用语句 元件例化语句
结构体描述风格
行为描述
描述该设计单元的功能,主要使用函数、过程和进程语
句,以算法形式描述数据的变换和传送 例4-4
Port (a,b: in std_logic_vector (3 downto 0);
Ci: in std_logic; Sum: out std_logic_vector (3 downto 0); Co: out std_logic); End add4;
4.1.3 结构体部分
结构体(ARCHITECTURE)
4.1.1 参数部分
库说明 存放已经编译的实体、结构体、程序包和配臵,用于 设计共享,是编程资源。 library <库名>; 程序包引用
使用USE子句指明要使用库中某一个设计单元。
use <库名>. <程序包名>.all; 【例4-2】 LIBRARY ieee; USE ieee.std_logic_1164.ALL;
结构体主要用来描述实体的内部结构,即 描述一个实体的功能。 描述方式 行为描述方式、数据流描述方式、结构描 述方式、混合描述方式
4.1.3 结构体部分
结构体格式
ARCHITECTURE 结构体名 OF 实体名 IS [结构体说明部分]; BEGIN 结构体描述部分; END 结构体名;

4.1.3 结构体部分
4.1 基本结构
模块结构
参数部分:库(LIBRARY)、程序包(USE); 实体(ENTITY):[类属]、端口(PORT);

第1章VHDL语言基础

第1章VHDL语言基础
(Bit)、位矢量型(Bit-vector)和整数型(Integer)等。 ➢ 在实用中,端口描述中的数据类型主要有两类:位(BIT)和
位矢量(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基础及经典实例开发pdf

vhdl基础及经典实例开发pdf

vhdl基础及经典实例开发pdf VHDL是一种硬件描述语言,它用于描述和设计数字电路。

VHDL的全称是Very High Speed Integrated Circuit Hardware Description Language,它源于20世纪80年代的美国国防部,是一种为了描述硬件而设计的开发语言。

VHDL的基础知识包括语法、数据类型和结构体。

语法方面,VHDL 有自己的语法规则和词法规则,要正确地描述一个硬件电路,我们需要熟悉这些规则。

数据类型方面,VHDL内置了基本的数据类型,如bit、bit vector、integer等,这些数据类型可以用来描述电路的输入输出和中间信号。

结构体方面,VHDL支持设计者自定义类型,比如用record来描述一个复杂的数据结构。

在VHDL开发中,经典实例是不可或缺的。

经典实例可以帮助我们更好地理解VHDL的使用方法和特点,也可以让我们更好地掌握VHDL的编程技巧。

下面是一些经典实例的介绍。

1.二进制加法器(Binary Adder):二进制加法器可以实现两个二进制数的加法运算。

它是数字电路中常用的基本模块,很多其他的电路都需要用到它。

通过构建一个二进制加法器的实例,我们可以学习到VHDL的语法规则、数据类型的使用以及模块化设计的思想。

2.时钟分频器(Clock Divider):时钟分频器可以将输入的时钟信号分频为较低频率的信号。

在数字电路中,时钟分频器是非常常见的一个模块,它可以用于控制其他电路的时序。

通过构建一个时钟分频器的实例,我们可以学习到VHDL的状态机设计、时序逻辑的实现以及对时钟信号的处理。

3.多路选择器(Multiplexer):多路选择器可以根据选择信号选择其中的一个输入信号输出。

在数字电路中,多路选择器可以用于实现多个输入的选择和切换。

通过构建一个多路选择器的实例,我们可以学习到VHDL的条件语句的使用、信号赋值的方法以及对多个输入信号的处理。

《VHDL语法基础》PPT课件

《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库的使用说明

第3章 VHDL基础

第3章  VHDL基础

3.2 时序电路描述
图3-5 例3-7的电路图 的电路图
3.2 时序电路描述
【例3-8】 】 ... IF a1 > b1 THEN q1 <= '1' ; ELSE q1 <= '0' ; END IF; ...
图3-6 例3-8的电路图 的电路图
3.2.3 时序电路的不同表述
3.2 时序电路描述
y <= d OR
e
3.1 VHDL 基本语法
组合电路描述 3.1.1 组合电路描述
【例3-3】 】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = '0' THEN y <= a ; END IF; END PROCESS; END ARCHITECTURE one ;
or_gate, Or_gate, Qr_Gate, OR_GATE. 不合法的: 不合法的: 2illegal_name, _illegal_name, illegal#name, Illegal_name_
3.1.2 扩展标识符
扩展标识符(Extended Identifier)是VHDL’93版扩展的 扩展标识符 是 版扩展的 书写规则和识别都有新规定,扩展标识符具有以下特性: 书写规则和识别都有新规定,扩展标识符具有以下特性: (1)扩展标识符用反斜杠来界定。 扩展标识符用反斜杠来界定。 扩展标识符用反斜杠来界定 例如: 是合法的。 例如:\invalid\,\controller_decode\是合法的。 , 是合法的 (2)允许包含图形符号、空格符,但没有格式的作用。 允许包含图形符号、 允许包含图形符号 空格符,但没有格式的作用。 例如: 是合法的。 例如:\$5000&T\,\mode A and B\是合法的。 & , 是合法的 (3) 2个反斜杠之问的字可以和保留字相同。 个反斜杠之问的字可以和保留字相同。 个反斜杠之问的字可以和保留字相同

VHDL入门教程

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入门

库(library)
含义: 经编译后的数据的集合,它存放程序包定义、实体 定义、结构体定义和配置定义。 它可以使设计者共享已经编译过的设计成果。 库和库之间是独立的,不能互相嵌套。 库语句的格式: library 库名; use 库名.程序包名. all;
注意它们之间用点号隔开
VHDL标准中规定工作库work和标准库std永远可见, 同时规定standard包总是可见,因此意味着每段 VHDL总是隐含下面可见的行: library work ; library std ; usபைடு நூலகம் std.standard.all ; 该库中定义了数据类型:bit , bit_vector ,character , integer 等。
逗号隔开 此句分号在括号外面
其中端口port的方向有in , out, inout, buffer, linkage in 信号只能被引用,不能被赋值 out 信号只能被赋值,不能被引用 buffer 信号可以被引用,也可以被赋值 inout是双向信号 linkage只用在文档中
结构体(architecture)
如果要用到数据类型如std_logic , std_ulogic ,std_logic_vector和std_ulogic_vector,则 需打开ieee库中的std_logic_1164包。如下: library ieee ; use ieee.std_logic_1164.all ; 如果要用到无符号运算:加、减、乘、除等,则需 用到std_logic_unsigned程序包。 use ieee.std_logic_unsigned.all ; 注:用户也可以根据需要自己定义库和包。
内部信号在结构体声明中 定义,要写于begin前
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章 VHDL基本数据类型与命令语句 第二章 VHDL基本数据类型与命令语句2.1 VHDL基本数据类型 2.2 VHDL数据对象定义 2.3 并行同时语句( When-Else, With-Select ) 2.4 顺序语句一(Process,If-Else,Wait) 2.5 顺序语句二(Case-When,Null)12.1 基本数据类型 (逻辑信号、数值信号) 在VHDL中每一个数据对象都必须具有确 定的数据类型。

只有在相同数据类型的数据对 象之间,才能进行数据交换。

⑴ ⑵ ⑶ ⑷ ⑸ 布尔代数数据类型(BOOLEAN); 位逻辑数据类型(BIT); 位逻辑序列数据类型(BIT_VECTOR); 标准逻辑数据类型(STD_LOGIC); 标准逻辑序列数据类型(STD_LOGIC _VECTOR);2⑹ ⑺ ⑻ ⑼ ⑽整数数据类型(INTEGER); 实数数据类型(REAL); 字符串数据类型(STRING); 字符数据类型(CHARACTER); 无符号整数数据类型(UNSIGNED);今后在逻辑设计中最常用到两种:标准逻辑 数据类型 STD_LOGIC 和标准逻辑序列数据类型 STD_LOGIC _VECTOR。

其语法格式:在实体中是跟在端口模式 (方 向) 后面,在结构体中是跟在数据对象后面。

32.1.1 逻辑信号的数据类型 ⑴ 布尔代数数据类型(BOOLEAN) 布尔代数数据类型(BOOLEAN)属于双值数据 类型,其值只有“TRUE”(真)、“FALSE”(假) 两种 状态,常用来表示关系运算和关系运算的结果。

⑵ 位逻辑数据类型(BIT) 位逻辑数据类型(BIT)也属于双值数据类型, 其值只有 ‘ 1 ’、 ' 0 ' (用单引号表示)两种状态,常 用来表示某一管脚的逻辑值。

4⑶ 标准逻辑数据类型(STD_LOGIC) 标准逻辑数据类型 (STD_LOGIC) 也属于双值 数据类型,但它比“BIT”对于数字逻辑电路的逻辑 特性的描述更完整、更真实。

因此在VHDL中通常 都是采用这种数据类型。

它的取值共有九种形式: ① ' U ' —— 初始值; ② ' X ' —— 不定值; ③ ' 0 ' —— 低电位0; ④ ' 1 ' —— 高电位1; ⑤ ' Z ' —— 高阻抗; ⑥ ' W ' —— 弱信号不定值; ⑦ ' L ' —— 弱信号0; ⑧ ' H' —— 弱信号1; ⑨ ' – ' —— 不可能情况,不必理会。

5⑷ 标准逻辑序列数据类型(STD_LOGIC_VECTOR) 标准逻辑序列数据类型 (STD_LOGIC_ VECTOR) 也属于双值数据类型,但它描述 的是一组序列信号的数据类型。

如:数据总 线、地址总线等(排线)上面的数值。

⑸ 位逻辑序列数据类型(BIT_VECTOR) 位逻辑序列数据类型 (BIT_VECTOR) 也 属于双值数据类型,其值只有"1"、"0" (用双 引号表示) 两种状态,常用来表示某一组管脚 的位逻辑值。

6⑹ 逻辑信号的运算 配合逻辑信号的基本运算符,通常包含有两种: ① 逻辑运算符and与门or或门nand与非门nor或非门xor异或门xnor同或门not非门② 关系运算符=等于/=不等于<小于<=小于等于>大于>=大于等于注意:“<=”符号与赋值符号相同,由上下文来区别。

72.1.2 数值信号的数据类型 ⑴ 整数数据类型(Integer) 整数数据类型的数有正整数、负整数和0,在 VHDL中其取值范围是 -2147483647~2147483646。

即: ( −2 31 ) ~ ( 2 31 − 1) 。

⑵ 无符号整数数据类型(UNSIGNED); 无符号整数数据类型的数与标准逻辑序列相 似,定义时也必须指明这个无符号整数的位数。

[例1] 假若A中的内容是3(11)2,B中的内容是2(10)2,试 分析下程序运行后,C和D中的内容是多少?8LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CH2_1_3 PORT(A : B C D END CH2_1_3; is IN Std_Logic_Vector(1 DOWNTO 0); : IN Unsigned(1 DOWNTO 0); : OUT Unsigned(7 DOWNTO 0); : OUT Std_Logic_Vector(1 DOWNTO 0));ARCHITECTURE a OF CH2_1_3 IS SIGNAL E,F,G : Unsigned(1 DOWNTO 0); SIGNAL H : Unsigned(7 DOWNTO 0);9BEGIN E <= Unsigned (A); F <= B; H(1 DOWNTO 0) <= E+F; H(3 DOWNTO 2) <= E-F; H(7 DOWNTO 4) <= E*F; G(0) <= E(0) AND F(0); G(1) <= E(1) OR F(1); C <= H; D <= Std_Logic_Vector (G); END a;--(1) --(2) --(3) --(4) --(5) --(6) --(7) --(8) --(9)因为A中的内容是3(11)2,B中的内容是2(10)2,故: ① E <=Unsigned (A) 后, E=3 (11)2 ; ② F <= B 后, F=2 (10)2 ;10BEGINE <= Unsigned (A);--(1)F <= B;--(2)H(1 DOWNTO 0) <= E+F; --(3)H(3 DOWNTO 2) <= E-F; --(4)H(7 DOWNTO 4) <= E*F; --(5)G(0) <= E(0) AND F(0); --(6)G(1) <= E(1) OR F(1);--(7)C <= H;--(8)D <= Std_Logic_Vector(G);--(9) END a;BEGINE <= Unsigned (A);--(1)F <= B;--(2)H(1 DOWNTO 0) <= E+F; --(3)H(3 DOWNTO 2) <= E-F; --(4)H(7 DOWNTO 4) <= E*F; --(5)G(0) <= E(0) AND F(0); --(6)G(1) <= E(1) OR F(1);--(7)C <= H;--(8)D <= Std_Logic_Vector(G);--(9) END a;BEGINE <= Unsigned (A);--(1)F <= B;--(2)H(1 DOWNTO 0) <= E+F; --(3)H(3 DOWNTO 2) <= E-F; --(4)H(7 DOWNTO 4) <= E*F; --(5)G(0) <= E(0) AND F(0); --(6)G(1) <= E(1) OR F(1);--(7)C <= H;--(8)D <= Std_Logic_Vector(G);--(9) END a;BEGINE <= Unsigned (A);--(1)F <= B;--(2)H(1 DOWNTO 0) <= E+F; --(3)H(3 DOWNTO 2) <= E-F; --(4)H(7 DOWNTO 4) <= E*F; --(5)G(0) <= E(0) AND F(0); --(6)G(1) <= E(1) OR F(1);--(7)C <= H;--(8)D <= Std_Logic_Vector(G);--(9) END a;A中的内容是3(11)2,B中的内容是2(10)2,仿真的结果是:C中的内容为65,D中的内容为2。

注意1、无符号整数(Unsigned)与标准逻辑序列(Std_Logic_Vector)信号之间是可以作转换的;2、无符号整数(Unsigned)信号的序列编号是由高至低的,所以一定要使用Downto的序列形式来定义。

Constant 常数名称:数据类型:= 设置值;注意:设置值一旦设定,就不能再更改。

Signal 信号名[,信号名…]: 数据类型[:=表达式];LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CH2_2_1 isPORT( A : IN Std_Logic;B : IN Std_Logic;C : IN Std_Logic;F : OUT Std_Logic); END CH2_2_1;ABCDEFARCHITECTURE a OF CH2_2_1 IS SIGNAL D, E : Std_Logic;BEGIND <= A and B;--A 与B 后送入DE <= not C;--将C 取非后送入EF <= D or E;--D 或E 后送到FEND a;AB C D E FVariable 变量名[,变量名…]: 数据类型[:=表达式];补充:信号和变量的区别LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CH2_2_2 isPORT( IP : IN Std_Logic;CP : IN Std_Logic;OP : OUT Std_Logic);END CH2_2_2;ARCHITECTURE a OF CH2_2_3 ISSignal D: Std_Logic;BEGINProcess (CP,IP) --(1) BeginIF CP'EVENT AND CP ='1' THEN --(2)D <= IP ; --(3)OP <= D ; --(4) END IF ;End Process ;END a;ARCHITECTURE a OF CH2_2_3 ISSignal D: Std_Logic;BEGINProcess (CP,IP) --(1) BeginIF CP'EVENT AND CP ='1' THEN --(2)D <= IP ; --(3)OP <= D ; --(4) END IF ;End Process ;END a;将IP的变化暂存延迟了一个周期左右的时间后才传递到了变量D。

相关文档
最新文档