版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章存储器和可编程逻辑器件数字逻辑器件分类:1)标准产品:包括门、触发器、计数器、译码器、数据选择器等等中小规模数字电路。标准产品的特点是:批量大,成本低,价格便宜,速度快。是数字系统传统设计中使用的主要逻辑器件。缺点是:器件密度低,所构成的数字系统规模大,印刷线路板走线复杂,焊点多,使电路的可靠性差,功耗大。2)由软件配置的大规模集成电路:如微处理机、单片微型计算机等。这类电路的特点:器件密度高,逻辑功能可由软件配置,用它所构成的数字系统硬件规模小,系统灵活性高。缺点:工作速度不够高,另外,这类芯片一般要用多片标准集成电路构成外围电路才能工作。3)专用集成电路(ASIC)ApplicationSpecificIntegratedCircuitASIC是为满足一种或几种特定功能而设计制造的集成电路芯片,密度高,ASIC芯片能取代由若干个中小规模电路组成的电路板,甚至一个完整的数字系统ASIC分类:ASIC属用户定制电路。(CustomDesignIC).包括全定制和半定制两种。全定制(FullcustomdesignIC):半导体生产厂家根据用户的特定要求专门设计并制造。特点:生产周期长,费用高,风险大。在大批量定型产品中使用。半定制(Semi-customdesignIC):半导体生产厂家设计并制造出的标准的半成品芯片。半定制电路分类:㈠门阵列(GateArray)
在硅片上预先做好大量相同的基本单元电路,并把它整齐地排成阵列,这种半成品芯片称为母片。母片可由厂家大批量生产。
当用户需制作满足特定要求的ASIC芯片时,可根据设计要求选择母片,由用户或厂家设计出连线版图,再由器件生产厂家经过金属连线等简单工艺,制成成品电路。缺点:用户主动性差,使用不方便。特点:周期较短,成本较低,风险小。㈡可编程逻辑器件(PLD)(ProgrammableLogicDevice)芯片上的电路和金属引线由半导体厂家做好,其逻辑功能由用户开发实现。特点:集成度高,速度快,灵活性好,可重复编程。电路设计方便,风险低。1.PLD器件的连接表示方法固定连接可编程连接不连接2.门电路表示法1AA1AAAA反向缓冲器ABC&FABC&F与门ABC≥1FABC≥1F或门3.阵列图1A1B1C&&&&D=BCE=AABBCC=0F=AABBCC=0G=16.1存储器存储器是一种通用大规模集成电路,用来存放程序和数据.存储器分类:1)只读存储器(ROM)2)随机存取存储器(RAM)6.1.1ROM(Read-OnlyMemory)ROM存放固定信息,只能读出信息,不能写入信息.当电源切断时,信息依然保留.1.ROM的结构......A0A1An-1地址译码器存储阵列
2n×mW0W1W2n-1F0F1Fm-1字线位线地址线地址译码器为二进制译码器,即全译码结构.(地址线为n根,译码器输出为2n根字线,说明存储阵列中有2n个存储单元)2)存储阵列输出有m根位线,说明每个存储单元有m位,即一个字有m位二进制信息组成.每一位称为一个基本存储单元.3)存储器的容量定义为:字数×位数(2n×m).一个二极管ROM的例子A1A0F0F1F2F300010001100100110110010
1A11A0&&&&W0W1W2W3F0F1F2F3位线字线①W0~W3为地址译码器的输出Wi=mi
(mi为地址码组成的最小项)②当A1A0=00时,W0=1,F0F1F2F3=0100(一个字);当A1A0=01时,W1=1,F0F1F2F3=1001(一个字);当A1A0=10时,W2=1,F0F1F2F3=0110(一个字);当A1A0=11时,W3=1,F0F1F2F3=0010(一个字)。③将地址输入和Fi之间的关系填入真值表得:
地址数据A1A0F0F1F2F300010001100100110110010
F0=A1A0F1=A1A0+
A1A0F2=A1A0+A1A0F3=A1A0ROM实际是一种组合电路结构。④阵列图与阵列:表示译码器。或阵列:表示存储阵列。存储容量为:
4×4
地址数据A1A0F0F1F2F300010001100100110110010
1A11A0&&&&≥1≥1≥1≥1F0F1F2F3m0m1m2m32.可编程只读存储器用户可根据需要自行进行编程的存储器.1)PROM(ProgrammableRead-OnlyMemory)PROM为能进行一次编程的ROM,PROM的结构和ROM基本相同,只是在每个存储管上加一根易熔的金属丝接到相应的位线.位线字线当在该位上需要存0时,通过编程,烧断熔丝;当需存1时,保留熔丝.编程为一次性的,烧断的熔丝不能再接上.2)EPROM(ErasableProgrammableRead-OnlyMemory)EPROM为可擦除、可重新编程的只读存储器.擦除用专用的紫外线灯照射芯片上的受光窗口.EPROM器件的基本存储单元采用浮栅雪崩注入MOS管(简称FAMOS管)电路.FAMOSVDDDS字线位线原始状态的浮栅不带电荷,FAMOS管不导通,位线上为高电平.当FAMOS管的源极S与衬底接地电位,漏极接高电位(较大)时,漏极的PN结反向击穿产生雪崩现象,使FAMOS导通.位线为低电位.如用紫外线或者X射线照射FAMOS管,可使栅极放电,FAMOS恢复到截止状态.一个EPROM芯片:Intel2716VCCVPPOECEGND1121324CE是片使能端;OE是数据输出使能端;VPP是编程写入电源输入端。容量:2K×8位受光窗口工作方式读出未选中待机编程禁止编程校验读出CEOEVPP数据线D7~D0的状态00+5V读出的数据×1+5V高阻1×+5V高阻1+25V写入的数据01+25V高阻00+25V读出校验数据2716工作方式3)E2PROM(电可擦可编程只读存储器)特点:①编程和擦除均由电完成;②既可整片擦除,也可使某些存储单元单独擦除;③重复编程次数大大高于EPROM.3.PROM的应用1)实现组合逻辑函数用PROM实现组合逻辑函数,实际上是利用PROM中的最小项,通过或阵列编程,达到设计目的.F1(A,B,C)=Σm(1,5,6,7)F2(A,B,C)=Σm(0,1,3,6,7)F3(A,B,C)=Σm(3,4,5,6,7)例:用PROM实现逻辑函数:1A&&&&≥1≥1≥1F1F2F31B1C&&&&m0m1m2m3m4m5m6m72)存放数据表和函数表:例如三角函数、对数、乘法等表格。3)存放调试好的程序。*2)、3)是PROM的主要用途。6.1.2随机存取存储器(RAM)RAM可以随时从任一指定地址读出数据,也可以随时把数据写入任何指定的存储单元.RAM在计算机中主要用来存放程序及程序执行过程中产生的中间数据、运算结果等.RAM按工艺分类:1)双极型;2)场效应管型。场效应管型分为:1)静态;2)动态。1.RAM的结构......A0A1An-1地址译码器存储矩阵
W0W1W2n-1字线地址线读写/控制电路读写/控制(R/W)片选(CS)数据输入/输出
(I/O)ENEN11I/ODR/W当片选信号CS无效时,I/O对外呈高阻;当片选信号CS有效时,由R/W信号决定读或写,根据地址信号,通过I/O输出或输入.(I/O为双向三态结构)2.RAM的存储单元静态RAM的基本存储单元
(以六管NMOS静态存储单元为例)XiYjI/OI/OVCCQQT6T4T3T1T2T5T7T8位线Bj位线Bj存储单元11I/OI/OQQ2)动态RAM的基本存储电路动态RAM的基本存储电路由动态MOS基本存储单元组成。动态MOS基本存储单元通常利用MOS管栅极电容或其它寄生电容的电荷存储效应来存储信息。电路结构(以单管动态存储单元为例)位线数据线
(D)字选线TCSCD输出电容写信息:字选线为1,T导通,数据D经T送入CS.读信息:字选线为1,T导通,CS上的数据经T送入位线的等效电容CD.特点:1)当不读信息时,电荷在电容CS上的保存时间约为数毫秒到数百毫秒;
2)当读出信息时,由于要对CD充电,使
CS上的电荷减少。为破坏性读出。
3)通常在CS上呈现的代表1和0信号的电平值相差不大,故信号较弱。结论:1)需加刷新电路;2)输出端需加高鉴别能力的输出放大器。3)容量较大的RAM集成电路一般采用单管电路。4)容量较小的RAM集成电路一般采用三管或四管电路。多管电路结构复杂,但外围电路简单。3)RAM容量的扩展VCCA8R/WCSGND191018Intel2114A9A7A5A4A6A0A1A3A2I/O1I/O2I/O3I/O4①位扩展I/O1I/O2I/O3I/O4A9A0A1…CSR/WI/O1I/O2I/O3I/O4A9A0A1…CSR/W…A0A1A9R/WCSI/O1I/O2I/O3I/O4I/O4I/O5I/O6I/O7将2114扩展为1K×8位的RAM②字扩展I/O1I/O2I/O3I/O4A9A0A1…CSR/WI/O1I/O2I/O3I/O4A9A0A1…CSR/W…A0A1A9R/WI/O1I/O2I/O3I/O411-2译码器A10将2114扩展为2K×4位的RAM6.2可编程逻辑器件(PLD)PLD是ASIC的一个重要分支。PLD包括PLA、PAL、GAL和EPLD、FPGA等。PLD具有集成度高,速度快,保密性好,可重复编程等特点。输入输出输入电路与阵列或阵列输出电路PLD基本结构框图
互补输入项与项或项反馈项
根据与、或阵列的可编程性,PLD分为三种基本结构。1)与阵列固定,或阵列可编程型结构PROM属于这种结构。2)与、或阵列均可编程型结构PLA(ProgrammableLogicArray)属于这种结构。特点:与阵列规模大,速度较低。特点:速度快,设计逻辑函数可采用最简结构,芯片内部资源利用率高。但编程难度大,缺乏质高价廉的开发工具。3)或阵列固定,与阵列可编程型结构PAL(ProgrammableArrayLogic)属于这种结构。该结构称为PAL结构。特点:速度快,费用低,易于编程。当前许多PLD器件都采用这种结构。6.2.1可编程阵列逻辑(PAL)PAL的基本结构111&&&&≥1≥1A0A1A2F1F0实际产品中,构成输出的乘积项可达8个.1.PLA的输出结构PAL的与阵列结构类同.但输出结构有多种:1)组合输出型(这种结构适用于实现组合逻辑电路)①专用输出结构O&≥11输入项I……共有三种形式:高输出有效;低输出有效;互补输出.本例为低输出有效②可编程I/O结构I/O&≥11输入项I……EN112)寄存器输出型寄存器输出型结构,内含触发器,适应于实现时序逻辑电路.①寄存器输出结构Q&≥11输入项I……EN111DCLOCKEN②带异或门的寄存器输出结构Q&≥11输入项I……EN11≥11D=1CLOCKEN&③算术运算反馈结构A≥11输入项B……EN111D=1CLOCKEN&≥1&≥1≥1≥1≥1AAA+BA+BA+BA+B输出≥1EN111DCLKEN&≥1EN111D&111IN1IN8OUT1OUT8………PAL16R8063031PAL的结构代码组合型寄存器型类型代码HLPCXPSRXRPRSV含义高有效输出低有效输出可编程输出极性互补输出异或门、可编程输出极性积项共享寄存器型输出带异或门寄存器型输出带可编程极性寄存器型带积项共享寄存器型通用型实例PAL10H8PAL10L8PAL16P8PAL16C1AmPAL22XP10PAL20S10PAL16R8PAL16X4PAL16RP8PAL20RS10AmPAL22V10用PAL实现2×2乘法器(输入A1A0和B1B0分别为两位二进制数,输出为结果F3F2F1F0的反码。逻辑方程为:F3=A1+A0+B1+B0F2=A1+B1+A0B0F2=A0+B0F1=A1A0+B1B0+A1B1+A0B0+A1A0B1B0设计采用PAL16L82)PAL应用举例≥1EN111&1A1F1PAL16L800311A01B11B0F1=A1A0+B1B0+A1B1
+A0B0+A1A0B1B0以实现F1为例3)PAL器件的性能特点㈠逻辑功能由用户定义,用可编程方法代替常规设计方法;㈡编程容易,开发简单,简化了系统设计和布线过程;㈢器件密度大,可代替多片中小规模标准数字集成电路,比用常规器件节省空间;㈣器件传输延迟小,工作频率高,有利于提高系统的工作速度;㈤具有可编程的三态输出,管脚配置灵活,输入输出管脚数量可变;㈥具有加密功能,有利于系统保密;㈦采用多种工艺制造,可满足不同系统不同场合的各种需要。6.2.2通用阵列逻辑(GAL)GAL器件继承了PAL、PROM等器件的优点,克服了原有PAL器件的不足,是现代数字系统设计的理想器件.1.GAL基本结构GAL基本结构和PAL大致类似,只是在输出结构上作了重要改进.OLMCEN1111&1&1112919………GAL16V8063031OLMCEN112OE(12)(19)11OLMC结构10S≥1=1PTMUX&≥13210S1S1XOR(n)AC0AC1(n)3210S1S0VccTSMUXFMUX10SOMUX1ENAC0AC1(n)C11D来自与门阵列来自邻级输出
(m)QCKOECKOE1反馈I/O(n)乘积项数据选择器三态数据选择器输出数据选择器反馈数据选择器AC0、AC1(n)及XOR(n)均为GAL器件片内控制字中的结构控制位。结构控制字共有82位,不同的控制内容,可使OLMC被配置成不同的功能组态。控制字的内容是在编程时由编程器根据用户定义的管脚及实现的函数自动写入的。2.GAL的主要特点⑴通用性强⑵100%可编程’⑶速度高,功率低⑷100%可测试6.2.3PLD的开发过程1)逻辑设计2)器件选择3)编制JEDEC文件4)编程5)测试6)加密6.3VHDL语言6.3.1VHDL基本结构与语法
VHDL:VHSICHardwareDescriptionLanguageVHSIC:VeryHighSpeedIntegratedCircuitVHDL由美国国防部制定,以作为各合同商之间提交复杂设计文档的一种标准方案。1987年被采纳为IEEE1076标准1993年被采纳为IEEE1164标准VHDL在语法和风格上类似与高级编程语言,如C语言。但包含有许多硬件特有的结构。VHDL广泛用于:电路的文档记录设计描述的逻辑综合电路仿真VHDL的组成一个VHDL设计由若干个VHDL文件构成,每个文件主要包含三个部分的一个或全部:1.程序包(Package)2.实体(Entity)3.结构体(Architecture)一个完整的VHDL设计必须包含一个实体和一个与之对应的结构体,也可以对应多个结构体.程序包、实体和结构体作用示意图VHDL设计VHDL文件程序包(Package)
声明在设计或实体中将用到的常量,数据类型,元件及子程序等实体(Entities)
声明到其它实体及其它设计的接口,即定义本设计的输入/输出端口.结构体(Architectures)
定义实体的实现.即电路的具体描述.例:一个具有异步清零、进位输入/输出的四位二进制加法计数器的VHDL代码。二进制计数器nresetciclkco3210qcntlibraryieee; --库,程序包调用use
ieee.std_logic_1164.all;use
ieee.std_logic_unsigned.all;ENTITYcntm16
IS --实体
PORT (ci
:INstd_logic;
nreset
:INstd_logic;
clk
:INstd_logic;
co :outstd_logic;
qcnt:bufferstd_logic_vector(3downto0) --此处无‘;’号
);ENDcntm16;ARCHITECTURE
behave
OF
cntm16
IS
--结构体BEGINco<=‘1’
when(qcnt=‘1111’
and
ci=‘1’)else‘0’;PROCESS(clk,nreset) --进程(敏感表)
BEGIN IF(nreset=‘0’)
THEN qcnt<=‘0000’; ELSIF
(clk’EVENT
ANDclk=‘1’)
THEN if(ci=‘1’)
then qcnt<=qcnt+1; endif; ENDIF; --endif_reset ENDPROCESS;ENDbehave;实体(Entity)实体的格式如下:
entity<entity_name实体名>is
port <portlistforyourdesign,列出设计的输入/输出信号端口>
end<entity_name>;以上述的四位计数器为例,则该计数器的实体部分如下ENTITY
cntm16
IS
--实体
PORT (ci
:INstd_logic;
nreset
:INstd_logic;
clk
:INstd_logic;
co:outstd_logic;
qcnt:bufferstd_logic_vector(3downto0) --此处无‘;’号
);ENDcntm16;信号名端口类型端口模式由此看出,实体(ENTITY)类似于原理图中的符号(Symbol),它并不描述模块的具体功能。实体的通信点是端口(PORT),它与模块的输入/输出或器件的引脚相关联。上述实体对应的原理图符号如下:nresetciclkcoqcnt[3..0]cntm16
每个端口必须定义:信号名: 端口信号名在实体中必须是唯一的。信号名应是合法的标识符。
属性:它包括(MODE):决定信号的流向类型(TYPE):端口所采用的数据类型●IN
信号进入实体但并不输出;●OUT
信号离开实体但并不输入;并且不会在内部反馈使用;●INOUT
信号是双向的(既可以进入实体,也可以离开实体);●BUFFER
信号输出到实体外部,但同时也在实体内部反馈。
BUFFER(缓冲)是INOUT(双向)的子集,但不是由外部驱动端口模式(MODE)有以下几种类型:端口模式可用下图说明:(黑框代表一个设计或模块)INOUTBUFFERINPUT●integer
可用作循环的指针或常数,通常不用于 I/O信号; 例如:
SIGNALcount:integerrangeoto255 count<=count+1●bit
可取值‘0’或‘1’●std_logic
工业标准的逻辑类型,取值‘0’,‘1’,‘X’
和‘Z’--由IEEEstd1164标准定义●std_logic_vector
std_logic的组合,工业标准的逻辑类型端口类型(TYPE)定义端口的数据类型,包括以下几种:
结构体(Architecture)
所有能被仿真的实体都有一个结构体描述,结构体描述实体的行为功能。即设计的功能。一个实体可以有多个结构体,一种结构体可能为行为描述,而另一种结构体可能为设计的结构描述或数据通道的描述。结构体是VHDL设计中最主要的部分,它一般有一些子部分构成,如下图所示:结构体(Architecture)
声明区(Declarations)信号声明:声明用于该结构体的类型,常数,元 件,子程序。并发语句信号赋值计算结果,并赋值给信号过程调用调用一个预先定义好的算法元件例化调用另一个实体所描述的电路。即元件调用过程定义一个新算法实现电路功能。在过程中赋值顺序语句。语句按放置的顺序执行。结构体的一般格式如下:Architecture<architecture_name结构体名>of<entity_name>is
--结构体声明区域--声明结构体所用的内部信号及数据类型--如果使用元件例化,则在此声明所用的元件begin–以下开始结构体,用于描述设计的功能--concurrentsignalassignments并行语句信号赋值--processes进程(顺序语句描述设计)ponentinstantiations元件例化end<architecture_name>;
ARCHITECTURE
behave
OF
cntm16
ISBEGINco<=‘1’
when(qcnt=‘1111’
and
ci=‘1’)else‘0’;--并行赋值语句PROCESS(clk,nreset) --进程(敏感表)
BEGIN IF(nreset=‘0’)
THEN --顺序语句
qcnt<=‘0000’; ELSIF
(clk’EVENT
ANDclk=‘1’)
THEN if(ci=‘1’)
then qcnt<=qcnt+1; endif; ENDIF; --endif_reset ENDPROCESS;ENDbehave;上述四位计数器的结构体如下:程序包(Package)与USE语句下面是一个程序包的例子:--包头说明PACKAGELogicISTYPEThree_level_logicIS(‘0’,‘L’,‘Z’);
CONSTANTUnknown_Value:Three_level_logic:=‘0’;
FUNCTIONInvert(input:Three_level_logic) RETURNThree_level_logic;ENDLogic;
--包体说明PACKAGE
BODYLogicIS
--如下是函数的子程序体
FUNCTIONInvert(input:Three_level_logic) RETURNThree_level_logic;BEGIN
CASEinputIS
WHEN‘0’=>RETURN‘1’;
WHEN‘1’=>RETURN‘0’;
WHEN‘Z’=>RETURN‘Z’;
ENDCASE;ENDInvert;ENDLogic;库(Library)
库是专门存放预先编译好的程序包的地方,这样它们就可以在其它设计中被调用。例如在上述计数器设计中开始部分有:LIBRARYieee; USE
ieee.std_logic_1164.ALL;USE
ieee.std_logic_unsigned.ALL;ieee
是ieee标准库的标志名,两个USE语句使得以下设计可使用程序包std_logic_1164、std_logic_unsigned中预定义的全部内容。
以下是IEEE两个标准库“std”与“ieee”中所包含的程序包的简单解释:库名程序包名包中预定义内容stdstandardVHDL类型,如bit,bit_vectorieeestd_logic1164定义std_logic,std_logic_vector等ieeenumeric_std定义了一组基于std_logic_1164中定义的类型的算术运算符,如“+”,“-”,SHL,SHR等ieeestd_logic_arith定义有符号与无符号类型,及基于这些类型上的算术运算。ieeestd_logic_signed定义了基于std_logic与std_logic_vector类型上的有符号的算术运算ieeestd_logic_unsigned定义了基于std_logic与std_logic_vector类型上的无符号的算术运算VHDL运算符·算术运算符(Arithmeticoperators)+ 加- 减* 乘/ 除** 乘方mod 求模rem 求余abs 求绝对值·关系运算符= 等于/= 不等于< 小于<= 小于或等于> 大于>= 大于或等于注:其中‘<=’操作符也用于表示信号的赋值操作逻辑运算符and 逻辑与or 逻辑或nand 与非nor 或非xor 异或xnor 同或not 逻辑非·连接运算符& 连接,将两个对象或矢量连接成 维数更大的矢量数据对象
在逻辑综合中,VHDL语言常用的数据对象为信号、常量、变量。·信号(Signal)
用于声明内部信号,而非外部信号(外部信号对应为in,out,inout,buffer),其在元件之间起互联作用,可以赋值给外部信号。信号也可在状态机中表示状态变量。信号赋值符号为“<=”。·变量·常量
常量在设计描述中保持某一规定类型的特定值不变。如利用它可设计不同模值的计数器,模值存于常量中,不同的设计,改变模值仅需改变此常量值。常量在定义时赋初值,赋值符号为“:=”。
变量只在给定的进程中用于声明局部值或用于子程序中。赋值符号为“:=”。下例为一位DCB码加法计数器的例子.Entitybcdadderis
Port(op1,op2:inintegerrange0to16;result:outintegerrange0to31);Enddcdadder;Architecturebehaviorofbcdadderis
constantadjustnum:integer:=6--定义一常量:整数型,值为6
signalbinadd:integer
range0to18;--定义一个信号,以保存两数二进制相加的和.Begin
binadd<=op1+op2;--信号赋值
process(binadd)
variabletmp:integer:=0;
--定义一个变量,并赋初值为0
begin
ifbinadd>9thentmp:=adjustnum;--变量赋值,立即起作用
elsetnmp:=0;
end
if;result<=binadd+tmp;
end
process;Endbehavior;
VHDL常用语句·VHDL常用语句分并行(Concurrent)语句和顺序(Sequential)语句:并行语句(Concurrent):顺序语句(Sequential):并行语句总是处于进程(PROCESS)的外部。所有并行语句都是并行执行的,即与它们出现的先后次序无关。如when..else语句顺序语句总是处于进程的内部,并且从仿真的角度来看是顺序执行的。如if-then-else语句下面先看一下进程:1.进程Process
进程用于描述顺序事件并且包含在结构中,一个结构体可以包含多个进程语句。以下为进程语句的构成:进程(Process)
声明区(Declarations)内部变量声明:声明用于该进程的类型,常数,元件,子程序顺序语句信号赋值(<=)过程调用null语句(空语句,值保持不变)wait语句(等待时钟信号)case语句loop语句(循环)if语句变量赋值(:=)next语句(跳过剩余循环)exit语句(退出循环)以下为进程语句的语法描述:
endprocess<optional_label>;--进程结束<optional_label>:process<sensitivitylist敏感信号表>--此处声明局部变量,数据类型及其他局部声明
(用于进程中)begin --进程开始--进程中为顺序语句,如:--signalandvariableassignments信号与变量的赋值--ifandcasestatements--if-then-else语句case-when语句--whileandforloops--functionandprocedurecalls函数,过程调用如上述计数器为例:PROCESS(clk,nreset) BEGIN --顺序语句异步清零
IF(nreset=‘0’)
THEN qcnt<=‘0000’; ELSIF
(clk’EVENT
ANDclk=‘1’)
THEN if(ci=‘1’)
then qcnt<=qcnt+1; endif;--endif_resetENDIF;
ENDPROCESS;2.并行(Concurrent)语句和顺序(Sequential)语句□并行(Concurrent)语句
并行语句之间值的更新是同时进行的,与语句所在的顺序无关。并行语句包括:●布尔方程●条件赋值(如when—else—语句)●例化语句一、布尔方程
四选一的数据选择器的库声明、程序包声明及实体定义如下:libraryieee;useieee.std_logic_1164.all;entitymux4isport (s :instd_logic_vector(1downto0); a0,a1,a2,a3 :instd_logic; y :outstd_logic);endmux4;以布尔方程实现的结构体如下:architecturearchmuxofmux4is
beginy<=((((a0andnot(s(0)))or(a1ands(0))))and not(s(1)))or(((a2andnots(0)))or(a3and s(0)))ands(1));endarchmux;y=a0s1s0+a1s1s0+a2s1s0+a3s1s0=(a0s0+a1s0)s1+(a2s0+a3s0)s1
二、条件赋值采用WITH-SELECT-WHEN实现的结构体architecturearchmuxofmux4is
begin
withsselect y<=a0when“00”, a1when“01”, a2when“10”, a3whenothers;endarchmux;采用WHEN-ELSE实现的结构体architecturearchmuxofmux4is
begin y<=a0whens=“00”else a1whens=“01”else a2whens=“10”else a3;endarchmux;□顺序(Sequential)语句.IF-THEN-ELSE
最常用的顺序语句是IF-THEN-ELSE语句和CASE-WHEN语句architecturearchmuxofmux4is
beginprocess(s,a0,a1,a2,a3)begin
if s=“00” then y<=a0; elseif s=“01” then y<=a1; elseif s=“10” then y<=a2; else y<=a3;
endif;
endprocess;endarchmux;.CASE-WHENarchitecturearchmuxofmux4is
beginprocess(s,a0,a1,a2,a3)begin
casesis
when“00”=>y<=a0;
when“01”=>y<=a1;
when“10”=>y<=a2;
whenothers=>y<=a3;
endcase;
endif;
endprocess;endarchmux;元件及元件例化元件声明是对VHDL模块的说明,使之可在其它模块中使用,元件声明可放在程序包中,也可以在某个设计的结构体中声明。元件例化指元件的调用。元件声明语法:Component<元件实体名>
port<元件端口信息,同该元件实现时
的实体的port部分>;Endcomponent;--元件例化:<例化名>:<实体名,即元件名>portmap(<端口列表>)例如:在一cntvh10设计中调用一个模为10的计数器
cntm10和一个七段译码器decode47。LibraryIEEE;UseIEEE.std_logic_1164.all;Entity
cntvh10
IS--cntvh10为所要设计的电路名.
port(Rd,ci,clk:instd_logic;co:outstd_logic;qout:outstd_logic_vector(6downto0))
end
cntvh10;ciconresetqcnt[3..0]clkcntm10ciRdclkcoadr[3..0]decodeout[6..0]qoutdecode47cntvh10ciRdclkcoqoutcntvh由cntm10和decode47组成.ARCHITECTURE
archOFcntvh10
IS--元件声明
Componentdecode47isport
(adr:instd_logic_vector(3downto0);
decodeout:outstd_logic_vector(6downto0));EndComponent;Componentcntm10is
port
(ci,nreset,clk:instd_logic;co:outstd_logic;
qcnt:bufferstd_logic_vector(3downto0));
endcomponent;Signalqa:std_logic_vector(3downto0);--作为中间量BEGINu1:cntm10portmap(ci,Rd,clk,co,qa);u2:decode47portmap(decodeout=>qout,adr=>qa);End
arch;所实现的电路为:ciconresetqcnt[3..0]clkcntm10ciRdclkcoadr[3..0]decodeout[6..0]qoutdecode47顺序相同顺序不同为增加元件例化的灵活性,可定义参数化元件。下面定义一个位数可调的计数器。Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entitycntnbitsis
generic(cntwidth:integer:=4);--定义了一个可调参数,初始值为4
port(ci,nreset,clk:instd_logic;co:outstd_logic;qcnt:bufferstd_logic_vector(cntwidth-1downto0));Endcntnbits;ArchitecturebehaveofcntnbitsisConstantallis1:std_logic_vector(cntwidth-1downto0):=(others=>‘1’);Beginco<=‘1’when(qcnt=allis1andci=‘1’)else‘0’;
process(clk,nreset)
begin
if(nreset=‘0’)thenqcnt<=(other=>’0’);
elsif(clk’eventandclk=‘1’)then
if(ci=‘1’)thenqcnt<=qcnt+1;
endif;
endif;
endprocess;endbehave;generic(cntwidth:integer:=4);定义了一个整数cntwidth,赋初值为4,需改变长度仅需改变初值。元件声明为:Componentcntnbitsisgeneric(cntwidth:integer:=4);port(ci,nreset,clk:instd_logic;co:outstd_logic;qcnt:bufferstd_logic_vector(cntwidth-1downto0));Endcomponent;;Constantallis1:std_logic_vector(cntwidth-1downto0):=(others=>‘1’);表示定义一个常量allis1,用于进位判断,(others=>‘1’)例化格式为:<例化名>:<实体名,即元件名>genericmap(<实际参数,如确定的总线宽度等>)portmap(<端口列表>)例如,例化为10位计数器:U1:cntnbitsgenericmap(10)portmap(ci,Rd,clk,qa);--元件例化在上述的可变位数计数器中,定义了一个常数“allis1”用于产生进位输出信号时的判断。它的值为各位都为‘1’。此外,用了(other=>‘1’)赋值。(other=>‘1’)表示一个集合,集合中各元素用‘,’隔开。表示各元素都为‘1’。other必须出现在集合的最后。例:signal:sa:std_logic_vector(7downto0);sa<=(‘1’,‘0’,other=>‘1’)其结果是给信号sa赋值“10111111”。0
配置(configuration)
一个实体可用多个结构体描述,在具体综合时选择哪一个结构体来综合,则由配置来确定。即配置语句来安装连接具体设计(元件)到一个实体—结构体对。配置被看作是设计的零清单,它描述对每个实体用哪一种行为,它非常象一个描述设计每部分用哪一种零件的清单。配置语句举例:--这是一个两位相等比较器的例子,它用四种不同描述来实现,既有四个结构体。ENTITYequ2IS
PORT(a,b :IN std_logic_vector(1downto0); equ :OUTstd_logic);ENDequ2;--结构体一:用元件例化来实现,即网表形式:ARCHITECTURE
netlistOFequ2IS COMPONENTnor2 PORT(a,b :IN std_logic; C :OUT std_logic); ENDCOMPONENT; COMPONENTxor2 PORT(a,b :IN std_logic; C :OUT std_logic); ENDCOMPONENT; signalx : std_logic_vector(1downto0);BEGIN U1:xor2 PORTMAP(a(0),b(0),x(0)); U2:xor2 PORTMAP(a(1),b(1),x(1)); U3:nor2 PORTMAP(x(0),x(1),equ);END netlist;--结构体二:用布尔方程来实现:ARCHITECTUREequationofequ2ISBEGIN equ<=(a(0)XORb(0)NORa(1)XORb(1));END equation;--结构体三:用行为描述来实现,采用并行语句:ARCHITECTUREcon_behaveofequ2ISBEGIN equ<=‘1’whena=belse‘0’;END con_behave;ARCHITECTUREseq_behave
ofequ2ISBEGIN process(a,b) begin ifa=b then equ<=‘1’; elseequ<=‘0’; endif; endprocess;END seq_behave;--结构体四:用行为描述来实现,采用顺序语句:
上述实例中,实体equ拥有四个结构体:netlist、qeuation、con_behave、seq_behave,若用其例化一个相等比较器aequb,那么实体究竟对应于哪个结构体呢?配置语句很灵活地解决了这个问题:如选用结构体netlist,则用CONFIGURATIONaequbOFequ2IS
FORnetlist
ENDFOR;ENDCONFIGURATION;CONFIGURATIONaequbOFequ2IS
FORcon_behave
ENDFOR;ENDCONFIGURATION;如选用结构体con_behave,则用以上四种结构体代表了三种描述方法:Behavioral(行为描述)反映一个设计的功能或算法,一般使用进程process,用顺序语句表达。Dataflow(数据流描述)反映一个设计中数据从输入到输出的流向,使用并发语句描述。Structure(结构描述)它最反映一个设计硬件方面特征,表达了内部元件间连接关系。使用元件例化来描述。1
子程序子程序由函数(FUNCTION)和过程(PROCEDURE)组成。函数只能用以计算数值,而不能用以改变与函数形参相关的对象的值。函数的参量只能是方式为IN的信号与常量,而过程的参量可以为IN,OUT,INOUT方式。过程能返回多个变量,函数只能由一个返回值。过程和函数常见于面向逻辑综合的设计中,主要进行高层次的数值运算或类型转换、运算符重载,也可用来元件例化。语法如下:函数:FUNCTION<function_name>(parametertypes) RETURN<TYPES>IS
BEGIN <代码区>
END<function_name>;过程:PROCEDURE<procedure_name实体名> (<portlistfortheprocedure,列出过程的输入/输出信号端 口>)IS
BEGIN <代码区>
END<procedure_name>;函数举例:此函数返回两数中的较小数FUNCTIONMin(x,y:INTEGER)RETURN INTEGERISBEGIN
IFx<yTHEN
RETURNx;
ELSE
RETURNy;
ENDIF;ENDMin;过程举例:此过程将向量转换成整数类型USEieee.std_logic_1164.ALLPROCEDUREvector_to_int (z :INstd_logic_vector; x-flag :OUTBOOLEAN; q :INOUTINTEGER)IS BEGIN q:=0; x-flag:=false; FORIINz’RANGELOOP
q:=q*2; IFz(i)/=‘0’THEN
q:=q+1; ELSIFz(i)=‘0’THEN
x-flag:=TURE; ENDIF; ENDLOOP;ENDvector_to_int;2
其他:属性、时钟的表示
属性指的是关于实体、结构体、类型、信号的一些特征。比较有用的属性有:值类属性、信号类属性、范围类属性。●值类属性
值类属性分为’left,’right,’low,’high,’length。其中用符号“’”隔开对象名及其属性。
left表示类型最左边的值;right表示类型最右边的值;low表示类型中最小的值;high表示类型中最大的值;length表示限定型数组中元素的个数。sdown :instd_logic_vector(8downto0);sup :instd_logic_vector(0to8);例:则这两个信号的各属性值如下:sdown’left=8;sdown’right=0;sdown’low=0;sdown’high=8;sdown’length=9;sup’left=0;sup’right=8;sup’low=0;sup’high=8;sup’length=9;●信号类属性仅介绍一个对综合及模拟都很有用的信号类属性:’event’event的值为布尔型,如果刚好有事件发生在该属性所附着的信号上(即信号有变化),则其取值为Ture,否则为False。用它可决定时钟边沿是否有效。例:时钟边沿表示若有如下定义:signal
clk:instd_logic;clk=‘1’andclk’event和clk’eventandclk=‘1’表示时钟的上升沿。即时钟变化了,且其值为1,因此表示上升沿。则:clk=‘0’andclk’event和clk’eventandclk=‘0’表示时钟的下降沿。即时钟变化了,且其值为1,因此表示下降沿。
此外,还可利用预定义好的两个函数来表示时钟的边沿。rising_edge(clk) 表示时钟的上升沿falling_edge(clk) 表示时钟的下降沿●范围类属性’range
属性,其生成一个限制性数据对象的范围例如:signaldata_bus:std_logic_vector(15downto0);data_bus’range=15downto0;3
VHDL的模板
下面以VHDL的两个模板回顾一下VHDL的结构,一个是基本结构,一个是详细结构。其中蓝色字为关键字,<>中内容为对用户不同设计所需填写的内容。--VHDLModelTemplate(Overview)library<library_name>;
use<library_name>.<package_name>.all;entity<entity_name实体名>is <portlistforyourdesign,列出设计的输入/输 出信号端口>end<entity_name>;architecture<architecture_name结构体名>of <entity_name>is--结构体声明区域--声明结构体所用的内部信号及数据类型--如果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 林副产品购销合同
- 施工工程进度保证信
- 践行社会主义核心价值观
- 房屋租赁合同范本完整
- 农业技术产品售后服务协议
- 挂靠合作协议简单
- 沙石运输质量协议书
- 钢筋批发购买
- 代收货款合同书
- 房屋买卖合同的签订与法律纠纷处理
- 2022年江苏省普通高中学业水平合格性考试语文试卷(解析版)
- 超市经营服务方案投标方案(技术标)
- 寻找“红衣姐”(2022年河北中考语文试卷记叙文阅读题及答案)
- 法社会学教程(第三版)教学
- 医学课件疼痛的护理
- 《26. 诗词五首-赤壁》 课件 课件-2024-2025学年八年级语文上册 (统编版)
- 期末检测卷(试题)-2024-2025学年人教PEP版英语六年级上册
- 充电站建设方案书-图文
- 2024三年级英语下册阅读理解课件人教精通版三起
- 2023九年级数学下册 第三章 圆7 切线长定理教案 (新版)北师大版
- 西门子燃机介绍课件学习课件
评论
0/150
提交评论