《vhdl语言入门知识PPT.ppt》由会员分享,可在线阅读,更多相关《vhdl语言入门知识PPT.ppt(69页珍藏版)》请在三一办公上搜索。
1、VHDL语言,第一章VHDL初探,1.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-1076.4 VITAL,I
2、EEE Standard 1164 Multi-value Logic System,1.1.1 VHDL特点,1.支持“自顶向下”的设计方法 VHDL语言支持自顶向下的系统划分,直至划分后的最底层单元能用图元(primitive element)来实现为止 图元就是基本逻辑单元、宏模型或IP_core2.系统硬件描述能力强3.系统仿真能力强 最初是作为仿真标准推出4.工艺无关性 与使用的芯片无关5.其他 并行性,1.1.2 设计流程,1.画出系统框图2 编码:写程序3.编译 语法检查4.功能仿真 验证系统功能是否正确,不涉及硬件5.综合 1.生成门级描述的网表文件2.转换为硬件的关键步骤3.
3、可以设定一些约束6.适配 利用网表文件针对某一目标器件进行逻辑操作 如:器件配置、逻辑分割、逻辑优化、布局布线7.时序仿真适配后的仿真8.下载到器件,1.1.3如何学好,1.掌握时钟的概念2.注意和软件编程的区别3.语法贵精,不在多,靠练不靠背4.注意可综合性,第二章 VHDL入门,2.1 VHDL程序结构1.库 存放已经编译的包集合、实体、结构体和配置。(像C语言里的库)2.包:声明在实体中用的信号定义、常数定义、数据类型、元件语句、函数定义等3.实体:定义电路的输入和输出接口4.结构体:描述电路的内部结构,2.1.1实体,定义电路的输入和输出接口格式entity isgeneric();p
4、ort(端口名1:端口方向 端口类型;端口名2:端口方向 端口类型;端口名n:端口方向 端口类型);end;,2.1.1实体,格式说明(1)实体名:名称一般与文件名相同。(2)类属参数:提供用于规定端口大小、元件数目、定时的参数(3)端口名设计者用于定义端口引脚名,一般名称有实际意义(4)端口方向,端口方向,1.输入 In 注意:只能做输入,即所定义的管脚只能放在等式的右边2.输出 out注意:只能做输出,即所定义的管脚只能放在等式的左边3.双向 inout 双向即可做输入也可做输出,注意:管脚做为输出后,必须置为高阻态后,才能做输入4.输出 buffer 输出,结构体内部可读取,(5)端口类
5、型Std_logic,std_logic_vector,integer,补充说明,1.可将几个方向、类型相同的信号放在一个语句中 a,b:in std_logic;2.最后一条端口说明语句后不可加分号。3.实体名和端口名(1)必须是字母和数字以及_ 下划线组成,并且开头必须是字母(2)不能是保留字,2.1.2 结构体,一个实体可对应多个结构体,同一时刻只有一个结构体起作用,可以通过配置语句决定哪一个结构体起作用注意:我们只用一个结构体,2.1.2 结构体,语法格式:architecture 结构体名 of 实体名 is声明语句区Begin语功能描述句end 结构体名;实体名必须与实体声明部分所
6、取的名字相同,2.1.2 结构体,注意:声明语句用于说明和定义内部信号、常量、数据类型、子过程、元件等内部说明信号不必规定信号方向功能描述语句允许信号赋值、块、进程、子程序调用、生成、元件例示等语句,功能描述语句主要用到1.进程语句2.信号赋值语句3.元件例化语句例,2.1.3 库和包的调用,library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;,2.2 VHDL 基本数据类型,强数据类型语言,只有相同数据类型的量才能互相传递。,2.2.1 VH
7、DL预定义数据类型,1.布尔数据类型值范围true(1)、false(0)用于逻辑关系2.位数据类型Bit 0,1 3.位矢量数据类型位矢量基于位的数组Bit_vector(0 to n);Bit_vector(n downto 0);关键字 TO 表示数组从左到右升序排列关键字 downto 表示数组从右到左降序排列使用downto,2.2.1 预定义数据类型,4.整数数据类型 integer range to range to 必有32位取值范围-(231-1)(231-1)补码形式,其他数据类型 错误等级、实数和时间等不能综合,2.2.2 IEEE 预定义标准逻辑位与矢量,1.标准逻辑位
8、数据类型 std_logic 九值系统 四种状态可被综合 0,1,“-”,Z2.标准逻辑位矢量数据类型标准逻辑位矢量数据类型是基于标准逻辑位数据类型的数组 std_logic_vector(0 to n)std_logic_vector(n downto 0)同bit_vector,2.2.3 用户自定义数据类型,1.枚举数据类型 语法格式TYPE 数据类型名 is(元素1,元素2,);用于状态机例TYPE state_type is(start,step1,step2,final);Signal state:state_type;,数据类型总结,1.编程中只使用std_logic,std_l
9、ogic_vector,integer和枚举数据类型其中枚举数据类型用于状态机 integer尽量不用2.数的表示矢量(即大于1位宽)二进制 b”“b可以省略八进制 o”“可以表示位宽为3的倍数十六进制 x“可以表示位宽为4的倍数十进制 n标量用单引号,2.3 VHDL 数据对象,3种:信号(signal)、变量(Variable)和常量(constant)变量(Variable)和常量(constant)于软件高级语言中的相似信号具有硬件特性,特有的数据对象。,2.3.1 信号,信号是用来描述实体内部节点的数据类型语法格式signal 信号名,:数据类型;例如:signal temp_sum
10、:std_logic_vector(3 downto0);signal a,b:std_logic;,1.信号和端口都描述电路中的实际存在的节点,只是信号描述的是内部节点,而端口则描述实体与外界的接口2.实体有方向,其他一样3.信号赋值语句格式 目标信号名=表达式例:见书34页,4.赋值语句等式两边的位数要相等 例(书35页5.信号的赋值具有“非立即性”会有延时,2.3.2 变量,1.只能在进程和子程序中使用,用于描述算法和方面程序中的数值运算。2.语法格式variable 变量名,:数据类型;3.赋值语句的格式 目标变量名:=表达式;4.变量和信号区别信号对应具体的硬件,变量无硬件对应信号赋
11、值有延时性,变量赋值无延时性5.*我们这门课不用,2.3.3 常数,书写格式:constant 常量名:数据类型:=;作用:1.保证常数描述的数据在程序中不会因误操作被改变2.对程序中某些关键数据值命名,可以提高程序的可读性3.将出现次数多的关键数值用数值表示,易于修改例,2.4 VHDL运算符,2.4.1 算术运算符,+,-*,/*,MOD,REM,ABS+,-,*可以综合,但不推荐用*,如果用乘法,选用库函数/只有除数是2的N次幂才能综合,不用如果用的话,选用库函数其他不能综合。,2.4.2 并置运算符,&用于多个元素或矢量连接成新的矢量例,2.4.3 关系运算符,=、/=、=,2.4.4
12、 逻辑运算符,Not 优先级最高And,or,nor,xor,xnor,nand优先级无从左到右的结合顺序用括号例,2.5 并行语句,1.区别于软件语言。2.所有语句同时执行,与书写顺序无关。3.并行语句的内部可以是并行的,也可以是顺序的(进程语句)。主要有:进程语句、并行信号赋值语句、元件例化语句、生成语句。,2.5.1 并行信号赋值语句,1.简单信号赋值语句目标信号名=表达式;,2.选择信号赋值语句,语法格式:with 选择表达式 select 赋值信号名=表达式 1 when 选择值1,表达式 2 when 选择值2,表达式 n when others;表达式是指某一值、某一个信号或运算
13、式(同C语言)用|符号表示或,2.选择信号赋值语句,注意:1.选择值必须互斥2.选择值必须覆盖所有可能情况,若不能一一指定,要用others3.由于用Std_logic,所以必须用others4.无优先级,例,8路4选一复用器,3.条件信号赋值语句,语法格式赋值目标信号=表达式1 when 赋值条件1 else 表达式2 when 赋值条件2 else。表达式n when 赋值条件n else 表达式;有优先级,例,8输入优先编码器,2.5.2 进程语句,特点1.本身是并行语句,内部是顺序语句2.进程只有在特定的时刻(敏感信号发生变化时)才会被激活。3.主要用于时序电路注意:1、2主要从语法上
14、说的,1.进程语句的语法格式,进程标号:process(敏感信号表)is声明区Begin 顺序语句;end process 进程标号;注:(敏感信号表)信号名1,信号名,1.进程标号 不是必需的,主要是提高可读性2.敏感信号参数表 进程只有在敏感信号发生变化是才被激活注意:一个进程可有多个敏感信号,任一敏感信号变化都能激活进程。,3.定义一些局部量,如变量4.顺序语句,2.2进程的工作原理,12,3.进程与时钟,(1)进程与时钟的关系时钟上升沿或下降沿是敏感信号每个上升沿或下降沿启动一次进程,执行进程中所有语句,而不是执行一条语句。,(2)时钟沿的VHDL描述法,上升沿Clockevent a
15、nd clock=1Rising_edge(clock)下降沿Clockevent and clock=0falling_edge(clock)其中clock是定义的时钟信号,也可以用其他符号定义如:clk,实例,2分频,5.进程要点,1)进程语句本身是并行语句,内部是顺序语句(从语法上)2)进程在敏感信号发生变化时被激活(从语法上)3)在同一进程中对同一信号多次赋值,只有最后一次有效(重要)例4)在不同进程中,不可对同一信号进行赋值5)一个进程不可对时钟上升沿和下降沿同时敏感,没有这种器件。?例6)进程中信号赋值是在进程挂起是生效的,变量赋值是即时生效的。,2.6 顺序语句,特点:每一条顺序
16、语句的执行顺序与其书写顺序对应,改变顺畅语句的书写顺序有可能改变(不是必然)综合结果。顺序语句只能出现在进程和子程序中。,注意:顺序执行是指仿真意义上的顺序性,并不指对应的硬件结构有顺序性。硬件是并行执行的。,2.6.1 赋值语句,信号赋值和变量赋值注意:信号赋值的延时性和变量赋值立即性例,2.6.2 流程控制语句,1.if语句 if 条件式 then 顺序语句;elsif 条件 式 then 顺序语句;else 顺序语句;end if;顺序语句是指所有的顺序语句,If语句,1)if语句可以嵌套,但不易太多2)不能有比clk信号(上升沿或下降沿)优先级更低的else或elsif语句,Case
17、语句,case 表达式 is when 选择值|选择值=顺序语句;when 选择值|选择值=顺序语句;.when others=顺序语句;end case;,1.无优先级2.选择值不可重复3.others必有,3.Loop语句,:for 循环变量 in 变量范围 loop 顺序语句;end loop;1)循环变量 仅在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.其他,