版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
EDA基础与应用(第2版)本章要点
VHDL的程序结构VHDL的数据结构VHDL的并行语句第3章数据编码器的设计VHDL是一种用普通文本形式设计数字系统的硬件描述语言,主要用于描述数字系统的结构、行为、功能和接口,可以在任何文字处理软件环境中编辑。编写VHDL程序时允许使用一些符号(字符串)作为标识符,标识符的命名规则如下:(1)由26个英文字母、数字0~9及下划线“_”组成。(2)第一个字符必须以字母开头。(3)下划线不能连用,最后一个字符不能是下划线。(4)对大小写字母不敏感(英文字母不区分大小写)。在VHDL中把具有特定意义的标识符号称为关键字,只能作固定用途使用,用户不能将关键字作为一般标识符来使用,如ENTITY,PORT,BEGIN,END等。3.1VHDL的程序结构3.1.1VHDL的基本结构--库和程序包部分LIBRARYIEEE;--IEEE库
USEIEEE.STD_LOGIC_1164.ALL;--调用IEEE库中STD_LOGIC_1164程序包--实体部分ENTITYnotAIS--实体名为notAPORT(--端口说明
a:INSTD_LOGIC;--定义端口类型
和数据类型
y:OUTSTD_LOGIC);ENDnotA;--实体结束--结构体部分ARCHITECTUREinvOFnotAIS--结构体名为invBEGINy<=NOTa;--将a取反后赋值给输出端口yENDinv;--结构体结束3.1.2库和程序包1.库LIBRARY库名;常用的库有IEEE库、STD库和WORK库。2.程序包调用程序包的通用模式为:USE库名.程序包名.ALL;例如调用STD_LOGIC_1164程序包中的项目需要使用以下语句:LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;3.1.3VHDL的实体实体的格式如下:ENTITY实体名IS[GENERIC(类属说明)][PORT(端口说明)]END[ENTITY]实体名;1.类属说明GENERIC(常数名1:数据类型1:=设定值1;
……;常数名n:数据类型n:=设定值n);2.端口说明PORT(端口信号名1:端口模式1数据类型1;
……;端口信号名n:端口模式n数据类型n);3.1.4VHDL的结构体
一个实体中可以有一个结构体,也可以有多个结构体,但各个结构体不应有重名,其格式如下:ARCHITECTURE结构体名OF实体名IS[结构体说明部分;]BEGIN
功能描述语句;END[ARCHITECTURE]结构体名;3.2VHDL的数据结构3.2.1数据对象1.常量CONSTANT常量名[,常量名…]:数据类型:=表达式;2.变量VARIABLE变量名[,变量名…]:数据类型[约束条件][:=表达式];3.信号SIGNAL信号名[,信号名…]:数据类型[约束条件][:=表达式];3.2.2数据类型1.STANDARD程序包中预定义的数据类型(1)整数类型(INTEGER)(2)自然数(NATURAL)和正整数(POSITIVE)类型。(3)实数(REAL)类型。(4)位(BIT)类型。(5)位向量(BIT_VECTOR)类型。(6)布尔(BOOLEAN)类型。(7)字符(CHARACTER)类型。(8)字符串(STRING)类型(9)时间(TIME)类型。(10)错误等级(SEVERITYLEVEL)类型。2.IEEE库中预定义的数据类型(1)标准逻辑位(STD_LOGIC)数据类型。(2)标准逻辑位向量(STD_LOGIC_VECTOR)数据类型。(3)无符号(UNSIGNED)数据类型。(4)有符号(SIGNED)数据类型。3.用户自定义数据类型(1)枚举类型(ENUMERATED)
TYPE数据类型名IS(取值1,取值2,…);(2)数组类型(ARRAY)。TYPE数据类型名ISARRAY数组下标范围OF数组元素的数据类型;(3)用户自定义子类型SUBTYPE子数据类型名IS数据类型名RANGE数据范围;3.2.3数据类型间的转换例如:把INTEGER数据类型的信号A转换为STD_LOGIC_VECTOR数据类型的信号B,程序如下:SIGNALA:INTEGERRANGER0TO15;--定义信号ASIGNALB:STD_LOGIC_VECTOR(3DOWNTO0);--定义信号BB<=CONV_STD_LOGIC_VECTOR(A);--调用转换函数注意:使用数据类型转换函CONV_STD_LOGIC_VECTOR,需要调用IEEE库中的STD_LOGIC_ARITH程序包。3.2.4VHDL的运算符(1)逻辑运算符。(2)关系运算符。(3)移位运算符。(4)符号运算符。(5)连接运算符。(6)算术运算符。3.3VHDL的并行语句3.3.1信号赋值语句赋值语句是将一个值或者一个表达式的结果传递给某一个数据对象,数据在实体内部的传递以及对端口外的传递都必须通过赋值语句来实现。信号赋值语句有三种形式:简单信号赋值语句、条件信号赋值语句和选择信号赋值语句。其共同点是赋值目标必须都是信号,这3种语句与其他并行语句一样,在结构体内是同时执行的。1.简单信号赋值语句信号<=表达式;ENTITYlogicISPORT(a,b,c,d:INBIT;y:OUTBIT);ENDlogic;ARCHITECTUREdeOFlogicISSIGNALe:BIT;--定义e为信号BEGINy<=(aANDb)ORe;--以下两条并行语句与顺序无关
e<=cXORd;ENDde;【例3-3】用并行信号赋值语句描述逻辑表达式
。2.条件信号赋值语句信号<=表达式1WHEN赋值条件1ELSE
表达式2WHEN赋值条件2ELSE……
表达式n;执行该语句时首先要进行条件判断,然后再进行信号赋值操作。例如,当条件1满足时,就将表达式1的值赋给目标信号;当条件2满足时,就将表达式2的值赋给目标信号;当所有的条件都不满足时,就将表达式n的值赋给目标信号。使用条件信号赋值语句时,应该注意以下几点:(1)只有当条件满足时,才能将该条件前面的表达式值赋给目标信号。(2)对条件进行判断是有顺序的,位置靠前的条件具有较高的优级,只有不满足本条件的时候才会去判断下一个条件。(3)条件表达式的结果为布尔类型。(4)最后一个表达式后面不含有WHEN子句。(5)条件信号赋值语句允许条件重叠,但位置在后面的条件不会被执行。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYselection4ISPORT(a:INSTD_LOGIC_VECTOR(3DOWNTO0);sel:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDselection4;ARCHITECTUREoneOFselection4ISBEGINy<=a(0)WHENsel="00"ELSE--从第一个条件开始判断a(1)WHENsel="01"ELSEa(2)WHENsel="10"ELSEa(3);
ENDone;用条件信号赋值语句描述“四选一”电路。3.选择信号赋值语句WITH选择表达式SELECT目标信号<=信号表达式1WHEN选择条件1,信号表达式2WHEN选择条件2,
……,信号表达式nWHEN选择条件n;先对选择条件表达式进行判断,当选择条件表达式的值符合某一选择条件时,就将该条件前面的信号表达式赋给目标信号。例如,当选择条件表达式的值符合条件1时,就将信号表达式1赋给目标信号;当选择条件表达式的值符合选择条件n时,就将信号表达式n赋给目标信号。(1)只有当选择条件表达式的值符合某一选择条件时,才将该选择条件前面的信号表达式赋给目标信号。(2)每一个信号表达式后面都含有WHEN子句。(3)由于选择信号赋值语句是并发执行的,所以不能够在进程中使用。(4)对选择条件的测试是同时进行的,语句将对所有的选择条件进行判断,而没有优先级之分。这时如果选择条件重叠,就有可能出现两个或两个以上的信号表达式赋给同一目标信号,这样就会引起信号冲突,因此不允许有选择条件重叠的情况。(5)选择条件不允许出现涵盖不全的情况。如果选择条件不能涵盖选择条件表达式的所有值,就有可能出现选择条件表达式的值找不到与之符合的选择条件,这时编译将会给出错误信息。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(d0,d1,d2,d3:INSTD_LOGIC;s0,s1:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErt1OFmux4ISSIGNALcomb:STD_LOGIC_VECTOR(1DOWNTO0);BEGINcomb<=s1&s0;WITHcombSELECTq<=d0WHEN"00",d1WHEN"01",d2WHEN"10",d3WHEN"11",'Z'WHENOTHERS;--'Z'必须大写,表示高阻状态ENDrt1;用选择信号赋值语句描述“四选一”电路需要注意的是,以上程序的选择信号赋值语句中,comb的值"00"、"01"、"10"和"11"被明确规定,而用保留字OTHERS来表示comb的所有其他可能值。因此,为了使选择条件能够涵盖选择条件表达式的所有值,这里用OTHERS来代替comb的所有其他可能值。注意:每条WHEN短句表示并列关系用逗号,最后一句用分号。3.3.2块语句
块语句是一种并行语句的组合方式,可以使程序更加有层次、更加清晰。在物理意义上,一个块语句对应一个子电路;在逻辑电路图上,一个块语句对应一个子电路图。块语句的格式如下:块标号:BLOCK
说明语句;
BEGIN
并行语句;
……;ENDBLOCK块标号;块标号是块的名称,块说明语句与结构体的说明语句相同,用来定义块内局部信号、数据类型、元件和子程序,在块内并行语句区可以使用所有的并行语句。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadsuISPORT(a,b:INSTD_LOGIC;co,sum,bo,sub:OUTSTD_LOGIC);ENDadsu;设计一个电路,包含一个半加器和一个半减器ARCHITECTUREstrOFadsuISBEGINhalf_add:BLOCK--半加器块开始BEGINsum<=aXORb;co<=aANDb;ENDBLOCKhalf_add;--半加器块结束half_sub:BLOCK--半减器块开始BEGINsub<=aXORb;bo<=(NOTa)ANDb;
ENDBLOCKhalf_sub;--半减器块结束ENDstr;3.3.3进程语句一个结构体内可以包含多个进程语句,多个进程之间是同时执行的。进程语句本身是并行语句,但每个进程的内部则由一系列顺序语句构成。进程语句的格式如下:[进程名]:PROCESS(敏感信号表)进程说明;--说明用于该进程的常数,变量和子程序
BEGIN
变量和信号赋值语句;顺序语句;ENDPROCESS[进程名];进程语句的主要特点归纳如下:(1)同一结构体中的各个进程之间是并发执行的,并且都可以使用实体说明和结构体中所定义的信号;而同一进程中的描述语句则是顺序执行的,并且在进程中只能设置顺序语句。(2)为启动进程,进程的结构中必须至少包含一个敏感信号。(3)一个结构体中的各个进程之间可以通过信号或共享变量来进行通信,但任一进程的进程说明部分不允许定义信号和共享变量。(4)进程语句是VHDL中的重要的建模语句,进程语句不但可以被综合器所支持,而且进程的建模方式直接影响仿真和综合的结果。3.3.4元件例化语句1.元件声明语句(COMPONENT)格式如下:COMPONENT元件名
PORT元件端口说明(与该元件源程序实体中的PORT部分相同)ENDCOMPONENT;2.元件例化语句(PORTMAP)格式如下:例化名:元件名PORTMAP(元件端口对应关系列表);信号之间有位置映射和名称映射两种映射(关联)方式:(1)位置映射。就是被调用元件端口说明中信号的书写顺序及位置和PORTMAP语句中实际信号的书写顺序及位置一一对应。例如某元件的端口说明为:PORT(a,b:INBIT;c:OUTBIT);调用该元件时可使用:com1:u1PORTMAP(n1,n2,m);显然n1对应a,n2对应b,m对应c,com1是例化名,u1是元件名。(2)名称映射。就是将库中已有的模块的端口名称赋予设计中的信号名。上例可改为:com1:u1PORTMAP(a=>n1,b=>n2,c=>m);LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshiftISPORT(d1:INSTD_LOGIC;cp:INSTD_LOGIC;d0:OUTSTD_LOGIC);ENDshift;用元件例化语句实现四位移位寄存器的设计ARCHITECTUREstrOFshiftISCOMPONETdff--元件声明语句PORT(d:INSTD_LOGIC;clk:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONET;SIGNALq:STD_LOGIC_VECTOR(4DOWNTO0);BEGINq(0)<=d1;dff1:dffPORTMAP(q(0),cp,q(1));--元件例化语句dff2:dffPORTMAP(q(1),cp,q(2));dff3:dffPORTMAP(q(2),cp,q(3));dff4:dffPORTMAP(q(3),cp,q(4));d0<=q(4);ENDstr;3.3.5生成语句1.FOR工作模式的生成语句FOR工作模式常常用来进行
重复结构的描述,格式如下:[生成标号:]FOR循环变量IN取值范围GENERATE并行语句;ENDGENERATE[生成标号];2.IF工作模式的生成语句IF工作模式的生成语句常用来
描述带有条件选择的结构。格式如下:[生成标号:]IF条件GENERATE并行语句;ENDGENERATE[生成标号];LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshiftregISPORT(d1:INSTD_LOGIC;cp:INSTD_LOGIC;d0:OUTSTD_LOGIC);ENDshiftreg;用FOR工作模式生成语句描述四位移位寄存器ARCHITECTUREstrOFshiftregISCOMPONENTdff--元件声明PORT(d:INSTD_LOGIC;clk:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALq:STD_LOGIC_VECTOR(4DOWNTO0);BEGINq(0)<=d1;reg1:FORiIN0TO3GENERATE--FOR工作模式生成语句dffx:dffPORTMAP(q(i),cp,q(i+1));--元件例化ENDGENERATEreg1;d0<=q(4);ENDstr;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshift1ISPORT(d1:INSTD_LOGIC;cp:INSTD_LOGIC;d0:OUTSTD_LOGIC);ENDshift1;ARCHITECTUREstrOFshift1IS
COMPONENTdffPORT(d:INSTD_LOGIC;
clk:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDCOMPONENT;用FOR和IF工作模式的生成语句描述八位移位寄存器SIGNALq:STD_LOGIC_VECTOR(7DOWNTO1);BEGINreg:FORiIN0TO7GENERATE--FOR工作模式生成语句g1:IFi=0GENERATE--IF工作模式生成语句dffx:dffPORTMAP(d1,cp,q(i+1));ENDGENERATE;g2:IFi=7GENERATEdffx:dffPORTMAP(q(i),cp,d0);ENDGENERATE;g3:IF((i/=0)AND(i/=7))GENERATE--IF语句描述规则部分dffx:dffPORTMAP(q(i),cp,q(i+1));ENDGENERATE;ENDGENERATEreg;ENDstr;3.4编码器的设计
在一些场合,需要用特定的符号或数码表示特定的对象,例如一个班级中的每个同学都有不重复的学号,每个电话用户都有一个特定的号码等。在数字电路中,需要将具有某种特定含义的信号变成代码,利用代码表示具有特定含义对象的过程,称为编码。能够完成编码功能的器件,称为编码器(Encoder)。编码器分为普通编码器和优先级编码器两类。3.4.1普通编码器
普通编码器在某一时刻只能对一个输入信号进行编码,即只能有一个输入端有效,当信号高电平有效时,则应只有一个输入信号为高电平,其余输入信号均为低电平。一般来说,由于n位二进制代码可以表示2n种不同的状态,所以,2n个输入信号只需要n个输出就完成编码工作。
1.题目要求利用QuartusⅡ软件的文本输入方式,设计一个8-3线普通编码器,完成编译和波形仿真后,下载到实验平台验证电路功能。2.电路设计8-3线普通编码器电路具有8个输入端,3个输出端(23=8),属于二进制编码器。用X7~X0表示8路输入,Y2~Y0表示3路输出。原则上对输入信号的编码是任意的,常用的编码方式是按照二进制的顺序由小到大进行编码。输入变量输出变量X7X6X5X4X3X2X1X0Y2Y1Y00000000100000000010001000001000100000100001100010000100001000001010100000011010000000111表3-48-3线普通编码器真值表LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYENCODEISPORT(X:INstd_logic_VECTOR(7DOWNTO0);Y:BUFFERstd_logic_VECTOR(2DOWNTO0));ENDENCODE;编码器程序ARCHITECTUREAOFENCODEISBEGINWITHXSELECTY<="000"WHEN"00000001","001"WHEN"00000010","010"WHEN"00000100","011"WHEN"00001000","100"WHEN"00010000","101"WHEN"00100000","110"WHEN"01000000","111"WHEN"10000000","ZZZ"WHENOTHERS;--“ZZZ”必须大写,表示高阻状态ENDA;仿真结果按下与X7锁定的按键,输出信号应该为111;抬起与X7锁定的按键,按下与X3锁定的按键,输出信号应该为011;不抬起与X3锁定的按键,再按下与X7锁定的按键,由于输入编码信号超过1个,输出信号为高阻状态(观察与低电平的区别);按下与其他信号端锁定的按键,观察输出信号。电路测试3.4.2优先编码器
普通编码器工作时若同时出现两个以上的有效输入信号,则会造成电路工作的混乱,为此设计了优先编码器。优先编码器允许多个有效输入信号同时存在,但根据事先设定的优先级别不同,编码器只输入信号中优先级别最高的编码请求,而不响应其他的输入信号。
1.题目要求利用QuartusⅡ软件的文本输入方式,设计一个8421-BCD优先编码器,设大数优先级别高,完成编译和波形仿真后,下载到实验平台验证电路功能。
2.电路设计8421-BCD优先编码器具有10个输入端,分别代表十进制数9~0,用X9~X0表示;具有4个输出端,代表对应输入的8421码,用Y3~Y0表示。根据题意输入十进制数越大,其优先级别越高。输入变量输出变量X9X8X7X6X5X4X3X2X1X0Y3Y2Y1Y0
00000000010000
000000001×0001
00000001××0010
0000001××
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年区块链交易所安全审计流程优化
- 燃气公司巡检外包合同
- 2025年氢燃料电池测试平台网络安全方案
- 2025年高考重庆卷物理真题(1-1115题)(无答案)
- 2025年ACCA《财务会计》专项测试卷
- 2026年房地产估价师之估价原理与方法能力提升试卷A卷附答案
- 陶瓷合闸电阻国内研发基地项目可行性研究报告模板-立项备案
- 护理给药的药物配伍禁忌
- 电动汽车充电设施投资合作协议合同三篇
- 母婴护理教育背景图集
- 光伏发电工程施工技术方案
- DL-T-5115-2016混凝土面板堆石坝接缝止水技术规范
- MOOC 工程制图-重庆大学 中国大学慕课答案
- 《调相机检修导则第1部分 本体》
- 《高血压病康复》课件
- 上海大学马克思主义与社会科学方法论习题解答
- -终止办学期间学员安置方案
- 艾社康 -中国戈谢病患者诊疗状况及疾病负担调研报告2023
- 辽宁省专业技术资格评定表
- 《激光原理及应用》课后部分参考答案 陈鹤鸣
- 烟草行业安全风险分级管控和事故隐患排查治理双重预防机制课件
评论
0/150
提交评论