数字逻辑第五章教材_第1页
数字逻辑第五章教材_第2页
数字逻辑第五章教材_第3页
数字逻辑第五章教材_第4页
数字逻辑第五章教材_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

第5章第

5章第一节PLD的基本概念第二节现场可编程门阵列FPGA第三节在系统可编程ISP第四节可编程逻辑的原理图方式设计第五节可编程逻辑的VHDL文本方式设计可编程逻辑可编程逻辑第一节PLD的基本概念可编程逻辑器件PLDPROMPLAGAL与阵列固定或阵列可编程与阵列或阵列均可编程PAL通用逻辑阵列与阵列可编程或阵列固定CPLD《学习指导》P169FPGAFieldProgrammableGateArray复杂可编程逻辑器件ProgrammableArrayLogicGenericArrayLogic“与或”两级结构器件最终逻辑结构和功能由用户编程决定。特点PLD发展过程ProgrammableLogicDevice现场可编程门阵列数字逻辑电路中一定包含逻辑器件逻辑器件可编程逻辑器件固定逻辑器件可编程阵列(与)●

一、可编程阵列由与或阵列组成PLD结构特点PLD输入缓冲门三态门XXX?●

1、与阵列输出是输入变量的与函数编程点可编程阵列(或)●

2、或阵列输出是输入变量的或函数可编程阵列(与或)●

4、可编程连接技术(自学)P124PLA与阵列可编程或阵列可编程PLD实现组合逻辑例题NOB3B2B1B0G3G2G1G0000000000100010001200100011300110010401000110501010111601100101701110100810001100910011101101010111111101111101211001010131101101114111010011511111000例100011110000412801151391137151110261410B3B2B1B0G311111111自然二进制码转换位循环二进制码用PLA与或逻辑实现。分析如下电路,列出真值表,说明它的逻辑功能。例2Y=?超星_11647965Z=XY其中X、Y均为二位二进制数,试画出Z的PLA阵列。2例3PLD类型●

5、PLD类型按照容量PLD分为简单可编程逻辑器件SPLD复杂可编程逻辑器件CPLDIC管脚数:24~28IC管脚数:44~160简单可编程逻辑器件SPLD的内部结构与阵列固定或阵列可编程………………输入输出(a)PROM与阵列可编程或阵列固定………………输入输出(c)PAL与阵列可编程或阵列可编程………………输入输出(b)PLA与阵列可编程或阵列固定………………输入输出(d)GAL一次可编程只读存储器可编程阵列逻辑可编程逻辑阵列通用阵列逻辑内部包含逻辑宏单元(触发器)三态PLD类型复杂可编程逻辑器件CPLD的内部结构I/OI/OI/OI/OI/OI/O互连总线PLAPLD能做什么呢?

可以毫不夸张的讲,PLD能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路,都可以用PLD来实现。PLD如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由的设计一个数字系统。

通过软件仿真,可以事先验证设计的正确性。在PCB完成以后,还可以利用PLD的在线修改能力,随时修改设计而不必改动硬件电路。使用PLD来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。PLD的这些优点使得PLD技术在90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言(HDL)的进步。现场可编程门阵列第二节现场可编程门阵列●

一、FPGA的结构FPGA-------FieldProgrammableGateArray特点不再受内部结构的限制,可以设计任何复杂的逻辑电路三个基本部分组成:(1)可组态逻辑模块CLB(2)输入/输出模块I/OB(3)可编程连线PI和由它组成的编程开关阵列PSM。AlteraEPF10K10dsf10k.pdfFPGA结构●

1、可组态逻辑模块CLB108×108个CLB可用门达到25万门以上*可实现组合逻辑电路和时序逻辑电路*

逻辑函数发生器(ConfigurableLogicBlock)CLB结构XC2064的CLB结构FPGA结构●

3、可编程连线PI及开关阵列PSM*完成CLB之间逻辑连接并将信息传递到I/OB*

开关阵列PSM提供20种转换方式*将CLB的输出以接力方式传送到芯片任意位置1265784312657843●

2、输入输出模块I/OB*

提供外部封装引脚和内部信息的接口电路*

通过编程可以分别组态为输入引脚、输出引脚和双向引脚*可控制速率、降低功耗(Input/OutputBlock)(ProgrammableInterconnect)(ProgrammableSwitchMatrix)XC2064的I/OB电路十大PLD公司排名公司市场占有率1Altera30.12Xilinx29.03Vantis11.14Lattice11.05Actel7.06Luccent4.37Cypress2.28Atmel2.19Philips1.410Quicklogic1.2十大CPLD/FPGA公司Altera和Xilinx占有了60%以上的市场份额。

在欧洲用Xilinx的人多,在日本和亚太地区用Altera的人多,在美国则是平分秋色。

全球CPLD/FPGA产品60%以上是由Altera和Xilinx提供的。可以讲Altera和Xilinx共同决定了PLD技术的发展方向。全球三大CPLD/FPGA公司AlteraXilinxLatticeISP逻辑器件特点第三节在系统可编程ISP常规PLD开发过程逻辑设计选择器件PLD编程(下载)PLD测试将器件插入印制板编制JEDEC文件熔丝图文件(InSystemProgramming)在系统编程(ISP):用户在自己设计的目标系统中或线路板上为重构逻辑而对逻辑器件进行编程或反复改写的能力。熔丝图文件以码点形式表示阵列的内容:“0”表示该位置的可编程单元应予接通,“1”表示该位置的可编程连接应予断开。ISP逻辑器件特点第三节在系统可编程ISP在目标系统中、线路板上直接设计并修改硬件电路。常规PLD开发过程逻辑设计选择器件PLD编程(下载)PLD测试将器件插入印制板编制JEDEC文件采用ISP技术的PLD开发过程逻辑设计及编程选择器件编译、仿真下载、使用将器件插入印制板编制JEDEC文件编程器上进行(InSystemProgramming)ABLE语言VHDL语言VerilogHDL原理图1032管脚定义查资料

ISP逻辑器件结构ispLSI1032ISP逻辑器件结构它以固定方式将所有内部逻辑联系在一起1、全局布线区GRPP131巨块、全局布线区组成通用总线ispLSI1032巨块巨块通用逻辑块GLB输出布线ORPI/O引脚及专用输入●

一、ispLSI的体系结构ISP的通用逻辑块是ispLSI最基本的逻辑单元2、通用逻辑块GLB特点乘积项共享阵列A0~A7、B0~B7、C0~C7、D0~D7=32块ISP的GLB标准组态GLB的5种组态最多可将20个乘积项集中于一个触发器使用1标准组态ISP的GLB标准组态例子ISP的GLB高速组态4个或门跨过乘积项共享阵列(PTSA)及异或门直接与4个触发器相连,以提高速度支持高速计数器。2高速直通组态每个或门只有4个乘积项,与触发器一一对应,不能任意调用。ISP的GLB异或组态3异或逻辑组态4个异或门的一个输入分别是乘积项0、4、8、13,另一个则从4个或门输出中任意组合。可实现计数器、比较器和ALU。可将D触发器转换为JK、T触发器。ISP的GLB单乘积项组态4单乘积项组态将乘积项0、4、10、13分别跨越或门、PTSA直接输出。速度最快。ISP的GLB多模式组态5多模式组态上述4种组态可以在同一个GLB中混合使用。ISP的输出布线ORP介于通用逻辑块GLB和输入输出单元IOC之间3、输出布线区ORP可编程ISP的输出布线ORP编程对ORP编程使GLB与I/O相连:ISP的输出布线ORP跨过跨过ORP使GLB与I/O直接相连:高速ISP的输入输出单元IOC4、输入输出单元IOC*MUX1控制IOC处于专用输出组态、专用输入组态、I/O组态。

*MUX2和MUX3用来选择信号的来源和输出极性。

*MUX4用来选择寄存器输入还是缓冲器输入。*MUX5和MUX6用来选择时钟信号和调整时钟信号的极性。

*IOC中的触发器有两种工作方式:一是锁存方式,触发器在时钟信号低电平时锁存;二是寄存器方式,在时钟信号上升沿时将信号打入。两种方式通过R/L端编程来确定。ISP的输入输出单元IOC输入输出单元IOC共有八种组态输出使能的公共乘积项OE用于输出使能的公共乘积项OE,是本巨块中某个GLB的19号乘积项产生的。利用它作为本巨块所有16个I/O单元公用的OE信号。巨块的输出使能控制:IOC的MUX1巨块5、巨块

*8个GLB*16个I/O单元*2个直接输入*

输出布线区C0时钟分配网络CDN6、时钟分配网络CDNY0Y1Y2Y3是外部输入的时钟信号CDN可以产生五个全局时钟将GLB”C0”的输出作为时钟输入,以便产生内部时钟。P131图5.13右下角信号流程I/O单元全局布线通用逻辑单元输出布线I/O单元输入信号→→→→→→输出信号信号流程1、交作业2、本周作业P156

8、9、10、13、14、15、16作业要求:提交编译无错误的源代码提问已知一个组合逻辑可以采用几种电路形式来实现?1、直接用与门、或门、非门。2、用中规模组合逻辑电路:数据选择器、译码器。3、用PROM。BAYCA0A1D1D0D2D3BA110YY0数据选择器ABCG1G2AG2BBAC“1”3:8译码器Y或阵列的容量是8。CBAY4、用PLA。CBAY5、什么叫PLD?6、P135图5.17MUX1的作用?在系统编程原理和方法自学正常模式与编辑模式由谁控制?数据的写入方式?编程接口信号的关系?对某一行编程的三个步骤?多芯片的编程方法?ispENSDISDOMODESCLKP137●

二、在系统编程原理原理图方式设计第四节可编程逻辑设计●

一、可编程逻辑设计流程图

设计库设计输入*原理图*HDL设计输入*原理图*HDL功能模拟

综合

实现

时序模拟

器件编程

(下载)编译器所有的设计过程依赖于CAD-(Computeraideddesign)模拟:先通过模拟器将设计进行仿真。实现:将综合后的逻辑放置到一个逻辑器件之中的过程,同时实现合理布线。综合:把高层次的描述转换成底层电路,形成网表。时序模拟:可以对设计的逻辑功能及时序进行验证。电子设计自动化EDA-(ElectronicsDesignAutomation)下载过程原理图输入●

二、原理图输入CAD工具提供一系列表示不同输入端数的各种类型门的图形符号。元件库x3x1x2f演示原理图输入过程…./ylt/ylt.bdf直接从元件库中调用器件进行设计。LIBRARYieee;USEieee.std_logic_1164.all;ENTITYexample1IS

PORT(x1,x2,x3 :IN BIT; f:OUTBIT);ENDexample1;ARCHITECTURELogicFuncOFexample1IS

BEGIN

f<=(x1ANDx2)OR(NOTx2ANDx3);ENDLogicFunc;VHDL语言结构第五节可编程逻辑的VHDL文本设计方式●

一、VHDL语言结构库实体结构体每个部分通过关键字引导出来描述逻辑功能引用库中程序包//examplech1-1.cpp#include<iostream.h>Voidmain(){cout<<“I’mastudent.\n”;}x3x1x2fVHDL结构VHDL语言结构组成库程序包实体结构体配置存放已编译的实体、结构体、程序包和配置存放各种设计模块能共享的数据类型、常数、程序等描述所设计硬件系统的外部接口信号描述所设计硬件系统的内部结构和功能用来从库中选取所需单元来组成新系统实体说明、结构体格式ENTITY<实体名>IS

[类属参数说明

];

[端口说明部分

];

[实体说明部分];END<实体名>;ARCHITECTURE<结构体名>

OF

<实体名>IS

[结构体说明部分];BEGIN

<并行处理语句>

;END

<结构体名>;实体说明格式结构体格式ENTITYhalf_adderIS

PORT(A,B:INstd_logic;Co:OUTstd_logic;S:OUTstd_logic);ENDhalf_adder;ARCHITECTURErtlOFhalf_adderISSIGNALtmp1,tmp2:std_logic;BEGIN tmp1<=AORB; tmp2<=ANANDB; Co<=NOTtmp2; S<=tmp1ANDtmp2;ENDrtl;端口说明部分ABSCOABSCotmp1tmp2实体名一致实体说明、结构体格式ENTITYhalf_adderIS

PORT(A,B:INstd_logic;Co:OUTstd_logic;S:OUTstd_logic);ENDhalf_adder;ARCHITECTURErtlOFhalf_adderIS

BEGIN S<=AXORB; Co<=AANDB;ENDrtl;ABSCOΣABSCo0000011010101101ABSCo半加器半加器演示LIBRARYieee;USEieee.std_logic_1164.all;对象及数据类型1、VHDL语言的三大对象常量(constant)信号(signal)变量(variable)2、VHDL语言的数据类型*

标准数据类型*

用户定义的数据类型信号<=表达式;变量:=表达式;数据类型含义备注例子整数(integer)整数-(231-1)~+(231-1)+136,-457实数(real)实数-1038~+1038一定有小数点-1.0,+2.5e23位(bit)逻辑0或1‘1’,’0’位矢量(bit_vector)位矢量双引号括起来的一组数“00101”布尔量(boolean)逻辑假或真只有真(true)和假(false)字符(character)ASCII字符Character用单引号括起来‘a’,’b’,’c’时间(time)整数和时间单位fs,ps,ns,us,ms,sec,min,hr20us,32ns错误等级(SEVERITYLevel)VHDL程序在编译、仿真、综合过程中的工作状态note,warning,error,failurenote,warning,可以忽略,error,failure不可以忽略自然数(natural)和正整数(positive)整数的子集natural,positive字符串(string)字符矢量双引号括起来的字符序列“START”●

二、对象及数据类型硬件电路中的一条硬件连接线需要遵循的原则是:先定义,后使用。立即赋值延迟赋值常用数据类型在IEEE1164标准的“std-logic-1164”程序包中,可枚举类型std-logic的定义格式如下所示:*IEEE标准数据类型标准逻辑位std-logic

数据类型标准逻辑矢量std-logic-vector数据类型TYPEstd–logicIS(′U′,--Uninitialized′X′,--ForcingUnknown′0′,--Forcing0′1′,--Forcing1′Z′,--HighImpedance′W′,--WeakUnknown′L′,--Weak0′H′,--Weak1′—′,--Don′tcare);初始值不定01高阻弱信号不定,未知弱信号0弱信号1不可能情况

九值逻辑系统用户定义的数据类型并行描述语句-进程语句VHDL语言程序的结构体中既存在并行语句又存在顺序语句。描述一组并发行为,它是并发执行的,与程序的书写顺序无关。描述一组严格顺序执行的行为。与程序的书写顺序有关。●

三、并行描述语句的格式PROCESS[敏感信号表][进程语句说明部分];

BEGIN<进程语句部分>;

ENDPROCESS

一个结构体可以包括一个或多个进程语句,进程内部的语句是顺序语句,而结构体的各个进程语句之间是一组并发行为。进程语句控制顺序语句位于程序的那一部分?1、进程语句进程语句并发执行!由顺序语句构成:IF语句CASE语句LOOP语句……敏感信号的值发生改变,能够引起进程语句执行。LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYgateIS

PORT(A,B:INstd_logic;X,Y,Z:OUTstd_logic);ENDgate;ARCHITECTUREbehaveOFgateIS

BEGIN X<=AANDB; Y<=AORB; Z<=AXORB;ENDbehave;并发信号赋值语句并发赋值语句在结构体中是并行执行的,他们的执行与书写顺序无关。“<=”2、并发信号赋值语句LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYgate_circuitsIS

PORT(A,B:INstd_logic;X,Y,Z:OUTstd_logic);ENDgate_circuits;ARCHITECTUREbehaveOFgate_circuits

IS

BEGINp1:PROCESS(A,B)BEGINX<=AANDB;ENDPROCESSp1;p2:PROCESS(A,B)BEGINY<=AORB;ENDPROCESSp2;p3:PROCESS(A,B)BEGINZ<=AXORB;ENDPROCESSp3ENDbehave;Z<=AXORB;Y<=AORB; X<=AANDB;与顺序无关《王振红》p25一条并发信号赋值语句与一个含有信号赋值语句的进程等价。敏感信号条件信号赋值语句根据不同条件将不同的表达式赋值给目标信号。3、条件信号赋值语句LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYand_gateIS

PORT(a,b:INstd_logic;x:OUTstd_logic);ENDand_gate;ARCHITECTURErtlOFand_gateIS

BEGIN

x<=‘0’WHENa=‘0’ANDb=‘0’ELSE‘0’WHENa=‘0’ANDb=‘1’

ELSE‘0’WHENa=‘1’ANDb=‘0’

ELSE‘1’;ENDrtl;目标信号

<=表达式1when

条件1else

表达式2when

条件2else……

表达式n-1when

条件n-1

else

表达式n;《王振红》p26LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYandgateIS

PORT(a,b:INstd_logic;x:OUTstd_logic);ENDandgate;ARCHITECTURErtlOFandgateIS

BEGINPROCESS(a,b)BEGINIF(a=‘0’ANDb=‘0’)THENx<=‘0’ELSIF(a=‘0’ANDb=‘1’)THENx<=‘0’ELSIF(a=‘1’ANDb=‘0’)THENx<=‘0’ELSEx<=‘1’ENDIF;END

PROCESSENDrtl;等价的进程语句功能描述:二输入与门选择信号赋值语句根据选择条件的不同而将不同表达式赋给目标信号。4、选择信号赋值语句LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYmux4IS

PORT(d0,d1,d2,d3:INstd_logic;sel:INstd_logic_vector(1downto0);q:OUTstd_logic);ENDmux4;ARCHITECTURErtlOFmux4IS

BEGINWITHselSELECT

q<=d0WHEN“00”,d1WHEN“01”,d2WHEN“10”,d3WHENOTHER;ENDrtl;with

表达式select目标信号<=表达式1when

选择条件1,表达式2when

选择条件2,

……表达式nwhen

选择条件n,《王振红》p28功能描述:四选一电路。位矢量libraryieee;useieee.std_logic_1164.all;Entitymultiplexerisport(S:instd_logic_vector(1downto0);I:instd_logic_vector(3downto0);Y:outstd_logic);Endmultiplexer;Architecturefunction_tableofmultiplexerisbeginY<=I(0)whenS="00"elseI(1)whenS="01"elseI(2)whenS="10"elseI(3)whenS="11"else

'X';Endfunction_table;libraryieee;useieee.std_logic_1164.all;Entitymultiplexer_wsisport(S:instd_logic_vector(1downto0); I:instd_logic_vector(3downto0);Y:outstd_logic);Endmultiplexer_ws;Architecturefunction_table_wsofmultiplexer_wsisbegin

withSselect Y<= I(0)when"00", I(1)when"01", I(2)when"10", I(3)when"11", 'X'whenothers;Endfunction_table_ws;顺序描述语句if●

四、顺序描述语句*if语句if

条件1then

第一组顺序语句;elsif

条件2then

第二组顺序语句;……elsif

条件nthen

第n组顺序语句;else

第n+1组顺序语句;endif;if

条件then

顺序语句;endif;if

条件then

顺序语句;else

顺序语句;endif;LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYmux4ISPORT(d0:INstd_logic_vector(3DOWNTO0);d1:INstd_logic_vector(3DOWNTO0);d2:INstd_logic_vector(3DOWNTO0);d3:INstd_logic_vector(3DOWNTO0);sel:INstd_logic_vector(1DOWNTO0);q:OUTstd_logic_vector(3DOWNTO0));ENDmux4;ARCHITECTURErtlOFmux4ISBEGINPROCESS(d0,d1,d2,d3,sel)BEGINIF(sel="00")THENq<=d0;

ELSIF(sel="01")THENq<=d1;

ELSIF(sel="10")THENq<=d2;

ELSEq<=d3;

ENDIF;ENDPROCESS;ENDrtl;功能描述:四选一电路。顺序描述语句case*case语句LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYmux4ISPORT(d0:INstd_logic_vector(3DOWNTO0);d1:INstd_logic_vector(3DOWNTO0);d2:INstd_logic_vector(3DOWNTO0);d3:INstd_logic_vector(3DOWNTO0); sel:INstd_logic_vector(1DOWNTO0); q:OUTstd_logic_vector(3DOWNTO0));ENDmux4;ARCHITECTURErtlOFmux4ISBEGINPROCESS(d0,d1,d2,d3,sel)BEGIN

CASEselIS

WHEN"00"=>q<=d0;

WHEN"01"=>q<=d1;

WHEN"10"=>q<=d2;

WHEN"11"=>q<=d3;

WHENOTHERS=>q<="ZZZZ";

ENDCASE;ENDPROCESS;ENDrtl;功能描述:四选一电路。case

条件表达式is

when条件表达式的值=>一组顺序语句;

……

when条件表达式的值=>一组顺序语句;endcase;顺序描述语句forloop*loop语句LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYjioujyISPORT(d:INstd_logic_vector(0TO7);

q:OUTstd_logic);ENDjioujy;ARCHITECTURErtlOFjioujyISBEGINPROCESS(d)VARIABLEtmp:std_logic;BEGINtmp:=‘0’;

FORiIN0to7LOOPtmp:=tmpxord(i);ENDLOOP;q<=tmp;ENDPROCESS;ENDrtl;循环标号:for

循环变量in

范围loop

顺序处理语句;

endloop

循环标号;*for

loop语句功能描述:8位奇偶校验电路将输入端口d送来的矢量进行按位异或,d为奇数个1,则q=1;d为偶数个1,则q=0。中间变量范围顺序描述语句whileloopLIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYlogic_andISPORT(input:INstd_logic_vector(7DOWNTO0);q:OUTstd_logic);ENDlogic_and;ARCHITECTUREbehaveOFlogic_andISBEGINPROCESS(input)VARIABLEtmp:std_logic;VARIABLEi:integer;BEGINtmp:='1';i:=0;

WHILE(i<8)LOOPtmp:=tmpANDinput(i);i:=i+1;

ENDLOOP;q<=tmp;ENDPROCESS;ENDbehave;循环标号:while

条件表达式loop

顺序处理语句;

endloop

循环标号;*while

loop语句功能描述:对输入端口input送来的位矢量各位进行逻辑与操作,当输入input位矢量有一个0时输出q为0,输入input位矢量全为1时输出q为1。条件满足时执行循环体内的语句。结构体的三种描述(数据流描述)●

五、结构体的三种描述方式数据流描述方式结构描述方式行为描述方式ABCinSCo1、数据流描述方式LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYfull_adderIS

PORT(A,B:INstd_logic;Cin:INstd_logic;Co:OUTstd_logic;S:OUTstd_logic);ENDfull_adder;ARCHITECTURErtlOFfull_adderISSIGNALtmp1,tmp2:std_logic;BEGIN tmp1<=AXORB; tmp2<=tmp1ANDCin; S<=tmp1XORCin; Co<=tmp2OR(AANDB);ENDrtl;ΣABCinCOS描述从输入到输出信号的走向tmp2tmp1三种方法设计全加器P52图2.31(b)*SIGNAL用来描述组件间的连接信号结构描述方式2、结构描述方式ABSCOΣ半加器多层次设计中,通过调用库中的元件或是已设计好的模块来完成设计实体功能的描述。LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYhalf_adderIS

PORT(A,B:INstd_logic;Co:OUTstd_logic;S:OUTstd_logic);ENDhalf_adder;ARCHITECTURErtlOFhalf_adderISSIGNALtmp1,tmp2:std_logic;BEGIN tmp1<=AORB; tmp2<=ANANDB; Co<=NOTtmp2; S<=tmp1ANDtmp2;ENDrtl;书《VHDL语言程序设计》P44LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYor_gateIS

PORT(a,b:INstd_logic;c:OUTstd_logic);ENDor_gate;ARCHITECTURErtlOFor_gateISBEGINc<=aORb;ENDrtl;ABSCotmp1tmp2ABΣStmp3ΣCintmp1tmp2CO结构描述方式LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYfull_adderIS

PORT(A,B:INstd_logic;Cin:INstd_logic;Co:OUTstd_logic;S:OUTstd_logic);ENDfull_adder;ARCHITECTUREstructureOFfull_adderIS

SIGNALtmp1,tmp2,tmp3:std_logic;

COMPONENThalf_adder

PORT(A,B:INstd_logic;Co:OUTstd_logic;S:OUTstd_logic);

END

COMPONENT;

COMPONENTor_gate

PORT(a,b:INstd_logic;c:OUTstd_logic);

ENDCOMPONENT;BEGIN

U0:half_adder

PORTMAP(A=>A,B=>B,S=>tmp1,Co=>tmp2);

U1:half_adder

PORTMAP(A=>tmp1,B=>Cin,S=>S,Co=>tmp3);

U2:or_gate

PORTMAP(a=>tmp3,b=>tmp2,c=>Co);ENDstructure;ABΣStmp3ΣCintmp1tmp2COU0U1U2*用组合语句COMPONENT调用已有组件。*PORTMAP语句将设计的端口名称替换为被调用组件的端口名称2、结构描述方式行为描述方式LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYfull_adderIS

PORT(A,B,Cin:INstd_logic;Co,S:OUTstd_logic;ENDfull_adder;ARCHITECTUREbehaveOFfull_adderISBEGIN

PROCESS(A,B,Cin)

VARIABLEn:integerRANGE0TO3;

CONSTANTS_vector:std_logic_vector(0TO3):="0101";

CONSTANTCo_vector:std_logic_vector(0TO3):="0011";

BEGIN n:=0;

IF(A='1')THEN n:=n+1;

ENDIF;

IF(B='1')THEN n:=n+1;

ENDIF;

IF(Cin='1')THEN n:=n+1;

ENDIF;S<=S_vector(n);Co<=Co_vector(n);

ENDPROCESS;ENDbehave;n是对A、B、Cin三个变量中1的个数的记录。ABCin中“1”的个数SCO000110201311ABCinSCO0000000110010100110110010101011100111111全加器真值表3、行为描述方式常量组合逻辑设计-多输入简单门●

六、VHDL的组合逻辑设计●

1、多输入简单门电路ABCYABCY00000010010001101000101011001111LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYand3_gateIS

PORT(a,b,c:INstd_logic; y:OUTstd_logic);ENDand3_gate;ARCHITECTUREbehave_arcOFand3_gateISBEGIN

PROCESS(a,b,c)

BEGIN y<=aANDbANDc;

ENDPROCESS;ENDbehave_arc;ARCHITECTURErtl_arcOFand3_gateISBEGINPROCESS(a,b,c)

VARIABLEcomb:std_logic_vector(2DOWNTO0);BEGINcomb:=a&b&c;

CASEcombIS

WHEN"000"=>y<='0';

WHEN"001"=>y<='0';

WHEN"010"=>y<='0';

WHEN"011"=>y<='0';

WHEN"100"=>y<='0';

WHEN"101"=>y<='0';

WHEN"110"=>y<='0';

WHEN"111"=>y<='1';

WHEN

OTHERS=>y<='X';

ENDCASE;

ENDPROCESS;ENDrtl_arc;CASE语句并置运算符作用:将逻辑信号c,a,b连接后形成一个新的位矢量。组合逻辑设计_三态门●

2、三态门电路DINENDOUT×0Z010111DINENDOUTLIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYtri_gateIS

PORT(din,en:INstd_logic; dout:OUTstd_logic);ENDtri_gate;ARCHITECTUREbehave_arcOFtri_gateISBEGIN

PROCESS(din,en)

BEGIN

IF(en='1')THENdout<=din;

ELSEdout<='Z';

ENDIF;

ENDPROCESS;ENDbehave_arc;IF_THEN_ELSE语句LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYbidir_bus_buff8IS

PORT(a,b:INOUTstd_logic_vector(7DOWNTO0);en,dr:INstd_logic;ENDbidir_bus_buff8;ARCHITECTURErtl_arcOFbidir_bus_buff8IS

SIGNALaout,bout:std_logic_vector(7DOWNTO0);BEGIN

PROCESS(a,b,dr,en)

BEGINIF(en='0'ANDdr='1')THENbout<=a;

ELSIF(en='0'ANDdr='0')THENaout<=b;

ELSEaout<="ZZZZZZZZ";bout<="ZZZZZZZZ";

ENDIF;b<=bout;a<=aout;

ENDPROCESS;ENDrtl_arc;组合逻辑设计_总线缓冲器●

3、总线缓冲器ENDR数据传输1×Z00A←B01A→BIF_THEN_ELSIF_ELSE语句AENBDR端口说明中的双向模式“SIGNAL”是用来表示信号的保留字组合逻辑设计_选择器LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYmuxIS

PORT(a,b,c,d:INstd_logic;s:INstd_logic_vector(1downto0);y:OUTstd_logic);ENDmux;ARCHITECTURErtlOFmuxIS

BEGIN

y<=aWHENs=“00”ELSEbWHENs=“01”ELSEcWHENs=“10”ELSEdWHENs=“11”ELSE

‘X’;ENDrtl;●

4、选择器‘X’不定LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYencoder8_3IS

PORT(d:INstd_logic_vector(0TO7);q:OUTstd_logic_vector(2DOWNTO0));ENDencoder8_3;ARCHITECTURErtl_arcOFencoder8_3ISBEGIN

PROCESS(d)BEGIN

CASEdIS

WHEN"01111111"=>q<="111";

WHEN"10111111"=>q<="110";

WHEN"11011111"=>q<="101";

WHEN"11101111"=>q<="100";

WHEN"11110111"=>q<="011";

WHEN"11111011"=>q<="010";

WHEN"11111101"=>q<="001";

WHEN"11111110"=>q<="000";

WHENOTHERS=>q<="ZZZ";

ENDCASE;

ENDPROCESS;ENDrtl_arc;组合逻辑设计_编码器●

5、编码器D0D1D2D3D4D5D6D7Q2Q1Q00111111111110111111110110111111011110111110011110111011111110110101111110100111111110000普通编码器D0Q0D1D2D3D4D5D6D7Q1Q28-3线编码器组合逻辑设计_优先编码器●

5、编码器STI0I1I2I3I4I5I6I7Y2Y1Y0YEYS1××××××××111110×××××××0000010××××××01001010×××××011010010××××0111011010×××01111100010××011111101010×0111111111010011111111110101111111111110优先编码器LIBRARYieee;USEieee.std_logic_1164.all;ENTITYBIMIS

PORT(st:IN STD_LOGIC; d:IN STD_LOGIC_VECTOR(0TO7); ye,ys:OUTSTD_LOGIC; y:OUT STD_LOGIC_VECTOR(2DOWNTO0));ENDBIM;ARCHITECTUREfuncOFBIMIS

BEGIN

PROCESS(st,d)

BEGIN

IF(st='0')THEN

IFd(7)='0'THENy<="000";ye<='0';ys<='1';

ELSIFd(6)='0'THENy<="001";ye<='0';ys<='1';

ELSIFd(5)='0'THENy<="010";ye<='0';ys<='1';

ELSIFd(4)='0'THENy<="011";ye<='0';ys<='1';

ELSIFd(3)='0'THENy<="100";ye<='0';ys<='1';

ELSIFd(2)='0'THENy<="101";ye<='0';ys<='1';

ELSIFd(1)='0'THENy<="110";ye<='0';ys<='1';

ELSIFd(0)='0'THENy<="111";ye<='0';ys<='1';

ELSE

y<="111";ye<='1';ys<='0';

ENDIF;

ELSE y<="111";ye<='1';ys<='1';

ENDIF;

ENDPROCESS;ENDfunc;I0Y0I1I2I3I4I5I6I7Y1Y274LS148优先编码器YSYEST组合逻辑设计_优先编码器波形STI0I1I2I3I4I5I6I7Y2Y1Y0YEYS1××××××××111110×××××××0000010××××××01001010×××××011010010××××0111011010×××01111100010××011111101010×0111111111010011111111110101111111111110仿真波形组合逻辑设计_译码器●

6、译码器G1G2AG2BCBAY0Y1Y2Y3Y4Y5Y6Y7×1××××11111111××1×××111111110×××××111111111000000111111110000110111111100010110111111000111110111110010011110111100101111110111001101111110110011111111110LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYdecoder_74LS138IS

PORT(g1,g2a,g2b,a,b,c:INstd_logic;y:OUTstd_logic_vector(7DOWNTO0));ENDdecoder_74LS138;ARCHITECTURErtl_arcOFdecoder_74LS138IS

SIGNALcomb:std_logic_vector(2DOWNTO0);BEGINcomb<=c&b&a;

PROCESS(g1,g2a,g2b,comb)BEGIN

IF(g1='1'ANDg2a='0'ANDg2b='0')THEN

CASEcombIS

WHEN"000"=>y<="11111110";

WHEN"001"=>y<="11111101";

WHEN"010"=>y<="11111011";

WHEN"011"=>y<="11110111";

WHEN"100"=>y<="11101111";

WHEN"101"=>y<="11011111";

WHEN"110"=>y<="1011111

温馨提示

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

评论

0/150

提交评论