硬件描述语言VHDL基础.ppt_第1页
硬件描述语言VHDL基础.ppt_第2页
硬件描述语言VHDL基础.ppt_第3页
硬件描述语言VHDL基础.ppt_第4页
硬件描述语言VHDL基础.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第三章硬件描述语言VHDL基础 3 1VHDL语言程序的基本结构3 2VHDL语言的数据类型及运算操作符3 3VHDL语言的主要描述语句3 4VHDL语言构造体的描述方式 2 3 1VHDL语言程序的基本结构实体 Entity 构造体 Architecture 配置 Configuration 包集合 Package 和库 Library VHDL大小写不敏感 3 3 1 1VHDL语言设计的基本设计单元实体 Entity 描述此设计功能输入输出端口 Port 在层次化设计时 Port为模块之间的接口 在芯片级 则代表具体芯片的管脚 实体说明ENTITY实体名ISPORT 端口名 端口名 方向数据类型名 端口名 端口名 方向数据类型名 END实体名 Entityeqcomp4isport a b instd logic vector 3downto0 equal outstd logic endeqcomp4 4 基本数据类型 BIT和BIT VECTORSTD LOGIC和STD LOGIC VECTOR端口模式 5 Out与Buffer的区别 Entitytest1isport a instd logic b c outstd logic endtest1 architectureaoftest1isbeginb not a c b Errorenda Entitytest2isport a instd logic b bufferstd logic c outstd logic endtest2 architectureaoftest2isbeginb not a c b enda 结论 均表示输出 但BUFFER声明的信号可以反馈到实体内部 而OUT声明的信号却不可以 6 构造体描述设计单元具有的具体功能结构体有三种描述方式行为描述 behavioral 数据流描述 dataflow 结构化描述 structural 格式 ARCHITECTURE构造体名OF实体名IS 定义语句 内部信号 常数 数据类型 函数等的定义BEGIN 并行处理语句 END构造体名 7 构造体中的描述语句并行语句 同时执行 在进程语句 PROCESS 的外部 顺序语句 按书写顺序执行 在进程语句 PROCESS 的内部 例如 entitysampleisport a b instd logic c outstd logic endsample architecturebehaofsampleissignald std logic begind aandb C not d endbeha 8 3 1 2构造体的子结构描述3种形式的子结构描述 BLOCK描述 块描述 PROCESS描述 进程描述 SUBPROGRAMS描述 子程序描述 BLOCK语句描述格式 块标号 BLOCKBEGIN ENDBLOCK块标号 BLOCK内的语句执行顺序 并行执行 9 例如 二选一电路ENTITYmuxISPORT d0 d1 sel INBIT q OUTBIT ENDmux ARCHITECTUREconnectOFmuxISSIGNALtmp1 tmp2 tmp3 BIT BEGINcale BLOCKBEGINtmp1 d1ANDsel tmp2 d0AND NOTsel tmp3 tmp1ORtmp2 q tmp3 ENDBLOCKcale ENDconnect 10 进程 PROCESS 描述格式 进程名 PROCESS 信号1 信号2 BEGIN ENDPROCESS 进程名 敏感量 是PROCESS的输入信号 写在 PROCESS 后面的括号中当PROCESS所带的敏感量任何一个发生变化时 PROCESS中的语句就会执行一遍 语句执行顺序 顺序执行 多进程的关系 并行执行 11 例如 二选一电路ENTITYmux1ISPORT d0 d1 sel INBIT q OUTBIT ENDmux1 ARCHITECTUREconnectOFmux1ISBEGINcale PROCESS d0 d1 sel VARIABLEtmp1 tmp2 tmp3 BIT 在进程中定义的变量BEGINtmp1 d0ANDsel 输入端口向变量赋值tmp2 d1AND NOTsel tmp3 tmp1ORtmp2 q tmp3 ENDPROCESScale ENDconnect 12 子程序描述过程格式PROCEDURE过程名 参数1 参数2 IS 定义变量语句 BEGIN 顺序处理语句 END过程名 参数 可以是输入也可以是输出语句执行方式 调用者在调用过程前先将初始值传递给过程的输入参数 然后过程语句启动 按顺序自上至下执行过程结构中的语句 执行结束后 将输出值拷贝到调用者的 OUT 和 INOUT 所定义的变量或信号中 13 例如 求最大值电路libraryieee useieee std logic 1164 all entityconproisport da db instd logic vector 7downto0 o1 outstd logic vector 7downto0 endconpro 14 architecturebehaofconprois proceduremax a instd logic vector b instd logic vector q outstd logic vector isbeginif a b thenq a elseq b endif endmax beginprocess da db variabletemp std logic vector 7downto0 beginmax da db temp o1 temp endprocess endbeha 15 函数格式FUNCTION函数名 参数1 参数2 RETURN数据类型名IS 定义变量语句 BEGIN 顺序处理语句 RETURN 返回变量名 END函数名 参数 输入参数的个数不受限制 在函数名后的括号内声明 而输出参数只有一个 在return语句后声明 输入输出参数的属性均可省略 语句执行方式 顺序执行 16 例如 求最大值电路architecturebehaofconpackis functionmax a std logic vector b std logic vector returnstd logic vectorisvariabletemp std logic vector 7downto0 beginif a b thentemp a elsetemp b endif returntemp endmax begino1 max da db endbeha 17 3 1 3包集合 库和配置库 存放编译后的数据集合库的种类IEEE库 std logicSTD库 standard textioWORK库 ASIC库 用户自定义库 例如 vhdl87文件夹下的altera std vital ieee库的使用LIBRARY库名 USELIBRARY name package name ITEM name 18 例如 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL 例如 LIBRARYSTD USESTD TEXTIO ALL 库的作用范围 从一个实体说明开始到它所属的结构体 配置为止 当一个源程序中出现两个以上实体的使用说明语句时 应在每个实体说明语句前重复书写 例如 19 Libraryieee Useieee std logic 1164 all Entityand1is Endand1 Architecturebeha1ofand1isBegin Endbeha1 Libraryieee Useieee std logic 1164 all Entityand1is Endand1 Architecturebeha2ofand1isBegin Endbeha2 20 包集合 通过编译成为库结构中的一个层次格式PACKAGE包集合名IS 说明语句 END包集合名 PACKAGEBODY包名IS 说明语句 END包集合名 使用USELIBRARY name package name ITEM name例如 使用在包集合bpac中定义的max函数 21 libraryieee useieee std logic 1164 all packagebpacisfunctionmax a std logic vector b std logic vector returnstd logic vector endbpac packagebodybpacisfunctionmax a std logic vector b std logic vector returnstd logic vectorisvariabletemp std logic vector 7downto0 beginif a b thentemp a elsetemp b endif returntemp endmax endbpac 22 libraryieee useieee std logic 1164 all librarywork usework bpac all entityconpackisport da db instd logic vector 7downto0 o1 outstd logic vector 7downto0 endconpack architecturebehaofconpackisbegino1 max da db endbeha 现行作业库可以省略 23 配置作用 描述层与层之间的连接关系以及实体与结构之间的连接关系 便于调试和设计 格式 CONFIGURATION配置名OF实体名IS 说明语句 END配置名 例如 用两个不同构造体的配置实现rs触发器 ENTITYrsISPORT set reset INBIT q qb BUFFERBIT ENDrs 24 ARCHITECTURErsff1OFrsISCOMPONENTnand2PORT a b INBIT c OUTBIT ENDCOMPONENT BEGINU1 nand2PORTMAP a set b qb c q U2 nand2PORTMAP a reset b q c qb ENDrsff1 ARCHITECTURErsff2OFrsISBEGINq NOT qbANDset qb NOT qANDreset ENDrsff2 CONFIGRATIONrsconOFrsIS 选择构造体rsff1FORrsff1ENDFOR ENDrscon 25 3 2VHDL语言的数据类型及运算操作符3 2 1VHDL语言的客体 数据对象 客体 在VHDL语言中 凡是可以赋予一个值的对象就称为客体 分类信号 signal 代表物理设计中的某一条硬件连接线 变量 variable 代表暂存某些值的载体 常数 constant 代表数字电路中的电源和地线 26 常数意义 对某一常数名赋予一个固定的值 综合后 连接到电源和地 格式 CONSTANT常数名 数据类型 表达式 例如 CONSTANTVcc REAL 5 0 变量格式 VARIABLE变量名 数据类型约束条件 表达式 例如 VARIABLEcount INTEGERRANGE0TO255 10 特点 临时数据 没有物理意义 只能在进程 函数和过程中使用 一旦赋值立即生效 用 进行赋值 信号格式 SIGNAL信号名 数据类型约束条件 表达式 例如 SIGNALground BIT 0 27 特点 没有方向性 可给它赋值 也可当作输入 例如 tmp3 tmp1ORtmp2 q tmp3 设定的初始值在综合时没有用 只是在仿真时在开始设定一个起始值 在Max PlusII中被忽略 用 进行赋值信号与变量的区别信号赋值可以有附加延迟 变量赋值不可以有附加延迟 例如 s1 s2AFTER10ns信号可以看作硬件的一根连线 而变量存放临时数据 没有物理意义 作用范围不同 进程对信号敏感 对变量不敏感 信号可以是多个进程的全局信号 但变量只在定义它之后的顺序域可见 28 architectureaofstartissignaltmp std logic begins0 process a bus begintmp 1 foriin3downto0looptmp a bus i andtmp endloop carryout tmp endprocesss0 s1 process tmp begin endprocesss1 enda architectureaofstartisbegins0 process a bus variabletmp std logic begintmp 1 foriin3downto0looptmp a bus i andtmp endloop carryout tmp endprocesss0 s1 process tmp errorbegin endprocesss1 enda 29 代入方式不同 信号的代入过程和代入语句的处理是分开进行的 而变量赋值语句一旦执行 其值立即被赋予变量 process a b c d begind a x b d d c y b d endprocess 运行结果 x b c y b c process a b c variabled std logic vector 3downto0 begind a x b d d c y b d endprocess 运行结果 x b a y b c 30 VHDL标识符 Identifiers 基本标识符由字母 数字和下划线组成第一个字符必须是字母最后一个字符不能是下划线不允许连续2个下划线保留字 关键字 不能用于标识符大小写是等效的 31 3 2 2数据类型标准数据类型 实数 整数 位 位矢量 布尔量 字符 字符串 时间 正整数 错误等级 整数 浮点数方便用于数值方面的运算 加减乘除整数 integer 经常用于计数器实数 real Max PLusII不支持例如 Variablea integerrange 255to 255 位 表示位信号 位的值用带单引号的1或0来表示 例如 signala bit 0 或a 0 位矢量 表示多位组成的信号 位矢量的值用双引号括起来 例如 signala bit vector 3downto0 0011 或a 0011 32 用户定义的数据类型格式 TYPE数据类型名 数据类型名 数据类型定义不完整的数据类型格式 TYPE数据类型名 数据类型名 假定义可由用户定义的数据类型包括 枚举 ENUMERATED 整数 INTEGER 实数 REAL 数组 ARRAY 时间 TIME 记录 RECODE 枚举 ENUMERATED 格式 TYPE数据类型名IS 元素 元素 作用 列举数据对象可能存在的值例如 用于定义状态机的状态Typestatesis idle start running pause stop Signalcurrent state states 33 例如 IEEE1076标准中预定义了两个枚举类型Typebooleanis False True Typebitis 0 1 Signala bit 例如 IEEE1164标准中预定义了一个枚举类型Typestd logicis U X 0 1 Z W L H 该类型能比较全面地包括数字电路中信号会出现的几种状态 因此一般情况把这种类型代替bit U 初始值 X 不定 0 0 1 1 Z 高阻 W 弱信号不定 L 弱信号0 H 弱信号1 不可能情况 Signala std logic 注意 这里的大小写是敏感的 34 数组 ARRAY 格式 TYPE数据类型名ISARRAY范围OF原数据类型名 多个相同类型成员组成的队列 一般用于定义数据总线 地址总线等 例如 Signala std logic vector 7downto0 a B 00111010 a X 3A 可自定义复合类型Typewordisarray 15downto0 ofbit Signalb word Typetable8x4isarray 0to7 0to3 ofbit 35 记录 RECODE 格式 TYPE数组类型名ISRECORD元素名 数据类型名 元素名 数据类型名 ENDRECORD 相同或不同类型的元素组成 类似C中的结构具有模型抽象能力 用于描述一个功能模块 例如 TypeiocellisrecordEnable bit DataBus bit vector 7downto0 endrecord singalbus iocell bus Enable 1 bus DataBus 00110110 36 数据类型的转换 VHDL是强类型语言 必须用类型转换函数才能进行不同类型之间的转换 37 例如 由STD BIT VECTOR转换成INTEGERLIBRARYIEEE USEIEEE STD LOGIC 1164 ALL USEIEEE STD LOGIC UNSIGNED ALL ENTITYadd5ISPORT num INSTD LOGIC VECTOR 2DOWNTO0 ENDadd5 ARCHITECTURErtlOFadd5ISSIGNALin num INTEGERRANGE0TO5 BEGINIn num CONV INTEGER num ENDrtl 38 属性 Attributes 提供Entity Architecture Type和Signals的信息有许多预定义的值 信号和范围的属性一个最常用的属性 eventifclk eventandclk 1 then left right high low length例如 typecountisintegerrange0to127count left 0 count right 127 count high 127 count low 0 count length 128 39 3 2 3运算操作符逻辑运算符AND OR NAND NOR XOR NOT关系运算符 算术运算符 并置 连接 运算符 用于位连接 注意 要求运算符左右的数据类型必须相同 运算优先级 40 例如 y 0 b 0 anden y 1 b 1 anden y 2 b 2 anden y 3 b 3 anden y 4 a 0 y 5 a 1 y 6 a 2 y 7 a 3 tmp b bAND en tmp b bAND en en en en 41 3 3VHDL语言的主要描述语句3 3 1顺序描述语句只能用在进程或子程序中 按照语句的出现的顺序加以执行的 WAIT语句WAIT无限等待WAITON敏感信号变化此时 与process等价 例如 PROCESS a b BEGINy aANDb ENDPROCESS PROCESSBEGINy aANDb WAITONa b ENDPROCESS 42 WAITUNTIL直到条件满足WAITFOR等到时间到多条件WAIT语句超时等待 Architecturebehaofwait examplesignalsendB sendA std logic BeginsendA 0 a processbeginwaituntilsendB 1 sendA 1 after10ns waituntilsendB 0 sendA 0 after10ns endprocessa b processbeginwaituntilsendA 0 sendB 0 after10ns waituntilsendA 1 sendB 1 after10ns endprocessa endbeha 43 信号代入语句格式 目的信号量 信号量表达式例如 a b 变量赋值语句格式 目的变量 表达式例如 c a d IF语句IF的门闩控制格式 IF条件THEN顺序执行语句ENDIF 例如 锁存器IF en 1 THENq d ENDIF 44 IF语句的二选择控制格式 IF条件THEN顺序执行语句ELSE顺序执行语句ENDIF IF语句的多选择控制格式 IF条件THEN顺序执行语句ELSIF条件THEN顺序执行语句 ELSIF条件THEN顺序执行语句ENDIF Entitymux2isport a b sel inbit c outbit Endmux2 Architecturertlofmux2isBeginprocess a b sel beginif sel 1 thenc a elsec b endif endprocessEndrtl 45 例如 用于作地址译码Ifaddr X 0000 andaddr X 4000 andaddr X 4008 andaddr X 8000 andaddr X C000 thenEEPRom 1 endif 46 CASE语句实现从许多不同语句的序列中选择其中之一执行格式CASE表达式ISWHEN条件表达式 顺序处理语句 ENDCASE WHEN的条件表达式可以有4种形式WHEN值 顺序处理语句 WHEN值 值 值 值 顺序处理语句 WHEN值TO值 顺序处理语句 WHENOTHERS 顺序处理语句 47 例如 8 3编码器libraryieee useieee std logic 1164 all entityencoderisport input instd logic vector 7downto0 y outstd logic vector 2downto0 endencoder architecturebehaofencoderisbeginprocess input begincaseinputiswhen 01111111 yyyyyyyyy XXX endcase endprocess Endbeha If语句和case语句的区别 48 LOOP语句格式 标号 FOR循环变量IN离散范围LOOP顺序处理语句ENDLOOP 标号 标号 WHILE条件LOOP顺序处理语句ENDLOOP 标号 例如 sum 0abcd WHILE I 10 LOOPsum I sum I I 1 ENDLOOPabcd 49 libraryieee useieee std logic 1164 all entitycheckisport a instd logic vector 7downto0 y outstd logic endcheck architecturebehaofcheckisbeginprocess a variabletemp std logic begintemp 0 foriin0to7looptemp tempxora i endloop y temp endprocess endbeha 奇偶校验基本原理 奇数个 1 异或的结果为1 偶数个 1 异或的结果为0 例如 若采用奇校验 1101 110100011 00111 50 NEXT语句跳出本次循环格式 NEXT 标号 WHEN条件 与EXIT语句的区别例如 PROCESS a b CONSTANTmax limit INTEGER 255BEGINFORIIN0TOmax limitLOOPIF done I TRUE THENNEXT ELSEdone I TRUE ENDIF q I a I ANDb I ENDLOOP ENDPROCESS 51 3 3 2并发描述语句可以直接在构造体中使用进程语句可以和其它进程语句同时执行 并可以存取构造体和实体中所定义的信号 进程结构中的所有语句都按照顺序执行 为启动进程 在进程中必须包含一个敏感信号表或WAIT语句 进程之间的通信是通过信号量来实现的 例如 entitypros comisport event a inbit endpros com architecturecatch ballofpros comissignalto a to b bit 0 52 begina process enent a to a beginif event a eventandevent a 1 or to a eventandto a 1 thento b 1 after20ns 0 after30ns endif endprocessa b process to b beginif to b eventandto b 1 thento a 1 after20ns 0 after30ns endif endprocessb endcatch ball 53 并发信号代入代入语句在进程中使用是顺序语句 但是在构造体的进程之外使用就是并发语句 相当于一个进程 例如 以下两种结构等价ARCHITECTUREbehaveOFa varISBEGINOutput a I ENDbehave ARCHITECTUREbehaveOFa varISBEGINss PROCESS a I BEGINOutput a I ENDPROCESSss ENDbehave 54 条件信号代入将符合条件的表达式代入信号量格式目的信号量 表达式1WHEN条件1ELSE表达式2WHEN条件2ELSE表达式3WHEN条件3 ELSE表达式n 例如 四选一电路LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYmux44ISPORT i0 i1 i2 i3 a b INSTD LOGIC q OUTSTD LOGIC ENDmux44 55 ARCHITECTUREaaOFmux44ISSIGNALsel STD LOGIC VECTOR 1DOWNTO0 BEGINsel b 56 选择信号代入对表达式进行测试 当表达式取值不同时 将使不同的值代入目的信号量格式WITH表达式SELECT目的信号量 表达式1WHEN条件1表达式2WHEN条件2 表达式nWHEN条件n 例如 四选一电路 57 ARCHITECTUREbbOFmux45ISSIGNALsel INTEGERrange0to3 BEGINWITHselSELECTq i0WHEN0 i1WHEN1 i2WHEN2 i3WHEN3 sel 0WHENa 0 ANDb 0 ELSE1WHENa 1 ANDb 0 ELSE2WHENa 0 ANDb 1 ELSE3WHENa 1 ANDb 1 ENDbb a b i0 q i1 i2 i3 选择信号代入 条件信号代入 58 并发过程调用语句并发过程调用语句可以出现在构造体中 而且是一种可以在进程之外执行的过程调用语句 并发过程调用是一个完整的语句 在它之前可以加标号 并发过程调用语句应带有IN OUT或INOUT的参数 它们应该列在过程名后的括号内 并发过程调用可以有多个返回值 59 ARCHITECTURE BEGINvector to int z x flag q END ARCHITECTURE BEGINPROCESS z q BEGINvector to int z x flag q ENDPROCESS END 60 几种语句的比较 61 3 4VHDL语言构造体的描述方式在VHDL结构体中 可以采用三种不同的描述方式行为描述RTL描述 寄存器传输描述 结构描述3 4 1行为描述高层次的功能描述 主要用于仿真和系统工作原理的研究 只表示输入与输出间转换的行为 它不包含任何结构信息 即不必考虑在电路中到底是怎样实现的 例如 比较器的行为描述 62 Libraryieee Useieee std logic 1164 all ENTITYcompraISPORT a b instd logic equal outstd logic Endcompra Architecturebehavioralofeqcomp4isbegincomp process a b beginifa bthenequal 1 elseequal 0 endif endprocesscomp endbehavioral 63 3 4 2数据流描述方式描述输入信号经过怎样的变换得到输出信号 以规定设计中的各种寄存器形式为特征 然后在寄存器之间插入组合逻辑 例如 Architecturedataflow2ofeq

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论