1任务分析:数据选择器的功能1知识准备:结构体、数据对象与运算符2任务实施:二选一数据选择器设计3任务五二选一数据选择器的VHDL实现2一、任务分析:数据选择器在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,也称多路选择器或多路开关。数据选择器(MUX)的逻辑功能是在地址选择信号的控制下,从多路数据中选择一路数据作为输出信号。因此对于一个具有2n个输入和1个输出的多路选择器,应有n个地址选择变量。一)结构体ARCHITECTURE结构体名OF实体名IS[说明语句;]BEGIN[功能描述语句;]END[ARCHITECTURE][结构体名];功能:•对数据类型、常数、信号、子程序和元件等元素的说明。•描述实体逻辑行为。二、知识准备:结构体,数据对象与运算符VHDL结构体术语说明语句:用于定义结构体中所用的数据对象(常量和信号)和子程序,并对所引用的元件加以说明,但不能定义变量。功能描述语句:有五种类型,可以把它们看成结构体的五种子结构。这五种语句结构本身是并行语句,但内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句,如进程内部包含的即为顺序语句。五种语句结构分别为块语句、进程语句、信号赋值语句、子程序调用语句和元件例化语句。结构体结构图由若干并行执行语句包装在一起形成一个子模块。定义顺序语句模块,用从外部获得的信号值,或内部的运算数据向其它的信号进行赋值。将设计实体内的处理结果向定义的信号或界面端口进行赋值用以调用过程或函数,并将获得的结果赋值于信号。元件调用,用来调用另一个实体所描述的电路。结构体说明语句功能描述语句块语句进程语句信号赋值语句子程序调用语句元件例化语句实体和结构体之间的关系Input1InputnOutput1Outputn实体ABCDSelMUX_Out2结构体三种描述方法行为描述(behaviorprocess)数据流描述(dataflow)结构化描述(structure)真值表布尔方程式逻辑电路结构体--行为描述行为描述是高层次描述方式(类似于真值表),它只描述输入与输出之间的逻辑转换关系,而不涉及具体逻辑电路结构等信息。主要用于系统数学模型的仿真或系统工作原理的仿真。故其大量采用的算术运算、关系运算、惯性延时、传输延时等描述方式是难于或不能进行逻辑综合的。BehaviorProcess描述architectureoneofmux21isbeginy=awhens='0'elseb;endone;真值表高层次的功能描述,不必考虑在具体电路是怎样实现的。结构体--数据流描述数据流描述:也称寄存器(RTL)描述方式,明确描述了数据信号的流动路径、流动方向和流动结果。它采用类似于逻辑函数式的并行信号赋值语句进行描述。可以描述时序电路,也可描述组合电路。是完全能够进行逻辑综合的描述方式。architectureoneofmux21isbeginy=(aand(nots))or(bands);endone;DataFlow描述逻辑函数式结构体--结构化描述结构化描述:复杂数字逻辑系统的层次化设计法。设计中,高层次的设计模块调用低层次的设计模块,或直接用门电路设计单元来设计一复杂的逻辑电路。architectureoneofmux21issignald,e:bit;begind=aand(nots);e=bands;y=dore;endone;VCC6bINPUTVCC5sINPUT7NOT2AND23OR28yOUTPUTVCC4aINPUT1AND2Structure描述逻辑图三种描述方式的比较描述方式优点缺点适用场合结构化描述连接关系清晰,电路模块化清晰繁琐、复杂层次化设计数据流描述布尔函数定义明白逻辑方程难以获得小门数设计行为描述逻辑关系描述清晰不一定能综合系统建模、复杂的电路二)数据对象(dataobjects)是数据类型的载体,共有三种形式的对象:Constant(常量)Variable(变量)Signal(信号)Constantwidth:integer:=7;ConstantVcc:REAL:=5.0;ConstantD:Std_Logic_Vector(3Downto0):=”0000”;不能在程序中改变;增强程序的可读性,便于修改程序;常量的使用范围取决于其定义位置,可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定。1、常量(Constant)定义格式为:Constant常量名:数据类型:=表达式;2、变量变量是一个局部量,用于对中间数据的临时存储,并不一定代表电路的某一硬件,没有物理意义。定义格式为:Variable变量名:数据类型[:=设定值];如:Variablea:integer:=0;变量赋值语句的语法格式为:变量名:=表达式(设定值);如:a:=bandc;变量赋值整体赋值:temp:=“10101010”;temp:=“AA”;逐位赋值:temp(7):=‘1’;多位赋值temp(7downto4):=“1010”;多位赋值用双引号逐位赋值用单引号赋值标志3、信号信号数据对象,代表电路内部线路,其在元件之间起互连作用,没有方向性,可给它赋值,也可当作输入。定义格式为:Signal信号名:数据类型[:=设定值];如:SignalA:Std_logic_vector(3Downto0):=“0000”;信号赋值语句的语法格式为:信号名=表达式(设定值);A=“1010”信号赋值SIGNALtemp:Std_Logic_Vector(7downto0);整体赋值:temp=“10101010”;temp=“AA”;逐位赋值:temp(7)=‘1’;多位赋值:temp(7downto4)=“1010”;多位赋值用双引号逐位赋值用单引号赋值标志信号、变量、常量对比(一)、定义Signalclk:std_logic;Variabledata:std_logic_vector(7downto0);Constantwidth:integer:=7;(二)、赋值方式clk=‘1’;(非立即)data:=“1010”;(立即)(三)、逻辑功能信号可以代表电路的内部连接,而变量仅仅是电路内部的数据交换。(五)、适用范围信号:实体、结构体、程序包变量:定义了变量的进程、子程序的顺序语句中常量:视其定义的位置而定若常量定义在实体中,适用范围是实体所对应的所有结构体。若常量定义在结构体中,适用范围就是本结构体。(四)、定义区域信号:实体、结构体、程序包变量:进程、子程序常量:实体、结构体、程序包、块、进程、子程序能进行逻辑运算的数据类型:bit、bit_vector、boolean、std_logic、std_logic_vector1、逻辑操作符三)VHDL语言的操作符(operator)注意,逻辑运算符的左右两边以及代入的信号的数据类型必须是相同的。当一个语句中存在多个逻辑表达式时,除了NOT运算符,其他6种运算符没有优先级之分,在设计中应注意根据实际逻辑表达式设置括号。逻辑运算符应用举例y=aXORb;--逻辑表达式y=a⊕by=aANDbANDcANDd;--逻辑表达式y=a·b·c·dy=(aORb)AND(cORd);--逻辑表达式y=(a+b)·(c+d)2、关系运算符=和/=的操作对象可以是任何数据类型构成的操作数。其它关系运算符对数据类型有一定的限制。(整数、实数、位矢量、数组(从左至右比较,如:1011101011结果为真))=等于/=不等于<小于<=小于或等于(也用于信号的赋值操作)>大于>=大于或等于3、算术运算符+:加,-:减;+:正,-:负*:乘,/:除,REM求余,MOD求模:整数和实数,ABS:求绝对值**乘方:左边可以是整数或浮点数,右边必须是整数,且只有在左边为浮点数时,右边才可以为负数。其中取模,取余,取绝对值和乘方运算的操作数只能是整型,其他的可以是整数和实数型。4、并置运算符VHDL语言中的并置运算符为“&”,用于位的连接,形成位矢量。也可以进行多个矢量的连接,以构成位长更大的位矢量。并置运算符应用举例。SIGNALdata_1:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALdata_2:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALdata_3:STD_LOGIC_VECTOR(7DOWNTO0);data_1=0000;data_2=1111;data_3=data_1&data_2;运算后,data_3的结果为00001111。5、移位运算符SLL是将向量左移,右边移空位补0;SRL是将向量右移,左边移空位补0;SLA是将向量左移,右边第一位数值保持不变;SRA是将向量右移,左边第一位数值保持不变;ROL和ROR是自循环移位方式。移位运算符操作示意图移位运算符应用举例:A〈=0101;B〈=ASLL1;--B=1010C〈=ASRL1;--C=0010D〈=ASLA1;--D=1011E〈=ASRA1;--E=0010F〈=AROL1;--F=1010G〈=AROR1;--G=1010★数据类型必须一致★表达式中有多个运算符时一般要加括号,但and、or等除外运算符优先级NOT,ABS,**最高优先级*,/,MOD,REM+(正号),-(负号)+,-,&SLL,SLA,SRL,SRA,ROL,ROR=,/=,,=,,=AND,OR,NAND,NOR,XOR,XNOR最低优先级VHDL操作符优先级6、运算符的优先级signald1,d2,s:integer;SIGNALa,b,c:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALd,e,f,g:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALh,i,j,k:STD_LOGIC;SIGNALl,m,n,o,p:BOOLEAN;...s=aandb;--integer不能进行逻辑运算a=bANDc;--a、b、c的数据类型同属4位长的位矢量d=eORfORg;--两个操作符OR相同,不需括号h=(iNANDj)NANDk;--NAND必须加括号l=(mXORn)AND(oXORp);--操作符不同,必须加括号h=iANDjANDk;--两个操作符都是AND,不必加括号h=iANDjORk;--两个操作符不同,未加括号,表达错误a=bANDe;--操作数b与e的位矢长度不一致,表达错误h=iORl;--数据类型不同,表达错误。【例1】ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy=aWHENs='0'ELSEb;ENDARCHITECTUREone;任务实施:二选一数据选择器设计3【例2】ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISSIGNALd,e:BIT;BEGINd=aAND(NOTS);e=bANDs;y=dORe;ENDARCHITECTUREone;【例3】ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy=(aAND(NOTs))OR(bANDs);ENDARCHITECTUREone;