3 VHDL基础1
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的编写和仿真流程。
第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语言的基本语法

B:二进制基数符号,表示二进制数位0或1。 二进制基数符号,表示二进制数位0 O:八进制基数符号。 八进制基数符号。 X:十六进制基数符号(0~F) 。 十六进制基数符号(0~ (0 例如: 1_1101_1110 1_1101_1110” 例如:B“1_1101_1110 --二进制数数组,位矢数组长度是9 --二进制数数组,位矢数组长度是9 二进制数数组 AD0 X“AD0” AD --十六进制数数组,位矢数组长度是12 --十六进制数数组,位矢数组长度是12 十六进制数数组
4、下标名及下标段名 下标名用于指示数组型变量或信号的某一 下标名用于指示数组型变量或信号的某一 元素, 元素,如:a(2) , b(n) 下标段名则用于指示数组型变量或信号的 下标段名则用于指示数组型变量或信号的 某一段元素,其语句格式如下: 某一段元素,其语句格式如下:
数组类型信号名或变量名(表达式 表达式2]); 数组类型信号名或变量名 表达式1 [TO/DOWNTO 表达式 ; 表达式
信号的使用和定义范围是实体、结构体和程序包 信号的使用和定义范围是实体、结构体和程序包.
在程序中: 在程序中 (1) 信号值的代入采用“<=”代入符,而且信号 信号值的代入采用“ ”代入符, 代入时可以附加延时。 代入时可以附加延时。 (2) 变量赋值时用“:=”,不可附加延时。 变量赋值时用“ ” 不可附加延时。 (3) 信号的初始赋值符号仍是“:=”。 信号的初始赋值符号仍是“ ” 例: X<=Y AFTER 10 ns; ; --X,Y都是信号,且Y的值经过 都是信号, 的值经过10ns延 , 都是信号 的值经过 延 时以后才被代入X。 时以后才被代入 。
(1) 赋值语句右方的表达式必须是一个与目标变量有相同 数据类型的数值。 数据类型的数值。 (2) 变量不能用于硬件连线和存储元件。 变量不能用于硬件连线和存储元件。 (3) 变量的适用范围仅限于定义了变量的进程或子程序中。 变量的适用范围仅限于定义了变量的进程或子程序中。 (4) 若将变量用于进程之外,必须将该值赋给一个相同的 若将变量用于进程之外, 类型的信号,即进程之间传递数据靠的是信号。 类型的信号,即进程之间传递数据靠的是信号。
VHDL入门教程

什么是VHDL?
Very high speed integrated Hardware Description Language (VHDL)
★是IEEE、工业标准硬件描述语言 ★用语言的方式而非图形等方式描述硬件电路
容易修改 容易保存
★特别适合于设计的电路有:
复杂组合逻辑电路,如:
• 译码器、编码器、加减法器、多路选择器、地址译码器…...
6、结构体表达
例3-5 ARCHITECTURE arch_name OF e_name IS (说明语句 ) BEGIN arch_name 为结构体名 (功能描述语句) END ARCHITECTURE arch_name;
(说明语句)不是必须的。包括在结构体中需要说明和定义的数据对象、数 据类型、元件调用声明等; (功能描述语句)是必须的。可以是并行语句,顺序语句或是它们的混合。
一个结构体中可以包含任意个进程语句,所有的进程语句都是并行语 句。而由任一进程引导的语句结构属于顺序语句。 文件名不分大小写, 12、文件取名和存盘 VHDL文件后缀扩展名:.vhd, 尽量与实体名一致。
多路选择器VHDL描述小结
【例3-2】 … ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d <= a AND (NOT S) ; e <= b AND s ; y <= d OR e ; END ARCHITECTURE one ;
例3-4 ENTITY e_name IS PORT (p_name : port_m data_type; ………. p_namei : port_mi data_type); END ENTITY e_name;
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`。
第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语言教程

字符:(Character)
TYPE CHARACTER IS (NUL, SOH,STX, …, ‘ ’, ‘!’,…); --通常用‘’引起
字符串:(String)
精选版课件ppt
14
3.1.3 数据类型转换
VHDL为强定义类型语言,不同类型的数据不能进行运算和直接赋值。 类型标记法
Variable A: integer; Variable B: real; A= integer (B); B=real (A);
函数法
Conv_interger (A);--由std_logic转换为integer型,在std_logic_unsigned包。
上升沿:Clock’ EVENT AND Clock=‘1’
’range:生成一个限制性数组对象的范围
’range: “0 to n” ;
’reverse_range:“n downto 0”
’left:生成数据类型或数据子类型的左边界值; ’right , ’high, ’low, ’length
常用的HDL语言:VHDL 、Verilog HDL
精选版课件ppt
2
VHDL 概述:
VHDL VHSIC
VHSIC Hardwarter Description Language Very High speed integrated circuit
➢ VHDL是美国国防部在20世纪80年代初为实现其高速集成电路 硬件VHSIC计划提出的描述语言;
常数转换法 / 常量转换法
Type conv_table is array(std_logic) of bit;
VHDL语言的基本知识点罗列

VHDL语言的基本知识点罗列1 VHDL语言的标识符VHDL中的标识符可以是常数、变量、信号、端口、子程序或参数的名字。
使用标识符要遵守如下法则:a)标识符由字母(A…Z;a…z)、数字和下划线字符组成。
任何标识符必须以英文字母开头。
λ末字符不能为下划线。
λb)不允许出现两个连续下划线。
标识符中不区分大小写字母。
λVHDL定义的保留子或称关键字,不能用作标识符。
λc) VHDL中的注释由两个连续的短线(--)开始,直到行尾。
以下是非法标识符:-Decoder —起始不能为非英文字母3DOP —起始不能为数字Large#number —“#”不能成为标识符的构成符号Data__bus —不能有双下划线Copper_ —最后字符不能为下划线On —关键字不能用作标识符。
注:在AHDL语言中标识符要区分大小写,但在VHDL语言中不区分大小写。
所以写程序时,一定要养成良好的书写习惯,应用关键字时用大写,自己定义的标识符用小写。
标识符表示的几种数据对象的详细说明如下:1) 常数(Constant )常数是一个固定的值,主要是为了使设计实体中的常数更容易阅读和修改。
常数一被赋值就不能在改变。
一般格式:CONSTANT 常数名:数据类型:=表达式;例:CONSTANT Vcc: REAL: =5.0;—设计实体的电源电压指定常数所赋得值应与定义的数据类型一致。
常量的使用范围取决于它被定义的位置。
程序包中定义的常量具有最大的全局化特性,可以用在调用此程序包的所有设计实体中;设计实体中某一结构体中定义的常量只能用于此结构体;结构体中某一单元定义的常量,如一个进程中,这个常量只能用在这一进程中。
2) 变量(Variable)变量是一个局部变量,它只能在进程语句、函数语句和进程语句结构中使用。
用作局部数据存储。
在仿真过程中。
它不像信号那样,到了规定的仿真时间才进行赋值,变量的赋值是立即生效的。
变量常用在实现某种算法的赋值语句中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在结构体中定义信号
y <= a WHEN s=‘0’ ELSE b;
结构体中的语句是并行语句。 无论有多少行语句,都是同时执行,与语句的先后顺序无关。
综合适配后,选择菜单 Tools->Netlist Viewers->RTL Viewer 可 观察所生成的电路示意图。
ARCHITECTURE one OF mux21a IS BEGIN y <= a WHEN s=‘0’ ELSE b; END ARCHITECTURE one ;
3.2 VHDL基本语法
CASE语句 一定要包含所有的选择情况; 小心WHEN OTHERS条件下的赋值;
3.2 VHDL基本语法
IF语句
ARCHITECTURE one OF ex38 IS BEGIN PROCESS(sel,a,b,c,d) BEGIN IF sel=“1110” THEN ELSIF sel=“1101” THEN …… ELSE y<='0'; END IF; END PROCESS; END ARCHITECTURE one;
: OUT STD_LOGIC );
3.2 VHDL基本语法
ARCHITECTURE one OF mux41a IS BEGIN PROCESS(sel,i0,i1,i2,i3) BEGIN CASE sel IS WHEN “00” WHEN “01” WHEN “10” WHEN “11” END CASE; END PROCESS; END ARCHITECTURE one;
例:教材P93,3-8。 Sel(3 DOWNTO 0) 1110 1101 1011 0111 Others 输出y a b c d 0
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ex38 IS PORT( a,b,c,d : IN STD_LOGIC; sel : IN STD_LOGIC_VECTOR(3 DOWNTO 0); y : OUT STD_LOGIC ); END ENTITY ex38; ARCHITECTURE one OF ex38 IS BEGIN PROCESS(sel,a,b,c,d) BEGIN CASE sel IS WHEN "1110" => y<=a; WHEN "1101" => y<=b; WHEN "1011" => y<=c; WHEN "0111" => y<=d; WHEN OTHERS => y<=‘0'; END CASE; END PROCESS; END ARCHITECTURE one;
3.1 EDA开发流程
步骤3:新建输入文件(File -> new)。
原理图:Block Diagram/Schematic File;
VHDL程序:VHDL File。
3.1 EDA开发流程
步骤4:选择电路元件,画出原理图。 新建了原理图文件后,出现网格画布,在网格画布上双击鼠标左 键,会弹出Symbol窗口。
设计输入
原理图,或VHDL程序。
综合适配 仿真
时序仿真
下载
分配引脚,通过JTAG或AS下载。
硬件测试
3.1 EDA开发流程
例:实现二选一多路开关。 以原理图输入,完成电路设计。 电路元件图 逻辑电路图
3.1 EDA开发流程
步骤1:创建一个新的项目(File -> new project wizard)。 通常为每个项目建立一个文件夹,该项目所有的文件都存放在这 个文件夹下。
Sel(3 DOWNTO 0) 1110 1101 1011 0111 Others
输出y a b c d 0
CASE sel IS WHEN "1110" => y<=a; ……. WHEN OTHERS => y<=‘0'; END CASE;
CASE sel IS WHEN "1110" => y<=a; ……. WHEN OTHERS => y<=‘X'; END CASE;
3.2 VHDL基本语法
• 进程
xxx : PROCESS (n1,n2,n3) BEGIN …… END PROCESS; xxx为进程名,注意用冒号隔开。PROCESS旁的(n1,n2,n3)称 为进程的敏感信号表,通常要求将进程的所有的输入信号都放在敏感 信号表中。任一敏感信号发生变化,就执行一次进程。 一个结构体中可以包含多个进程,进程之间是并行的。 进程中的语句是顺序语句。
描述外部引脚信号的性质
功能描述语句
结 构 体ห้องสมุดไป่ตู้
ARCHITECTURE one OF mux21a IS BEGIN y <= (a AND (NOT s)) OR (s AND b); END ARCHITECTURE one ;
VHDL语言不区分大小写。
d e
结 构 体
ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d <= a AND (NOT S) ; 等效于 e <= b AND s ; y <= d OR e ; END ARCHITECTURE one ;
3.2 VHDL基本语法
例:用VHDL程序完成二选一电路的设计。 电路元件图 逻辑电路图
定义mux21a实体(ENTITY)
为mux21a定义结构体(ARCHITECTURE)
一个VHDL文件中只能有一个实体,并且文件名必须与实体名相同。 VHDL文件后缀为.vhd。
实 体
ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;
然后选择菜单项Processing -> Start Simulation 进行仿真, 仿真波形如下图所示。
默认的仿真波形文件是与项目同名的仿真文件。
3.1 EDA开发流程
步骤7:分配引脚。 选择菜单项Assignment -> Pin Planner,为实体的输入输出信 号分配引脚。 FPGA芯片中所有I/O引脚都可使用,将鼠标放在图的引脚上,会 显示提示信息。下图为将元件的a、b、s和y分别分配为芯片的 Pin32~Pin35后的情况。
选中某一信号时,窗口左边的工具条变为有效,可设置输入信号 状态,可将信号设置为0、1或指定周期的时钟信号。保存文件,文件 名随意,文件后缀为.vwf,如下图所示。
在Settings对话框中,选择Simulator Settings 选项,将 Simulation mode设置为Timing,Simulation input 设置为所存的波 形文件。
CASE语句必须包含所有可 能的情况。
‘X’ 强未知; ‘Z’ 高阻。
<= i0; <= i1; <= i2;
WHEN OTHERS => q <= ‘X’; END CASE; END PROCESS; END ARCHITECTURE one;
3.2 VHDL基本语法
3.2 VHDL基本语法
ARCHITECTURE one OF mux21a IS BEGIN PROCESS( a, b, s ) BEGIN IF s = '0' THEN y <= a ; ELSE y <= b ; END IF; END PROCESS; END ARCHITECTURE one ;
定义进程,括号中说明 敏感信号。
3.2 VHDL基本语法
例:设计一个四选一多路开关。
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux41a IS PORT( i0,i1,i2,i3 : IN sel : IN q END ENTITY mux41a; STD_LOGIC; STD_LOGIC_VECTOR(1 DOWNTO 0);
Create\Update -> Create Symbol Files for Current File将
mux21a封装成一个元件。 原理图文件名就是元件的类型名。如同and2一样,在symbol 对话框中可以看到mux21a元件。
3.1 EDA开发流程
常用工具按钮如下图所示。
阅读安排:阅读教材4.1、4.2节。 练习:从网上下载练习1.doc和mux21a.zip,完成练习1。 项目mux21a中已经实现了二选一电路,并进行了时序仿真。 熟悉Quartus的开发环境; 以mux21a为基本元件,以原理图方式实现四选一电路。
3.1 EDA开发流程
可直接在Name栏中输入想要元件的类型,例如input、output、 and2、or2、not等。也可在Libraries栏中查看和选择选择想要的元 件。然后单击OK键,将元件放在画布上即可。
画布上的元件可以复制粘贴。双击输入/输出引脚,修改引脚名。 用鼠标左键拖动将元件连接起来,形成如下电路图。
存盘,文件名随意,原理图的文件后缀为.bdf,文件会添加到项 目中。在Quartus窗口左边的Project Navigator中会列出项目中所有 文件。 选中该bdf文件,单击右键弹出快捷菜单,选择菜单项Set as Top-Level Entity选项,将文件设置为项目的顶层实体。 默认的顶层实体为与项目同名的设计文件。
下载成功后,断电拔掉下载头,重新上电程序自动运行。
3.1 EDA开发流程
例:以已完成的二选一多路开关为元件,实现四选一电路。 s1=‘0’, s0=‘0’时输出y=ain; s1=’0’, s0=‘1’时输出y=bin; s1=‘1’ , s0=‘0’时输出y=cin; s1=‘1’ , s0=‘1’时输出y=din; 打开mux21a.bdf原理图设计文件,选择菜单项File ->