




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章计算机硬件基础第一页,共128页。2.1半导体器件的开关特性数字电路中主要使用半导体器件二极管、三极管、电容器等。数字电路二极管、三极管主要当做电开关使用,即让其工作在开关状态。2.1.1二极管的开关特性二极管在正向电压作用下电阻很小,处于导通状态,相当于一只接通的开关;在反向电压作用下,电阻很大,处于截止状态,如同一只断开的开关。利用二极管的开关特性,可以组成各种逻辑电路。21第二页,共128页。2.1.1二极管1、二极管的开关特性二极管在正向电压作用下电阻很小,处于导通状态,相当于一只接通的开关;
二极管在反向电压作用下,电阻很大,处于截止状态,如同一只断开的开关。
利用二极管的开关特性,可以组成各种逻辑电路(P32二极管与门、或门等)。例:二极管与门电路当A、B都置为高电平时,二极管截止,Y输出为高电平;当A、B中最少有一个置为低电平时,二极管导通,就会通过DA或DB把Y点的电平拉低,所以Y输出低电平。这样A、B两个输入端和输出端Y之间就形成了与门的逻辑关系。第三页,共128页。2.1.2三极管半导体三极管是电子电路中最重要的器件,它最主要的功能是电流放大和开关作用。在模拟电路中三极管可以构成放大器,用来放大电流;在数字电路中三极管作为开关元件。三极管顾名思义具有三个电极。二极管是由一个PN结构成的,而三极管由两个PN结构成,共用的一个电极成为三极管的基极(用字母b表示),其他的两个电极成为集电极(用字母c表示)和发射极(用字母e表示)。水龙头有三个点:进水、阀门、出水,相当于三极管的发射极e、基极b、集电极c在数字电路中三极管可以组成逻辑电路中的“与非门”、“或非门”等。(P33页)第四页,共128页。2.2基本逻辑运算和基本门电路基本逻辑运算:与、或、非基本门电路:与门、或门、非门;与非门、或非门、三态门等三态门三态门由三种状态:导通时的0、1两状态和不导通时的禁止态。
当E=1时,三态门导通,其输出L等于输入D,(D=0,L=0;D=1,L=1);当E=0时,三态门不导通,输出与输入呈现高电阻隔离。三态门在计算机中常用在部件与总线连接上,用三态门来控制部件与总线间的传输控制。DELD——输入端L——输出端E——使能端(门开关)第五页,共128页。2.3计算机中常用的逻辑部件2.3.1加法器
2.3.2算术逻辑单元(简称ALU)2.3.3译码器2.3.4数据选择器2.3.5数据分配器组合逻辑电路由门电路组成,没有记忆作用,特点是输出信号随输入信号变化而变化。在计算机设计中,组合逻辑电路常作为控制器电路,其输入往往是指令的操作码或状态信号,而输出往往输出到寄存器中或加到三态门的控制端。第六页,共128页。Cn=XnYnCn-1+XnYnCn-1+XnYnCn-1+XnYnCn-1Fn=XnYnCn-1+XnYnCn-1+XnYnCn-1+XnYnCn-12.3.1加法器
不考虑进位输入时,两数码Xn、Yn相加称为半加器;若考虑低位进位输入Cn-1相加,则称为全加器。全加和Fn与进位输出Cn的表示式为:其逻辑电路图详见教材42页图2.17,2.18所示。有关半加器和全加器的功能表及逻辑图如教材中图2.5和图2.6第七页,共128页。
XnYnCn-1FnCn0000000110010100110110010101011100111111
一位全加器真值表如下:其中Xn为被加数,Yn为加数,Cn-1为低级进位信号,Fn为和,Cn为本级向上进位信号。第八页,共128页。简单4位串行全加器如下图所示:
(教材图2-20四位串行加法器)第九页,共128页。
将4个全加器相连可得4位加法器(如上图),其加法所需时间较长。
这是因为其位间进位是串行传送的,本位全加和Fi必须等低位进位Ci-1来到后才能进行,加法时间与位数有关。
只有改变进位逐位传送的路径,才能提高加法器工作速度。解决办法之一是采用“超前进位产生电路”来同时形成各位进位,从而实行快速加法,我们称这种加法器为超前进位加法器。
超前进位产生电路在随后运算器章节会有介绍。第十页,共128页。2.3.2算术逻辑单元(简称ALU)
ALU是一种功能较强的组合逻辑电路,它能进行多种算术运算和逻辑运算。例:SN74181型四位ALU中规模集成电路
SN74181能执行16种算术运算和16种逻辑运算
真值表见P23页表2.5所示。在图2.5中功能表中,“加”表示算术加,“+”表示逻辑加。M是状态控制端:M=H,执行逻辑运算;M=L执行算术运算。S0~S3是运算选择端,它决定电路执行哪种算术运算或逻辑运算。第十一页,共128页。第十二页,共128页。S0S1S2S3LLLLLLLHLLHLLLHHLHLLLHLHLHHLLHHHHLLLHLLHHLHLHLHHHHLLHHLHHHHLHHHHAA+BA•B“0”A•BBABA•BA+BABBA•B“1”A+BA+BAAA+BA+B减1A加(A•B)(A•B)加(A+B)A减B减1(A•B)减1A加(A•B)A加B(A•B)加(A+B)(A•B)减1A加AA加(A+B)A加(A+B)A减1A+1(A+B)加1(A+B)加1“0”A加(A•B)加1(A•B)加(A+B)加1A减BA•BA加(A•B)加1A加B加1(A•B)加(A+B)加1(A•B)A加A加1A加(A+B)加1A加(A+B)加1A正逻辑M=H逻辑运算M=L算术运算Cn=1Cn=0表2.574LS181ALU功能表第十三页,共128页。第十四页,共128页。74L181逻辑电路图演示第十五页,共128页。
用四片74181电路可组成16位ALU,如图2.10片内进位是快速并行的,但片间进位是逐片串行传递的,因此总的形成时间还是是比较长的,可以采用并行进位电路74LS182让片间进位同时产生来加快执行速度。图2.10
第十六页,共128页。图2.11与74181型ALU连用的超前进位产生电路第十七页,共128页。第十八页,共128页。
用两个16位全先行进位部件(74182)和八个74181可级连组成的32位ALU电路
用四个16位全先行进位部件(74182)和十六个74181可级连组成的64位ALU电路
由于集成器件的集成度的提高,允许更多位的ALU集成在一个芯片内。例如AMD公司的AM29332为32位ALU,而在Intel公司的Pentium处理器中,32位ALU仅是芯片内的一部分电路。尽管器件不同,但基本电路原理还是相似的。第十九页,共128页。2.3.3译码器
译码:把某组编码翻译为唯一的输出。计算机应用中要用到的有地址译码器和指令译码器。
译码器:有2-4译码器、3-8译码器(8选1译码器)和4-16译码器(即16选1译码器)等多种。书中介绍的是2-4译码器的组成及应用
例如:3-8译码器,即8选1译码器的输入信号有三个:C、B、A(A为低位),三位二进制数可组成8个不同数字,因此可分别选中输出Y0
到Y7的某一个输出故称为8选1译码器。在资料手册中的型号为74138。第二十页,共128页。Y0Y1Y2Y3Y4Y5Y6Y7G1G2AG2BCBA下图分别为译码器引脚图和输入输出真值表其中:G1、G2A、G2B为芯片选择端,G1高电平有效,而G2A、G2B为低电平有效。输入 输出 CBAY7Y6Y5Y4Y3Y2Y1Y00000111100110011010101011111111011111101111101111110111111011111101111110111111174LS138第二十一页,共128页。2.3.4数据选择器
FD0D1D2D3A1A0地址A1A0输出F00D001D110D211D3
在地址选择信号的控制下,从多路数据中选择一路作为输出信号。又称多路开关或多路选择器。
以四选一选择器为例:第二十二页,共128页。
数据传输过程中,常常需要将一路数据分配到多路装置中指定的某一路中,执行这种功能的电路叫数据分配器。下面以四路数据分配器为例进行说明:DA1A0SW0W1W2W3A0A1DW00DW0=D01DW1=D10DW2=D11DW3=D2.4.5数据分配器第二十三页,共128页。
2.4时序电路2.4.1触发器2.4.2寄存器2.4.3四级二进制并行计数器第二十四页,共128页。DSQCLKCLRQ输入输出SCLRCLKDQ0011000010XX101XX0D触发器功能表:正跳变触发有效。2.4.1触发器(1)D触发器电路符号:D为数据输入端;CLK为时钟信号;S为置位信号端;CLR复位信号端;Q为输出信号端。第二十五页,共128页。电路符号:
JK为控制输入端;CLK为时钟信号;S为置位信号端;CLR复位信号端;Q为输出信号端。(2)J-K触发器输入输出SCLRCLKJKQ0000不变00101000100011翻转01XXX010XXX1JSQCLKKCLRQ第二十六页,共128页。1寄存器:用于暂存二进制信息。
计算机中常用部件,寄存器可由多个触发器组成。每个触发器存1Bit,N个触发器储存N位二进制数据。
Q3D3CLKX3
Q2D2CLKX2
Q1D1CLKX1
Q0D0CLKX0控制端
下图为由4个D触发器组成的四位缓冲寄存器。教材P53图2.32为74LS273为8位寄存器。有清零控制信号MR,有存储控制脉冲信号CP(上升沿写入)2.4.2寄存器第二十七页,共128页。2移位寄存器
移位寄存器不仅具有存储数据的功能,而且还具有移位功能(左移和右移)。
移位功能就是将移位寄存器中所存的数据,在移位脉冲信号的作用下,按要求逐次向左、右方进行移动。
电路连接上,一个触发器的的输出端Q接到另一个触发器的输入端D。从信号输入上分有串行输入和并行输入从信号输出上分有串行输出和并行输出下面以串行输入并行输出右移位寄存器为例进行说明:第二十八页,共128页。
X1X2X3X4移位脉冲CLKD1Q1F1CLKD2Q2F2CLKD3Q3F3CLKD4Q4F4CLK串行输入信号DINDINCLKX1X2X3X41011010110101110110串行输入并行输出右移位寄存器波形图第二十九页,共128页。2.4.3计数器功能:为统计脉冲个数,在触发器上记录下来。分类:1.异步计数器:高位触发器时钟信号由低位触发器输出提供,各个触发器串行翻转,所以也称串行计数器。2.同步计数器:各个触发器时钟接以统一的时钟信号,从而各触发器同事翻转。还有加法计数器、减法计数器、可逆计数器(加减)、二进制计数器、十进制计数器、任意进制计数器等。
计数器通常有“清零、置初始数据、计数”功能。
清零在清零CLR#信号控制下将各触发器清零;
置数在置数LOAD#信号控制下将计数初值D3..D0写入触发器。
计数过程由计数控制信号ENP、ENT控制启动计数和结束计数。第三十页,共128页。2.4.3四级二进制并行计数器
JQCLKKCLR
JQCLKKCLRQ0Q1Q2Q3清0端控制端计数端
JQCLKKCLR
JQCLKKCLRCLKQ0Q1Q2Q312345678910111213141516第三十一页,共128页。2.5可编程逻辑器件设计基础2.5.1可编程逻辑器件简介2.5.2硬件描述语言(VHDL)介绍2.5.3可编程逻辑器件设计语言ABEL第三十二页,共128页。2.5.1可编程逻辑器件简介
目前,数字集成电路得到了广泛的应用,其本身也在不断地进行更新换代。随着微电子技术的发展,设计与制造集成电路的任务已不可能全由半导体厂商来独立承担,出现了可编程逻辑器件(PLD),其中应用最广泛的是现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。可编程逻辑器件如同一张白纸或是一堆积木。它能完成任何数字器件的功能,上至高性能CPU,下至简单组合逻辑(如74系列元器件)
,都可以用它来实现。现在的可编程逻辑器件已经能够容纳几个32位的CPU同时工作,实现复杂嵌入式系统。可编程逻辑器件是电子设计领域中最具活力和发展前途的一项技术。第三十三页,共128页。1)FPGA和CPLDCPLD是复杂可编程逻辑器件(ComplexProgramableLogicDevice)的简称。FPGA是现场可编程门阵列(FieldProgramableGateArray)的简称。
两者的功能基本相同,只是实现的原理有所不同。FPGA与CPLD的主要区别在编程方式上,CPLD主要是基于EEPROM或FLASH存储器编程,编程次数可达1万次,其优点是系统断电时编程信息也不丢失。
FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,所以每次上电时须将编程数据从外部配置芯片重新写入SRAM中,其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量要比CPLD丰富得多,更适合完成复杂的时序逻辑。CPLD由于其宏单元的分解组合逻辑功能强大,适合于触发器有限而乘积项丰富的组合逻辑。第三十四页,共128页。为什么要使用CPLD/FPGA
搞过硬件电路设计的工程师可能明白:使用通用的标准逻辑集成器件(如74系列元器件)组合设计一块具有特定逻辑功能的电路板是很麻烦的。需要进行逻辑电路设计,然后再进行印刷电路板设计、最后还有焊接工序。这期间的调试工作很多都牵涉到各器件之间的阻抗匹配、信号完整性等。这就是说,各逻辑器件并不像在逻辑设计阶段那么理想了,还需要考虑其实际情况。一个小错误都可能使得PCB报废,须重新制板。系统的调试只有在硬件PCB板制造、焊接完成后才能进行。若发现错误,调试也只能等下一次PCB修改后才能继续。这样一来,整个开发周期就变得很长了,电路板的体积功耗都变大,可靠性降低。而且逻辑设计人员不能专注于逻辑功能的设计,效率大打折扣。可编程逻辑器件为数字系统的开发带来革命性的突破,简化了系统的设计。只要逻辑门数足够,一片可编程逻辑器件就可以容纳传统设计所需要的通用标准逻辑器件。“器件”(并非真正的器件,而是内部逻辑关系)之间的连接和可靠性完全由芯片制造商来保证。第三十五页,共128页。
另外,通过逻辑设计或者修改模块参数,还可以“自制”原来所没有的器件,这一点很重要。通过购买第三方的IPIntellectualProperty,知识产权)核,使系统设计大为简化,具有很高的集成度。由于可编程逻辑器件的大部分引脚均为普通I/O引脚,可以设置为输入、输出、双向或高阻。所以在器件型号选定后,根据系统的要求,可编程器件的输入输出关系及其所使用的引脚就可以确定下来了。另外由于可编程逻辑器件的内部逻辑设计与硬件PCB绘制同时进行,大大缩短了系统设计周期。在PCB完成以后,还可以利用可编程逻辑器件的在线修改能力,随时修改设计,而不必改动硬件电路。可以说,这就是“可编程”的魅力!总之,使用可编程逻辑器件来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。
可编程逻辑器件的这些优点使得PLD技术在20世纪90年以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言(HDL)的进步。第三十六页,共128页。2.4.2硬件描述语言(VHDL)
随着EDA技术的发展,使用硬件描述语言(HardwareDescriptionLanguage)设计CPLD/FPGA称为一种趋势为什么要使用硬件描述语言呢?它跟原理图输入又有什么区别?传统的原理图输入其实就相当于物理器件的焊接,其输入的可靠性好、效率高、比较直观,但设计大规模PLD/FPGA时显得很烦琐、移植性差。硬件描述语言和传统原理图输入方法的关系就好比是高级语言和汇编语言的关系。HDL的可移植性好,使用方便,但效率不如原理图高。在真正的CPLD/FPGA设计中,通常建议采用原理图和HDL结合的方法来设计。在最短的时间内,用自己最熟悉的工具设计出高效、稳定、符合设计要求的电路才是我们的最终目的。
第三十七页,共128页。VHDL特点
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(或称可视部分,即端口)和内部(或称不可视部分,即涉及实体的内部功能实现部分)。在完成了对一个涉及实体开发后,其他的设计就可以直接调用这个模块。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
目前主要的硬件描述语言是VHDL和VerilogHDL。VHDL发展较早,语法严格,而VerilogHDL是在C语言基础上发展起来的一种硬件描述语言,语法比较自由。两者相比,VHDL书写规则比erilog烦琐一些,但Verilog自由的语法也容易让初学者出错。其实两种语言的差别并不大,它们的描述能力也是相似的。掌握其中一种语言以后,通过短期的学习,可以较快的学会另一种语言。这里简要介绍一下VHDL语言。第三十八页,共128页。VHDL是美国国防部颁布的超高速集成电路(VHSIC)计划所确定的硬件描述语言,并于1987年被IEEE批准为标准设计语言,命名为IEEE-1076-1987。美国国防部鼓励设计语言格式标准化,它要求所有与政府项目有关的ASIC设计必须符合IEEE-1076标准。设计者用VHDL可对整个ASIC进行从系统级(对电路结构的高层次抽象)到门级硬件的描述。对被模拟系统的模型可混合使用高层次行为描述和低层次(逻辑和门)的详细描述。
使用任何文本编辑器都可进行VHDL语言的编写,也可以用专门的HDL编辑环境。通常将VHDL文件保存为.vhd文件。VHDL的语言形式、描述风格及句法有点类似于一般的计算机高级语言,但是要注意的是,硬件描述语言与平常的计算机描述语言并不相同,它描述的是硬件电路。VHDL主要用于描述数字系统的结构、行为、功能和接口,与原理图有对应的关系第三十九页,共128页。VHDL是一种标准语言,VHDL模型可以在与此标准相一致的任一计算机系统上运行,并产生相同的模拟结果。
VHDL模型以使用离散值的“激励一响应”形式为基础。对一个器件,常常会问两个最基本的问题:它由什么组成?它如何工作?这两个问题提出了硬件描述的基本方面:结构与行为。VHDL描述的对象是数字设备,是离散系统。即将离散的输入值(激励)进行一系列计算和转换,最后产生离散的输出值(响应)。从某输入点数值的变化(从“0”到“1”或从“1”到“0”)到输出端得到响应,总存在一定的时间延迟。
第四十页,共128页。
定义电路的端口(输入端、输出端),端口是电路与外界的连接点。电路的行为描述和结构描述。编写对电路进行激励模拟的命令文件,进行逻辑模拟。(1)电路的VHDL描述在VHDL中,被模拟的电路由实体定义,实体由说明部分与结构部分组成。今将半加器的VHDL描述作一介绍(其中“--”为注释符,一行中“--”后面的任何字符都为注释,在程序中不起作用)。描述工具是Viewlogic公司提供的Workview软件。
--下面是半加器的实体说明
ENTITYhalf_adderisport(X:invlbit;Y:invlbit;Sum:outvlbit;Carry:outvlbit);endhalf_adder;--端口定义结束,in表示输入数据,out表示输出数据。在对电路进行逻辑模拟时,一般要经历以下步骤:第四十一页,共128页。--VHDL有三种基本数据类型:整数、浮点数和枚举类型,vlbit为枚举类型二值(0,1)。
--X、Y是半加器的输入,Sum为和(输出),Carry为进位(输出)。
--下面为结构体描述
ARCHITECTUREbehavioral_descriptionofhalf-adderisbeginprocessbeginSum<=XxorYafter5ns;Carry<=XandYafter5ns;WaitonX,Y;endprocess;
--进程描述结束
endbehavioral_description;
--结构体描述结束第四十二页,共128页。
现将结构体描述简单说明如下:在VHDL中,常用进程Process进行行为描述。在该进程中,表示Sum和Carry的值要比信号X,Y延迟5ns时间才能形成。Wait语句将进程挂起,直到信号X或Y中的任一个发生了变化,进程就从进程语句的顶端开始重新执行一遭,也可将进程改写如下,此时不再需要Walt语句,而作用与有Wall语句的进程相同。
process(X,Y)beginSum<=XxorYafter5ns;Carry<=XandYafter5ns;endprocess;第四十三页,共128页。
例1、举一个移位器的例子。该移位器可对32位数据A<31:0>进行任意位(31位~0位)移位,移位次数由<4:0>给出,移位器的功能由5级门完成,在B(i)控制下数据经过每级门有两种操作可供选择:直接送出(B(i)=0不移位)或移固定位数(B(i)=1),其中第1级可移1位;第2级可移2位;第3级可移4位;第4级可移8位;第5级可移16位。另外该移位器可进行逻辑左移、逻辑右移、算术左移和算术右移四种操作。逻辑左移和算术左移,空出来的低位补0;所以这两种操作没有区别,统称为左移;逻辑右移空出的高位补0;算术右移,空出的高位全部补入原符号位。SR为移位结果。在本例中,首先对移位器进行行为描述,定义了三个函数(function):左移shiftl,逻辑右移shiftr-logic,算术右移shiftrmaths,并一起归入Extend.Vhd程序包中。第四十四页,共128页。
左移的VHDL描述:
functionshiftl(A:vlbit_ld(31downto0);i:integer)returnvlbit_ldisvariableSR:vlbit_ld(31dowmo0);
beginSR(31+idowntoi):=A;forjini-ldownto0loopSR(j):='0';endloopreturnSR(31downto0);
cndI;
程序中的vlbit_ld表示一维数组。在VHDL中有两种赋值符号“<=”和“:=”。前者表示赋值需经过一段延迟时间才能完成;后者则可立即赋值。当给变量置初始化值或给常量赋值时使用“:=”符号。第四十五页,共128页。逻辑右移的VHDL描述;
functionshiftr_logic(A:vlbit_ld(31downto0);i:integer)returnvlbit_ldisvariableSR:vlbit_ld(31downto0);beginforjin31downto32-iloopSR(j):='0';endloopSR(31-idownto-i):=AreturnSR(31downto0);end;
算术右移的VHDL描述请读者自行写出。第四十六页,共128页。
下面给出移位器的实体说明与结构体描述。文件名:shifter.vhdusework.extend.all;--use语句允许本实体引用。extend.vhd程序包,内有3个移位函数
ENTITYshifterisgeneric(SR_DELAY:time:=10ns);--属性定义,从输入A、B到输出SR的延迟
port(A:invlbit_ld(31downto00);B:invlbit_ld(4downto0);SR:outvlbit_ld(31downto00);Clr,Cal:invlbit);--端口定义,A为32位一维向量,B为5位一维向量。
--Clr为左右移控制信号,Clr="0"为左移,Clr="1",为右移
--Cal为算术移位和逻辑移位的控制信号,Cal=“0”为算术移位,Cal="1"为逻辑移位.
endshifter;第四十七页,共128页。
实体说明结束,以下为结构体描述
ARCHITECTUREbehaviorOFshifterISbeginprocess(A,B,Clr,Cal)variabletmp1,tmp2,tmp3,tmp4,tmp5:vlbit_ld(31downto00)beginifB(0)='0'thentmp1:=A;elsifClr='0'thentmp1=(shiftl(A,1));elsifCal='0'thentmp1:=(shiftr_maths(A,1));elsetmp1:=(shiftr_logic(A,1));第四十八页,共128页。
endif;
--shiftl,shiftr_logic及shiftr_maths在extend.vhd中定义
ifB(1)='0'then..endif--得出tmp2ifB(2):='0'then..endififB(3)='0'then..endif--得出tmp3,tmp4第四十九页,共128页。ifB(4)='0'thentmp5:=(tmp4)elsifClr='0'thentmp5:=(shiftl(tmp4,16));
elsifCar=0thentmp5:=(shiflr_maths(tmp4,16));elsetmp5:=(shiftr_logic(tmp4,16));endifSR<=tmp5afterSR_DELAY;--输出结果SRendprocess;--进程描述结束
endbehavior;第五十页,共128页。
例2、这里举一个简单的VHDL例子,让大家有一个入门的认识。例子的功能是实现一个12位的寄存器。ENTITYREG12IS--外部端口定义:数据,时钟,输出
PORT(d:INBIT_VECTOR(11DOWNTO0);clk:INBIT;q:OUTBIT_VECTOR(11DOWNTO0);EDNREG12;--内部实体逻辑
ARCHITECTUREaOFREG12ISBEGINPROCESSBEGINWAITUNTILLclk=’1’;--等待时钟上升沿
q<=d;ENDPROCESS;ENDa;第五十一页,共128页。
这里例子十分简单,就是在时钟的上升沿把输入的数据锁存起来。当然,用原理图的方法也可以实现,用12位的D触发器就可以了。例子虽然简单,但已经具有以上所说的VHDL语言特点了,请仔细推敲。
第五十二页,共128页。
(2)逻辑模拟及验证如何证明用VHDL描述的ASIC在逻辑上和时序上的正确性?这便是逻辑模拟的目的。在workview环境下,逻辑模拟可根据屏幕提示和菜单进行操作。下面以shifter的模拟过程为例进行说明。第一步,把VHDL的逻辑描述(shifter.VHD)转换为网表文件,这是因为模拟器只能对网表进行模拟,用命令
C2>VHDLshifter-v可生成shifter.VLI及shifter.VSM网表文件(其中VHDL为编译命令,-v为命令的参数,表示需要生成网表文件)。第二步,进入模拟器,并把模拟对象的网表文件加载到模拟器中。在workview集成环境中,模拟器为viewsim。进入viewsim中后,模拟器会问用户加载网表的名称,输入shifter即可(关于workview的具体使用,可参看其使用说明书)。第五十三页,共128页。
第三步,对输入端口施加激励并进行模拟。所谓激励,对应于实际电路的输入端输入信号,一般通过逻辑值1和0的组合来表达。在shifter中,输入端口有A<31:0>,B<A:0>,Clr及Cal为这些输入端口设计激励时,要注意尽可能全面地测试移位器的功能。第四步,显示模拟结果,设计简单的列表方式及图形显示方式等。第五十四页,共128页。2.6.3可编程逻辑器件设计语言ABEL
(用于计算机组成原理实验)前言1ABEL-HDL语言的基本语法2ABEL-HDL语言源文件的基本结构3逻辑描述第五十五页,共128页。
开发使用PLD的系统时,应使用语言或逻辑图来描述该PLD的功能,并通过编译、连接、适配,产生可对芯片进行编程的目标文件(如标准的JED文件),然后再下载并写入芯片中。常用的可编程逻辑器件设计语言为ABEL-HDL(ABEL硬件描述语言),它是DATAI/O公司开发的一种可编程逻辑器件设计语言,它可支持绝大多数可编程逻辑器件。
前言第五十六页,共128页。1、ABEL源文件构成在用ABEL-HDL进行逻辑设计时,描述逻辑功能的源文件必须是符合ABEL-HDL语言语法规定的ASII码文件。
ABEL-HDL源文件是由各种语句组成的,这些语句是由ABEL-HDL语言的基本符号构成的,这些符号必须满足一定的格式才能正确描述逻辑功能。语句的每一行最长为150个字符。在源文件的语句中标识符、关键字、数字之间至少必须有一个空格,以便将它们分隔开来。但在标识符列表中标识符以逗号分隔。在表达式中,标识符和数字用操作符或括号分隔。空格、点号不能夹在标识符、关键字、数字之间。如空格夹在标识符、数字之间将会被看作两个标识符或两个数字。以大写、小写或大小写混合写的关键字被看作同一个关键字(关键字不区分大小写),而以大写、小写或大小写混合写写的标识符将被看作不同的标识符(标识符区分大小写)。1ABEL-HDL语言的基本语法第五十七页,共128页。第五十八页,共128页。第五十九页,共128页。第六十页,共128页。第六十一页,共128页。
在ABEL-HDL语言中,其合法的ASCII字符除了数字0-9,大小写的英文字母外,还包括空格符及下述符号:!@#$?+&*()[];:‘“–,.<>/^%2、ASCII字符第六十二页,共128页。
标识符是用合法的ASCII字符按次序排列定义的名字,其作用是标识器件、管脚、节点、集合、输入输出信号、常量、宏以及变量。所有的标识符必须符合下述规定:
标识符的长度不超过31个字符;2.标识符必须以字母或下划线开始;3.标识符其他的宇母可采用大、小写字母、数字及下划线;4.标识符中不能包括空格符;5.除保留标识符(即关键宇)外,标识符中同一个字母的大、小写表示不同的含义;6.除了合法的点扩展外,标识符中同一个字母的大、小写表示不同的含义。在ABEL-HDL中保留的标识符称为关键字,关键字不能用于命名器件、管脚、节点、集合、宏或信号,而代表了这个字所特指的功能。3、标识符第六十三页,共128页。第六十四页,共128页。
在ABEL-HDL语言的逻辑描述中,常量用于赋值语句、真值表和测试向量的表达,有时也用于给某些标识符赋值,以使该标识符在整个模块的逻辑描述中代表该常量的值。常量可以是数值常量,也可以是非数值的特殊常量。4、常量第六十五页,共128页。第六十六页,共128页。
块是包含在一对大括号中的文本,它用于宏和指令。括号中的文本内容可以是一行,也可以是多行。块可以嵌套,即块中包含块。如在块的文本的字符中包含了大括号,则应在其之前加上反斜杠。例如:
{Thisisablock}
再如:
{Thisisalsoablock,anditspansmorethanoneline}
再如:
{A=B#CD=[0,1]&[1,0]}5、块第六十七页,共128页。
注释是对源文件的解释,注释以双引号开始,以另一个双引号或行结束符号结束,注释不能用于关键字之间。例如:“declarationsection”moduleBasic_logic;”givesthemoduleaname(回车)6、注释第六十八页,共128页。ABEL-HDL中的所有的数值运算精度都是32位,合法的数值范围是0~232-1。数字可采用二进制、八进制、十进制或十六进制,它们分别以符号^b、^o、^d或^h表示,如不用符号则认为是十进制数。在ABEL-HDL中数字还可用字符表示,在字符之前加上单引号后,即以字母ASCII码作为数值,例如‘a’=^h61,‘ab’=^h61627、数字
字符串用于标题、模块及选项的表达,也用于管脚、节点和属性的定义,它包含在一对单引号中。如字符串中有单引号或反斜杠则必须在它们之前再加一反斜杠。字符串可写几行,但不能超过324个字符。如:TITLE‘1to8linedemultiplexer’;DMI’P16L8’;8、字符串第六十九页,共128页。ABEL-HDL支持四类基本运算:逻辑运算、算术运算、关系运算及赋值运算。
1)逻辑运算
(1)非:!例!A(2)与:&例A&B(3)或:#例A#B(4)异或:$例A$B(5)同或:!$例A!$B·2)算术运算
(1)取负-例-A(2)加+例A+B(3)减-例A-B(4)乘(无符号整数)*例A*B(5)除(无符号整数)/例A/B(6)取模(无符号整数)%例A%B(7)左移<<例A<<B(8)右移>>例A>>B9、运算符第七十页,共128页。
关系运算为无符号运算,其结果为位(布尔值)。
(1)等于:==例A==B(2)不等号:!=例A!=B(3)小于:<例A<B(4)小于等于:<=例A<=B(5)大于:>例A>B(6)大于等于:>=例A>=B
例如:2==3值为false3<5值为true-1>2值为false
4)赋值运算组合输出为(非时钟赋值)=
寄存器输出为(时钟赋值):=3)关系运算第七十一页,共128页。第七十二页,共128页。
表达式由标示符和运算符组成。在表达式中可出现任何逻辑、算术或关系运算,表达式中的运算次序按运算优先级决定,也可加括号改变执行次序。赋值运算仅用于等式,它将表达式的运算结果通过等式赋给输出信号(包括组合赋值和时序(寄存器)赋值)。一个信号可以被多次赋值,而其最终结果是所有这些赋值的或,而不是最后一次的赋值。10、表达式和等式第七十三页,共128页。[WHEN条件THEN][!]……[ENABLE]元素=表达式;[ELSE方程]或者[WHEN条件THEN][!]……[ENABLE]元素:=表达式;[ELSE方程]式中:条件:任意合法表达式;元素:给一个或一组信号命名的标识符,或要被表达式赋值的集合表达式:由标识符和运算符组成的式子,求值后得出一个结果。例如:WHENBTHENA=B;ELSEA=CX=A&B;Y:=A&B;ENABLEY=C#D;若C#D为真,Y被使能(并不是Y输出为Y=C#D)11、布尔方程语法第七十四页,共128页。1.三态允许端:.OE,它为1有效,仅适用于引脚。2.寄存器复位端:.RS,它为1有效3.寄存器置位端:.PR,它为1有效4.寄存器时钟:.CLK,它为上跳触发5.JK触发器输入端:.J和.K6.T触发器输入端:.T7.RS触发器输入端:.R和.S8.D触发器输入端:.D也可使用:=12、引脚和寄存器的特别说明第七十五页,共128页。
集合是作为一个独立单元进行操作的一组信号或常量。它采用一个标识符,用方括号内的一组信号或常量表示,其中的每一个信号或常量称为集合的元素。
定义集合的方法有枚举法、界限符法或它们的组合。例如:ADD=[A5,A4,A3,A2,A1,A0]为枚举法
ADD=[A5..A0]为界限符法
ADD=[A5,A4,A3..A0]为两种方法的组合集合可以进行逻辑、加、减、关系运算。
逻辑运算是对集合中每一个元素作相应的运算,因此如果需对两个或两个以上集合进行运算时,这些参与运算的集合的元素数目必须相同。但单个变量与集合进行逻辑运算为该变量与集合的每个元素进行逻辑运算。加、减、关系运算为对整个集合执行该运算。13、集合第七十六页,共128页。
例:(ADD>=^h10)&(ADD<=^h2F)
等价于A5^A4VA5^A4
如:当ADDR为6位寄存器,
ADDR:=ADDR+l,为把寄存器A5~A0的值加1。
ABEL-HDL语言处理集合时,将它们作为二进制数来对待,二进制数中的每一位代表了集合中的每一个元素的取值。例如:[A0,A1,A2]=3
等效于A0=0,A1=1,A2=1。例1:用集合运算实现布尔方程
ChipSel=A15&A14&A13;
首先,定义一个包含A15,A14,A13的常量集合
Addr=[A15,A14,A13];
于是方程ChipSel=Addr=[1,0,1];第七十七页,共128页。
其逻辑功能等效于ChipSel=A15&A14&A13。因为如果Addr=[1,0,1],即A15=1,A14=0,A13=1,那么ChipSel为真。上述集合方程也可以写成:
ChipSel=Addr=5;本例定义了一个包含16位地址线中高3位的一个集合,并用于集合运算中,也可用其他方法对全部地址进行效果相同的操作。例2:如果在定义段中定义了常量:
Addr=[A15..A0];X=.X.;
那么,下例两种方法等效于地址线集合中只使用地址高三位的方法:方法1:ChipSel=Addr=[1,0,1,X,X,X,X,X,X,X,X,X,X,X,X,X]方法2:ChipSel=(Addr>=^hA000)&(Addr<=^hBFFF);第七十八页,共128页。
哑变量:在宏定义、模块或指示字中可被真实变量替代的标识符;真实变量:用于宏定义、模块或指示字中的变量。在需要用真实变量取代哑变量的地方,哑变量前要加一个问号“?”,以与其他标识符区分开来。如下面的宏定义
OR_EMMACRO(a,b,c){?a#?b#?c};中,a,b,c就是哑变量。下列方程式对OR_EM宏的宏引用D=OR_EM(X,Y,Z);其中X,Y,Z是真实变量。14、变量及变量代换第七十九页,共128页。ABEL-HDL语言源文件由一个或多个相互独立的模块构成,每一个模块包含了一个完整的逻辑描述。源文件中的所有模块都可以被ABEL-HDL软件同时处理。2ABEL-HDL语言源文件的基本结构
1、引言第八十页,共128页。第八十一页,共128页。
模块结构必须遵从以下原则:
1.模块开头为module语句,结束必须用相应的end语句;
2.若使用flags语句,必须为module语句的第一条语句;
3.若使用title语句,必须为flags语句后的第一条语句;
4.一个模块至少有一个定义段,模块中可按需要以任意次序使用多个定义段。例1:设计一个模块,要求以GAL6V8构成一个两输入端的“与”门和一个两输入端的“异或门”,设输入信号为A,B,输出信号为X,Y,则X=A·B,Y=A⊕B。如在源文件中仅有一个这样的模块,其源文件如下所示:第八十二页,共128页。ModuleGATEOptions’_tracewave’Title’exampleofgate’DeclarationsgateDEVICE’GAL16V8’;A,BPIN1,2;X,YPIN18,17;EquationsX=A&B;Y=A$B;Test_vections([A,B]->[X,Y])[0,0]->[0,0][0,1]->[0,1][1,0]->[0,1][1,1]->[1,0];EndGATE第八十三页,共128页。
在这个模块中有说明段、定义段、逻辑描述段、测试向量段及结束语句段五部分组成。在这五部分中,说明段为模块的开始;定义段的定义部分指定或定义用于设计的器件、信号、常量宏和库;逻辑描述段对所设计的逻辑进行功能描述;测试向量段写出了测试向量,用以验证所设计的逻辑;结束语句段表示一个模块的结束。此外在模块中还允许有选择地加上一些指令。每一个模块只能有一个说明段,它与结束语句段配对使用,而定义段、逻辑描述段、测试向量段则可以任意次序重复,定义语句必须紧跟标头或定义段的关键字。
第八十四页,共128页。
在例1中说明段如下:ModuleGATEOptions’_tracewave’Title’exampleofgate’
说明段包括模块语句、选项和标题三个元素组成。1)模块语句模块语句是必不可少的,其作用是命名模块并标志模块的开始,它与结束语句配对使用,同时也可指出是否利用哑元。2、说明段第八十五页,共128页。
模块语句的关键字是Module,其格式为:Modulemodulename[(dummy_arg[,dummy_arg]…)]
其中modulename为命名模块的合法标识符,在本例中为GATE。
dummy_arg是哑变量名称,如不利用哑变量则可以略去。若模块选用哑变量,则在使用语言处理程序处理模块时,可将真实变量传给模块。哑变量可为模块引用。模块中,凡带有“?”的哑变量,语法分析程序都用真实变量将其替代。例:modulemy_example(A,B)……C=?B+?A;……endmy_example第八十六页,共128页。2)选项
选项为可选语句。其作用是语言处理器控制源文件的处理。选项的关键字是Options,其格式为
Options’sting’string为选项字符串。3)标题标题为可选语句,其作用是给出模块一个标题,此标题将作为语言处理程序所生的编程器下载文件及设计编制文件的题头。标题的关键字是Title,其格式为:Title’string’string为标题字符串。第八十七页,共128页。
在例1中定义段如下:DeclarationsgateDEVICE’GAL16V8’;A,BPIN1,2;X,YPIN18,17;
定义段包括定义段关键字、器件定义、信号定义、常量定义、宏定义、库定义等元素。定义段的关键字是Declarations,后面可跟任何合法的定义语句。定义段的关键字允许定义段可在源文件的任何一部分进行定义。如定义语句紧跟说明段,则可略去定义段关键字。3、定义段第八十八页,共128页。
器件定义是可选项,它的作用是将模块中所使用的器件名与实际所采用的可编程逻辑器件联系起来。器件定义的关键字是DEVICE,其格式为Device_idDEVICEreal_device;
此表达式中,device_id为模块中所使用的器件名,在本例中为gate。real_device为实际际所使用的某一个特定可编程逻辑器件的型号,在本例中为GAL16V8。值得注意的是device_id必须是合法的文件名,因为编程器装载文件的文件名由device_id加上扩展名“.jed”产生的2)信号定义
信号定义包括了管脚定义、节点定义及属性定义。其作用是定义信号,并可选择和管脚及节点相联系。节点/管脚定义用于定义信号名,并将信号同具体的器件节点/管脚序数联系起来。1)器件定义第八十九页,共128页。
属性用于定义信号的特性,它既可用于器件的节点/管脚说明中,作为节点/管脚定义的一部分,也可设在器件的节点/管脚定义之后,作为一个独立的定义部分。它们的关键字分别为PIN,NODE,ISTYPE。
(1)管脚定义管脚定义的格式为:[!]pin_id[,[!]pin_id…]PIN[pin#[,pin#][ISTYPE’attributes’];
其中[!]pin_id是逻辑设计中用于指示模块中管脚的标识符,pin#为实际器件中的管脚(可为?,由系统分配),attributes为在节点可编程的器件中用于指明属性的字符串,有以下几种:第九十页,共128页。第九十一页,共128页。例:!Clock,Rest,SIpininU12,12,15,3;
这行代码将器件U12的管脚12,15,3分别用标示符Clock,Rest,SI来表示。若模块中不止定义一个器件,必须用语句中的in项来指明器件。例:管脚的属性可由语句中的属性项或ISTYPE语句定义,比如
FOpin13=‘neg,reg’; FOpin13ISTYPE‘neg,reg’;
(2)节点定义节点定义的格式为:[!]node_id[,[!]node_id…]NODE[node#[,node#][IETYPE’attributes’];
其中[!]node_id是逻辑设计中用于表示节点的标识符,node#为实际器件中的节点号,Attributes为在节点可编程的器件中用于指明属性的字符串(同管脚定义)。关键字NODE并没有把信号限制在器件上的内部节点上,当一个信号用NODE定义后,也可能被器件装配器分配给器件的I/O引脚上。第九十二页,共128页。(3)属性定义属性定义的格式为:signal[signal…][PINNODE[##S]]ISTYPE’attributes’[,attributes’];signal是管脚或节点的标识符,attributes为指明属性的字符串。例:FO,Aistype‘neg,latch’;将FO和A定义为负极性锁存信号。3)常量定义常量定义用于定义模块中的常量,常量的关键字是=,其格式为:id[,id…]=expr[,expr…]。
id为模块中所使用的常量的标识符。expr为定义常量值的表达式。例:A,B,C=5,[1,0],6;G=[1,2]+[3,4]第九十三页,共128页。
宏定义用于定义模块中的宏。这个宏包含了源文件中的某一部分,这样,用户在建立文件时,不必每次书写相同的内容,而可以调用宏。宏定义的关键字是MACRO,其格式为:Macro_idMACRO(dummy_arg[,dummy_arg]…)block;Macro_id为表示宏的宏的标识符。dummy_arg为哑变量。block为块。例:若定义了NAND3MACRO(A,B,C){!(?A&?B&?C};
则引用D=NAND3(Clock,Hello,Busy);
相当于D=!(Clock&Hello&Busy);
5)库定义库定义的关键字是Library,其格式为:Library’name’name为定义库文件名的字符串,不含扩展名。库定义使用户指定的文件内容从name.inc库文件中抽取出来,并被插到源文件中。
4)宏定义第九十四页,共128页。
在例1中逻辑描述段如下:EquationsX=A&B;Y=A$B;ABEL-HDL语言描述逻辑的方式有方程、真值表、状态图、熔丝和异或因子,其中每一种描述方法均以关键字或符号开始,以引导某种描述的开始。1)方程的形式它以扩展的布尔方程来描述逻辑功能;方程语句表示与某个器件相关的一组方程的开始;方程语句的关键字是Epuations,其赋值符为=或:=,其中=为组合逻辑的赋值操作符,:=为时序逻辑的赋值操作符。4、逻辑描述段第九十五页,共128页。
在方程中允许使用WHEN-THEN-ELSE语句。方程的表达形式如下:Equations[WHENconditionTHEN][!]element=expression;[ELSEequations];
或者
[WHENconditionTHEN]equations;[ELSE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年孩子上学的劳动合同模板打印
- 2025年基站场地租赁协议
- 2024-2025学年五年级下学期数学 倍数与因数《《倍数与因数》练习课 》教案
- Unit 6 Section A 3a-3c(教学设计)-2024-2025学年人教新目标Go For It!英语八年级上册
- 2025年黑龙江冰雪体育职业学院单招职业适应性测试题库及参考答案
- 2025年湖南高尔夫旅游职业学院单招职业适应性测试题库学生专用
- 2025年甘肃农业职业技术学院单招职业技能测试题库参考答案
- 2025年湖南铁路科技职业技术学院单招职业倾向性测试题库完整
- 2025年河南艺术职业学院单招职业倾向性测试题库完美版
- 2025年广东省韶关市单招职业适应性测试题库参考答案
- 施工作业申请表
- 浸出液的净化与沉积
- 银行间本币市场交易员资格考试真题模拟汇编(共586题)
- 苯乙酸安全技术说明书(msds)
- 幼儿园大班《防欺凌》教案5篇,幼儿园大班防欺凌活动教案
- 卫生管理初中级职称大纲
- 《当代网络文学作品发展研究6300字(论文)》
- 孟氏骨折与盖氏骨折讲解学习
- GB/T 9386-2008计算机软件测试文档编制规范
- GB/T 25137-2010钛及钛合金锻件
- 第2课《说和做》课件(共30张ppt) 部编版语文七年级下册
评论
0/150
提交评论