首页 EDA技术及应用第3章 硬件描述语言VHDL

EDA技术及应用第3章 硬件描述语言VHDL

举报
开通vip

EDA技术及应用第3章 硬件描述语言VHDL第三章硬件描述语言VHDL 3.1VHDL简介 1.什么是VHDL?用来实现硬件电路结构描述的语言称之为硬件描述语言(HardwareDescribeLanguage,简称HDL)。计算机软件的设计和一般电路设计类比: 计算机软件的设计电路设计 机器码←→晶体管/CMOS管 汇编语言←→网表 高级语言←→HDL语言HDL在语法和风格上类似于计算机高级编程语言。目前使用最广泛的硬件描述语言是VHDL和VerilogHDL。本章主要介绍VHDL语言。 2.VH...

EDA技术及应用第3章 硬件描述语言VHDL
第三章硬件描述语言VHDL 3.1VHDL简介 1.什么是VHDL?用来实现硬件电路结构描述的语言称之为硬件描述语言(HardwareDescribeLanguage,简称HDL)。计算机软件的设计和一般电路设计类比: 计算机软件的设计电路设计 机器码←→晶体管/CMOS管 汇编语言←→网表 高级语言←→HDL语言HDL在语法和风格上类似于计算机高级编程语言。目前使用最广泛的硬件描述语言是VHDL和VerilogHDL。本章主要介绍VHDL语言。 2.VHDL的主要特点 1)功能强大,灵活性高; 2)器件无关性:VHDL语言允许设计者在进行设计时,不需要首先选择一个具体的器件; 3)可移植性:采用VHDL进行的设计可以被不同的EDA工具所支持; 4)支持自顶向下的设计方法; 5)数据类型丰富; 6)运行库和程序包丰富; 7)系统仿真和硬件实现; 3.注意: 1)编写VHDL程序,就是在描述一个电路。 2)所有的VHDL描述都可以用于仿真,但不是所有的VHDL描述都能用硬件实现。” 3)VHDL语言描述的是硬件电路,它遵循硬件电路的特点,语句的执行没有先后顺序,是并发的执行的;而且语句的执行不象普通软件那样每条指令占用一定的时间,只是遵循硬件电路自身的延迟时间。 4)进行较复杂可编程逻辑电路设计时,通常建议采用原理图和VHDL结合的方法来设计。 3.2VHDL程序的基本结构 1.基本结构: 一个VHDL设计(项目或工程)可以由若干个VHDL文件构成,一般每个文件结构如下: 2.实体 实体是设计中最基本的模块。 实体实体中定义了该设计所需的输入/输出信号,信号的输入/输出类型(即端口模式)及数据类型。 1)实体的 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 如下: entity<entity_name实体名>is port <portlistforyourdesign,列出设计的输入/输出 信号端口> end<entity_name>; 2)例如:四位二进制计数器,则该计数器的实体部分如下: entitycntm16is --实体 port (ci :in std_logic; nreset:in std_logic; clk :in std_logic; co :out std_logic; qcnt :bufferstd_logic_vector(3downto0) ); endcntm16; 上述实体对应的原理图符号如下图: 3)说明: 每个端口必须定义:端口信号名、端口模式及端口数据类型。 1)信号名:端口信号名在实体中必须是唯一的。 2)端口模式(MODE):决定信号的流向;端口模式有以下几种类型:IN输入端口,信号进入实体但并不输出;OUT输出端口,信号离开实体但并不输入,并且不会在内部反馈使用;INOUT输入输出端口,信号是双向的(既可以进入实体,也可以离开实体);BUFFER缓冲端口,信号输出到实体外部,但同时也在实体内部反馈。其方向主要是输出,不可以作为输入口使用。但BUFFER模式的I/O输出到端口的信号可以反馈至器件内部。 3结构体 结构体描述实体的行为功能。 一个实体可以使用3种不同的方式 行为描述; 结构描述; 数据流的描述。 1)结构体的一般格式如下: architecture<architecture_name结构体名>of<entity_name>is --结构体声明区域 -声明结构体所用的内部信号及数据类型 --如果使用元件例化,则在此声明所用的元件 begin--以下开始结构体,用于描述设计的功能 --concurrentsignalassignments并行语句信号赋值 --processes进程(顺序语句描述设计) --componentinstantiations元件例化 end<architecture_name>; 2)结构体构成示意图: 3)例如:上述四位计数器的结构体(Architecture)如下: architecturebehaveofcntm16is begin co<=‘1’when(qcnt=“1111”andci=‘1’)else‘0’;--并行赋值语句 process(clk,nreset) --进程(敏感表) begin if(nreset='0')then--顺序语句 qcnt<="0000"; elsif(clk'eventandclk='1')then if(ci='1')then qcnt<=qcnt+1; endif; endif; endprocess; endbehave;4库、程序包和配置1)程序包(Package) 程序包定义了一组数据类型说明、常量说明、元件说明和子程序说明。以供其他多个设计实体引用。 2).库(Library) 库是专门存放预先编译好的程序包(package)的地方,这样它们就可以在其它设计中被调用。例如,在上述计数器设计中开始部分有:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all; 说明: ●STD库是VHDL的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 库,为所有设计 单元 初级会计实务单元训练题天津单元检测卷六年级下册数学单元教学设计框架单元教学设计的基本步骤主题单元教学设计 所共享、默认的库,只要在VHDL应用环境中,就可随时调用这个库中的STANDARD包中的所有内容,不必显式调用。 ●IEEE库是VHDL设计中最常见的库,它包含IEEE标准的程序包和其他一些支持工业标准的程序包。 ●两个USE语句使得以下设计可使用程序包std_logic_1164、std_logic_unsigned中预定义的内容。 3)配置 一个实体可用多个结构体描述,在具体综合时选择哪一个结构体来综合,则由配置来确定。3.3VHDL的语法要素 1.VHDL文字 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf (1)标识符 是描述VHDL语言中端口、信号、常数、变量以及函数等的名称的字符串 VHDL'87标识符书写规则如下: 1)使用的字符:26个英文字母,数字0~9以及下划线。 2)标识符必须以英文字母开始。 3)下划线的前后必须是英文字母。 4)VHDL中用于标识符的英文字母不区分大小写。 5)标识符中不能有空格。 6)标识符不能与VHDL的关键字重名。 (2)数字型文字 列举如下: 8,34,0,64E3(64000),234_567(=234567); 199.883,234_567.452_808,1.0,1.336 (目前在CPLD/FPGA的应用中综合器不支持实数类型。) 以数制基数表示的文字: 10#280#--(280) 10#170#E2--(17000指数形式) 16#FE#--(254) 2#1111_1110# --(254) 8#376#--(254) (3).字符串 字符串是一维的字符数。 VHDL中包含有两种类型的字符串:文字字符串和数位字符串。 1)文字字符串是用双引号括起来的一串文字,如:“BBS”。 主要用来做注释或信息提示 2)数字字符串称为矢量,代表数组(元素)。 例如:    B"1_1101_1100"二进制数数组,9位 O"14"八进制数数组,6位 X“AB0”十六进制数数组,12位 主要用于VHDL中由bit_vector或std_logic_vector定义的数组。 2VHDL数据对象 VHDL语言常用的数据对象为信号、常量、变量。 1)常量在设计描述中保持某一 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 类型的特定值不变。 常量(Constant)常量的描述格式: CONSTANT常数名:数据类型:=表达式; 2)信号(Signal)用于声明内部信号,其在元件之间起互联作用,可以赋值给端口信号。 信号可以在实体、构造体、包集合中说明。 信号的描述格式: SIGNAL信号名:数据类型:=表达式; 信号的赋值: 目标信号名<=表达式; 3)变量(Variable) 变量只在给定的进程中用于声明局部值,它的作用范围也仅限于定义变量的模块。 变量的描述格式: VARIABLE变量名:数据类型:=初始值 变量的赋值: 变量名:=表达式; 3VHDL数据类型 (1)常用标准的数据类型(VHDL预定义) 1)整数(integer)整数的表达范围为: -2147483647(-231)—2147483647(231) 可用32位有符号的二进制数表示,但不能按位进行访问。 2)实数(real)如:66.36、8#43.6#E+4。 3)位(bit),取值:0或1。 4)位矢量(bit_vector),是用双引号括起来的一组“位”数据。 例如:“0000”。 位矢量使用时一般要注明位宽,即元素的个数和排列。 例如: signala:std_logic_vector(7downto0); (2)用户自定义的数据类型 TYPE语句用法: type数据类型名is数据类型定义of基本数据类型; 例如: typest1isarray(0to15)ofstd_logic; typem_stateis(st0,st1,st2,st3,st4,st5); 4运算操作符 与传统的程序设计语言一样,VHDL各种表达式中的基本元素也是由不同类型的运算符相连而成的。 见教材表3-5VHDL操作符列表。 3.4VHDL结构体的描述方式 根据数字电路的工作方式的特点,VHDL语句有: 并行(Concurrent)描述语句; 顺序(Sequential)描述语句; 进程Process; 进程(process)语句具有顺序和并行两个特征。 1顺序描述语句 顺序语句,即将完全按照程序中出现的先后顺序来执行语句,而且前面语句的执行结果可能直接影响后面语句的结果。 顺序语句只能出现在进程和子程序中,子程序包括函数(function)和过程(procedure)。 常用顺序语句如下: (1).赋值语句 信号赋值语句格式为: 信号赋值目标:<=赋值源。 变量赋值格式为: 变量赋值目标:=赋值源。 变量赋值符号只能在顺序语句中使用。 变量只能在进程或子程序中使用,无法传递到进程之外。 (2).流程控制语句 格式一: if条件then 顺序语句; endif; 格式二: if条件then 顺序语句 else 顺序语句 endif; (3)case语句的结构如下: case表达式is when选择值=>顺序语句; when选择值=>顺序语句; … [whenothers=>顺序语句;] endcase; (4)loop语句 单loop语句语法格式: [标号:]loop 顺序语句 endloop [标号]; (5)for……loop语句语法格式: [标号:]for循环变量in循环次数范围loop 顺序语句; endloop[标号]; (6)while…loop语句的语法格式: [标号:]while循环控制条件loop 顺序语句 endloop[标号]: VHDL基本顺序语句还有: 等待语句(wait) 子程序调用语句(删除)、 返回语句 空操作(null)语句等。 2并行描述语句 并行语句具有多种语句格式,各种并行语句在结构体中的执行是同步进行的。 每一并行语句内部的语句运行方式又可以为: 并行执行方式(如并行块语句内部) 顺序执行方式(如进程语句内部)。 并行语句在结构体中的使用格式如下: architecture结构体名of实体名is 说明语句; begin 并行语句; endarchitecture结构体名; (1)并行信号赋值语句 1)信号赋值目标<=表达式 2)条件信号赋值语句 条件信号赋值语句的表达方式如下: 赋值目标<=表达式when赋值条件else 表达式when赋值条件else … 表达式; 3)选择信号赋值语句 选择信号赋值语句格式如下: with选择表达式select 赋值目标信号<=表达式when选择值, 表达式when选择值, … 表达式when选择值, [表达式whenothers]; 例: 四选一选择赋值语句的使用 libraryieee; useieee.std_logic_1164.all; entityselsigis port(d0,d1,d2,d3:instd_logic; s:inintegerrange0to3; output:outstd_logic); endselsig; architecturemaxpldofselsigis begin withsselect output<=d0when0, d1when1, d2when2, d3when3; endmaxpld; (2)元件例化语句 元件例化就是一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前设计实体中的端口相连接。 元件例化语句由元件声明和元件例化两部分组成。 元件声明是将一个现成的设计实体定义为元件,即完成元件的封装; 元件例化是对元件声明中定义的元件端口与当前设计实体端口或信号连接关系的说明。 注意:元件例化中的实体是必须存在的。 1)元件声明格式如下: component元件名 generic(类属表) port(端口名表); endcomponent; 2)元件例化格式如下: 例化名:元件名portmap([端口名=>]连接端口名,……); 元件例化语句中所定义的元件端口名与当前设计实体的连接端口名的接口有两种表达方式: 名字关联方式:例化元件的端口名和连接端口名一一对应。 位置关联方式:元件端口名和关联连接符号都可以省略,但要求元件例化portmap语句中的信号名书写顺序和元件端口声明语句中的信号名位置一一对应。 例:元件例化及应用 下面为一个与非门mand2描述: libraryieee; useieee.std_logic_1164.all; entitymand2is port(a,b:instd_logic; c:outstd_logic); endmand2; architecturemand2bofmand2is begin c<=anandb; endmand2b; usework.mand2.all; libraryieee; useieee.std_logic_1164.all; entityordis port(a1,b1,c1,d1:instd_logic; z1:outstd_logic); endord; architectureordbofordis componentmand2 port(a,b:instd_logic; c:outstd_logic); endcomponent; signalx,y:std_logic; begin U1:mand2portmap(a1,b1,x);--位置关联 U2:mand2portmap(a=>c1,c=>y,b=>d1);--名字关联 U3:mand2portmap(x,y,c=>z1); --混合关联方式 end[architecture]ordb; (3)生成语句 用来产生多个相同的结构 生成语句格式如下: [标号:]for变量in取值范围generate 说明部分 并行语句 endgenerate[标号]; 例如: forIin1to5generate--递增方式 forIin5downto1generate--递减方式 (4)进程Process process语句为并行语句,但其内部为顺序语句。 一个结构体可以包含多个进程语句。 例如: process(clk,nreset) --进程(敏感表clk,nreset) begin if(nreset='0')then--顺序语句异步清零 qcnt<="0000"; elsif(clk'eventandclk='1')then if(ci='1')then qcnt<=qcnt+1; endif; endif; endprocess; 说明: 1)在敏感表中,信号nreset,clk被列为敏感信号,当此两个信号变化时,此进程才被执行(或使用一个显式的WAIT语句来激活)。 2)虽然同一结构体中的进程之间是并行运行的,但同一进程中的逻辑描述语句则是顺序运行的,因而在进程中只能设置顺序语句。 3)一个进程中只允许描述对应于一个时钟信号的同步时序逻辑。而异步时序逻辑必须由多个进程来表达。 (5)子程序调用 子程序调用有:顺序语句方式和并行语句方式。 并行语句方式:当某个过程处于并行语句环境中时,其过程体中定义的目标参量发生改变时,将启动过程的调用,这时的调用则是属于并行语句方式的; 顺序语句方式:调用出现在进程中。 子程序包括过程(procedure)和函数(function)。 函数只能用以计算数值。 (6)块语句(block) 当一个构造体所描述的电路比较复杂时,可以通过块结构(block)将构造体划分为几个模块。 block语句描述局部电路格式如下: [块结构名:]block 块内定义语句;--定义block内部使用的信号或常数的名称 及类型 begin block块内的并发描述语句; endblock[块结构名] 3属性描述语句 例如,常用的属性描述 left表示类型最左边的值; right表示类型最右边的值; high表示类型中最大的值; length表示限定型数组中元素的个数; “‘event”,它的值为布尔型; 当clk=‘0’andclk‘event表示时钟的下降沿。 当clk=‘1’andclk’event表示时钟的上升沿。“'range”属性,其生成一个限制性数据对象的范围。3.5VHDL设计逻辑电路的基本思想和方法 本节举例说明VHDL设计逻辑电路的基本思想和方法 1逻辑函数表达式方法 利用VHDL中的逻辑运算就可以实现任何组合逻辑电路的设计。 1)设计一个函数电路:y=ab+cd 程序如下: libraryieee; useieee.std_logic_1164.all; entityabcis port(a,b,c,d:instd_logic; y:outstd_logic); end; architectureaofabcis begin y<=(aandb)or(candd); end; 2)全加器的源程序如下: libraryieee; useieee.std_logic_1164.all; useieee.std_logic_unsigned.all; entityfull_adderis port(a,b,c0:instd_logic; sum,c1:outstd_logic); end; architectureaoffull_adderis signalsum1:std_logic_vector(1downto0); signala1,b1,c01:std_logic_vector(1downto0); begin a1<='0'&a; a1<='0'&b; a1<='0'&c0; sum1<=a1+b1+c01;--算术表达式 sum<=sum1(0); c1<=sum1(1); end; 3电路连接描述方法 所谓电路连接描述方法,就是将给定的电路原理图用portmap语句来实现。在电路中,有某些元件不是基本元件,无法用逻辑函数表达式来表示,也就是说,无法用逻辑运算来实现。 见教材图3-8例。第三章结束
本文档为【EDA技术及应用第3章 硬件描述语言VHDL】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
孟子73代
暂无简介~
格式:ppt
大小:289KB
软件:PowerPoint
页数:0
分类:工学
上传时间:2019-02-08
浏览量:22