《vhdl语言入门知识PPT》由会员分享,可在线阅读,更多相关《vhdl语言入门知识PPT(69页珍藏版)》请在金锄头文库上搜索。
1、VHDL语言第一章VHDL初探 1.1 VHDL1.1 VHDL简介简介HDL语言是一种支持用形式化方法来描述数字逻辑电路和系统的语言VHDL语言源于美国国防部发起的VHSIC(VeryHigh Speed Integrated Circuits)计划1987年12月IEEE批准VHDL为标准HDL语言(IEEE-1076), 称为VHDL871993年修订为VHDL93 ,2001年修订为VHDL 2001IEEE-1076.1 VHDL-AMS, IEEE-1076.2 Mathematical Packages, IEEE-1076.3 Synthesis Packages, IEEE-
2、1076.4 VITAL, IEEE Standard 1164 Multi-value Logic System1.1.1 VHDL特点 1.1.支持支持“ “自顶向下自顶向下” ”的设计方法的设计方法 VHDL语言支持自顶向下的系统划分,直至划分后的最底层单元能用图元(primitive element)来实现为止 图元就是基本逻辑单元、宏模型或IP_core 2.2.系统硬件描述能力强系统硬件描述能力强 3.3.系统仿真能力强系统仿真能力强 最初是作为仿真标准推出最初是作为仿真标准推出 4.4.工艺无关性工艺无关性 与使用的芯片无关与使用的芯片无关 5.5.其他其他 并行性并行性1.1.
3、2 设计流程 1.1.画出系统框图画出系统框图 2 2 编码:写程序编码:写程序 3.3.编译编译 语法检查语法检查 4.4.功能仿真功能仿真 验证系统功能是否正确,不涉及硬件验证系统功能是否正确,不涉及硬件 5.5.综合综合 1.1.生成门级描述的网表文件生成门级描述的网表文件2.2.转换为硬件的关键步骤转换为硬件的关键步骤3.3.可以设定一些约束可以设定一些约束 6.6.适配适配 利用网表文件针对某一目标器件进行逻辑操作利用网表文件针对某一目标器件进行逻辑操作 如:器件配置、如:器件配置、 逻辑分割、逻辑逻辑分割、逻辑优化、布局布线优化、布局布线 7.7.时序仿真时序仿真适配后的仿真适配后
4、的仿真8.8.下载到器件下载到器件 1.1.3如何学好1.掌握时钟的概念2.注意和软件编程的区别3.语法贵精,不在多,靠练不靠背4.注意可综合性第二章 VHDL入门2.1 VHDL程序结构1.库 存放已经编译的包集合、实体、结构体和配置。(像C语言里的库)2.包:声明在实体中用的信号定义、常数定义、数据类型、元件语句、函数定义等3.实体 : 定义电路的输入和输出接口4.结构体:描述电路的内部结构2.1.1实体 定义电路的输入和输出接口定义电路的输入和输出接口 格式格式entity isgeneric ();port ( 端口名1:端口方向 端口类型;端口名2:端口方向 端口类型; 端口名n:端
5、口方向 端口类型);end ;2.1.1实体格式说明(1)实体名 :名称一般与文件名相同。(2)类属参数: 提供用于规定端口大小、元件数目、定时的参数(3)端口名设计者用于定义端口引脚名,一般名称有实际意义(4)端口方向端口方向1. 1. 输入输入 InIn 注意:只能做输入,即所定义的管脚只能放在等式注意:只能做输入,即所定义的管脚只能放在等式的右边的右边2.2.输出输出 outout注意:只能做输出,即所定义的管脚只能放在等式注意:只能做输出,即所定义的管脚只能放在等式的左边的左边3.3.双向双向 inoutinout 双向即可双向即可做输入也可做输出,注意:管脚做为输出做输入也可做输出,
6、注意:管脚做为输出后,必须置为高阻态后,才能做输入后,必须置为高阻态后,才能做输入4.4.输出输出 buffer buffer 输出,结构体内部可读取输出,结构体内部可读取 (5) 端口类型Std_logic,std_logic_vector,integer补充说明1.可将几个方向、类型相同的信号放在一个语句中 a,b : in std_logic;2.最后一条端口说明语句后不可加分号。3.实体名和端口名 (1 1) 必须是字母和数字以及必须是字母和数字以及_ _ 下划线组成,并且开头必须是下划线组成,并且开头必须是字母字母 (2 2) 不能是保留字不能是保留字 2.1.2 结构体一个实体可对
7、应多个结构体,同一时刻只有一个结构体起作用,可以通过配置语句决定哪一个结构体起作用注意: 我们只用一个结构体2.1.2 结构体语法格式:语法格式:architecture 结构体名 of 实体名 is声明语句区Begin语功能描述语功能描述句end 结构结构体名;实体名必须与实体声明部分所取的名字相同2.1.2 结构体注意:声明语句用于说明和定义内部信号、常量、数据类型、子过程、元件等内部说明信号不必规定信号方向功能描述语句允许信号赋值、块、进程、子程序调用、生成、元件例示等语句功能描述语句主要用到1.进程语句2. 信号赋值语句3.元件例化语句例2.1.3 库和包的调用library IEEE
8、;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;2.2 VHDL 基本数据类型强数据类型语言,只有相同数据类型的量才能互相传递。2.2.1 VHDL预定义数据类型 1.1.布尔数据类型布尔数据类型值范围true(1)、false (0) 用于逻辑关系用于逻辑关系 2. 2. 位数据类型位数据类型Bit 0 Bit 0 ,1 1 3. 3. 位矢量数据类型位矢量数据类型位矢量基于位的数组位矢量基于位的数组Bit_vector(0 to n);Bit_vector(n
9、 downto 0);关键字 TO 表示数组从左到右升序排列关键字 downto 表示数组从右到左降序排列使用downto2.2.1 预定义数据类型4.整数数据类型 integer range to range to 必有32位取值范围 -(231-1)( 231-1)补码形式其他数据类型 错误等级、实数和时间等不能综合2.2.2 IEEE 预定义标准逻辑位与矢量1.1.标准逻辑位数据类型标准逻辑位数据类型 std_logicstd_logic 九值系统九值系统 四种状态可被综合四种状态可被综合 0 0,1 1,“ “-” -”,Z Z2.2.标准逻辑位矢量数据类型标准逻辑位矢量数据类型标准逻
10、辑位矢量数据类型是基于标准逻辑位数据类标准逻辑位矢量数据类型是基于标准逻辑位数据类型的数组型的数组 std_logic_vector(0 to n)std_logic_vector(0 to n) std_logic_vector(nstd_logic_vector(n downtodownto 0) 0) 同同bit_vectorbit_vector 2.2.3 用户自定义数据类型1.枚举数据类型 语法格式TYPE 数据类型名 is(元素1,元素2,);用于状态机例TYPE state_type is(start,step1,step2,final);Signal state : state
11、_type;数据类型总结 1.1.编程中只使用编程中只使用std_logicstd_logic, , std_logic_vector,integerstd_logic_vector,integer和枚举数和枚举数据类型据类型其中其中枚举数据类型用于状态机枚举数据类型用于状态机 integerinteger尽量不用尽量不用2.2.数的表示数的表示矢量(即大于矢量(即大于1 1位宽)位宽) 二进制二进制 b” “ bb” “ b可以省略可以省略八进制八进制 o” “ o” “ 可以表示位宽为可以表示位宽为3 3的倍数的倍数十六进制十六进制 x “x “可以表示位宽为可以表示位宽为4 4的倍数的倍
12、数十进制十进制 n n标量标量用单引号用单引号 2.3 VHDL 数据对象3种 : 信号(signal)、变量(Variable)和常量(constant)变量(Variable)和常量(constant)于软件高级语言中的相似信号具有硬件特性,特有的数据对象。2.3.1 信号信号是用来描述实体内部节点的数据类型信号是用来描述实体内部节点的数据类型语法格式语法格式signal 信号名 ,:数据类型数据类型 ;例如:signal temp_sum:std_logic_vector(3 downto0) ;signal a, b:std_logic;1.信号和端口都描述电路中的实际存在的节点,只是
13、信号描述的是内部节点,而端口则描述实体与外界的接口2.实体有方向,其他一样3.信号赋值语句格式 目标信号名 = 表达式例:见书34页4.赋值语句等式两边的位数要相等 例(书35页5. 信号的赋值具有“非立即性” 会有延时2.3.2 变量 1.1.只能在进程和子程序中使用,用于描述算法和方面程序中只能在进程和子程序中使用,用于描述算法和方面程序中的数值运算。的数值运算。 2.2.语法格式语法格式variable 变量名,:数据类型;3.赋值语句的格式 目标变量名:= 表达式;4.变量和信号区别信号对应具体的硬件,变量无硬件对应信号赋值有延时性,变量赋值无延时性5.*我们这门课不用2.3.3 常数
14、书写格式: constant 常量名 :数据类型 := ;作用:1.保证常数描述的数据在程序中不会因误操作被改变2.对程序中某些关键数据值命名,可以提高程序的可读性3.将出现次数多的关键数值用数值表示,易于修改例2.4 VHDL运算符2.4.1 算术运算符+,-*,/*,MOD,REM,ABS+,-,* 可以综合,但不推荐用*,如果用乘法,选用库函数/ 只有除数是2的N次幂才能综合,不用如果用的话,选用库函数其他不能综合。2.4.2 并置运算符& 用于多个元素或矢量连接成新的矢量例2.4.3 关系运算符= 、/=、 、=2.4.4 逻辑运算符Not 优先级最高And,or,nor,xor,xn
15、or,nand优先级无从左到右的结合顺序用括号例2.5 并行语句1.区别于软件语言。2.所有语句同时执行,与书写顺序无关。3.并行语句的内部可以是并行的,也可以是顺序的(进程语句)。主要有: 进程语句、并行信号赋值语句、元件例化语句、生成语句。2.5.1 并行信号赋值语句1.简单信号赋值语句目标信号名 = 表达式;2.选择信号赋值语句语法格式:语法格式:with 选择表达式 select 赋值信号名 = 表达式表达式 1 when 选择值选择值1, 表达式表达式 2 when 选择值选择值2, 表达式表达式 n when others;表达式是指某一值、某一个信号或运算式(同表达式是指某一值、
16、某一个信号或运算式(同C语言)语言)用用| 符号表示或符号表示或2.选择信号赋值语句注意:1.选择值必须互斥2.选择值必须覆盖所有可能情况,若不能一一指定,要用others3.由于用Std_logic,所以必须用others4.无优先级例8路4选一复用器3.条件信号赋值语句语法格式赋值目标信号赋值目标信号 顺序语句;when 选择值选择值|选择值选择值 =顺序语句; . when others = 顺序语句;end case ;1.无优先级2.选择值不可重复3. others必有3.Loop语句:for 循环变量 in 变量变量范围 loop 顺序语句; end loop ;1)循环变量 仅在
17、仅在loop语句中有效,不需事先定义,但不语句中有效,不需事先定义,但不能与能与process声明中的变量同名声明中的变量同名2)变量)变量范围 “ to ” 或 “ downto ”3)标号不是必须的4)主要为了书写方便例1 书上2 移位寄存器FPGA内部结构ISE软件使用VHDL编程的要求1.语法总结编程1.组合逻辑电路数据选择器、译码器、BCD译码器等2.时序电路1)D触发器(时钟使能,异步复位等)2)计数器(时钟使能,异步复位,初值加载)3)分频器(偶分频,奇分频)4)分频使能信号产生5)计数器(多个时钟计一次)3.状态机交通灯计数器4.数码管显示1.动态扫描2.秒表5.接口电路1.波形产生2.串口发送3.tlc5494.ddr内存条的初始化5.其他