1、第二章 计算机的逻辑部件,其中2.1、2.2、2.3 略 2.4 计算机中常用的逻辑部件 2.5 时序电路 2.6 可编程逻辑器件设计基础,2.4 计算机中常用的逻辑部件,2.4.1 加法器,2.4.2 算术逻辑单元(简称ALU),2.4.3 译码器,2.4.4 数据选择器,2.4.5 数据分配器,2.4.6 三态门,Cn=XnYnCn-1+XnYnCn-1+XnYnCn-1+XnYnCn-1,Fn=XnYnCn-1+XnYnCn-1+XnYnCn-1+XnYnCn-1,2.4.1 加法器不考虑进位输入时,两数码Xn、Yn相加称为半 加器;若考虑低位进位输入Cn-1相加,则称为全加 器。全加和
2、Fn与进位输出Cn的表示式为:,其推导过程和逻辑电路图详见教材19页图2.6所示。,有关半加器和全加器的功能表及逻辑图如教材中图2.5和图2.6,Xn Yn Cn-1 Fn Cn0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1,一位全加器真值表如下:其中Xn 为被加数,Yn为加数, Cn-1为低级进位信号,Fn为和,Cn为本级向上进位信号。,简单串行级联的4位全加器如下图所示: (教材图2-7 四位串行加法器),将4个全加器相连可得4位加法器(图2.7),但其加法所需时间较长。这是因为其位间进位是串
3、行传送的。本位全加和Fi必须等低位进位Ci-1来到后才能进行,加法时间与位数有关。只有改变进位逐位传送的路径,才能提高加法器工作速度。解决办法之一是采用“超前进位产生电路”来同时形成各位进位,从而实行快速加法。我们称这种加法器为超前进位加法器。根据各位进位的形成条件,可分别写出Ci的逻辑表达式: C1=X1Y1+(X1+Y1)C0=G1+P1C0 其中:Gi=XiYi 称为进位产生函数(绝对进位)Pi=Xi+Yi 称为进位传递函数(条件进位)Gi的意义是:当 XiYi 均为“1”时定会产生向高位的进位Pi的意义是:当Xi和Yi中有一个为“1”时,若同时低位有进位输入,则本位也将向高位传送进位。
4、写成通用式为:,C1=P1+G1C0 C2=P2+G2P1+G2G1C0 C3=P3+G3G2+ G3G2P1+G3G2G1C0 C4=P4+G4P3+G4G3P2+G4G3G2P1+G4G3G2G1C0 根据上式可画得“超前进位产生电路”及四位超前进位加法器的逻辑图如图2.8。,C1=G1+P1C0 (低位) ( 2.22) C2=G2+P2C1= G2+P2(G1+P1C0)= G2+P2G1+P2P1C0(2.23) C3=G3+P3 G2+ P3 P2G1+ P3 P2P1C0 (2.24) C4=G4+P4G3+ P4P3G2+ P4P3P2G1+ P4P3P2P1C0 (2.25)
5、当全加器的输入均取反码时,它的输出也均取反码。 (即应用反演律采用与非、或非、与或非实现连接)将上式 改写成如下:,图2.8 “超前进位产生电路”及四位超前进位加法器的逻辑图,2.4.2 算术逻辑单元(简称ALU)ALU是一种功能较强的组合逻辑电路。它能进行多种算术运算和逻辑运算。ALU的基本逻辑结构是超前进位加法器,它通过改变加法器的进位产生函数G和进位传递函数P来获得多种运算能力。下面通过介绍SN74181型四位ALU中规模集成电路了介绍ALU的原理。在图2.9中功能表中,“加”表示算术加,“+”表示逻辑加。它能执行16种算术运算和16种逻辑运算,M是状态控制端,M=H,执行逻辑运算;M=
6、L执行算术运算。S0 S3是运算选择端,它决定电路执行哪种算术运算或逻辑运算。,74L181逻辑电路图演示,图2.9 ALU功能表,用四片74181电路可组成16位ALU。如图2.10片内进位是快速的,但片间进位是逐片传递的,因此总的形成时间还是是比较长的。,如果把16位ALU中的每四位作为一组,用类 似位间快速进位的方法来实现16位ALU(四片ALU组 成),那么就能得到16位快速ALU。推导过程如下:,图 2.10,Cn+X = GN0 + PN0 Cn= GN0 + PN0Cn= GN0PN0+GN0Cn(2-33),与前面讲过的一位的进位产生函数Gi的定义相似,根 据四位一组的进位产生
7、函数GN为“1”的条件,可以得到 GN的表达式为: GN =G3+P3G2 +P3P2G1 +P3P2P1G0 与前面讲过的一位的进位传递函数Pi的定义相似,根 据四位一组的进位传递函数PN为“1”的条件,可以得到PN 的表达式为: PN =P3P2P1P0把图2.10各片的进位分别命名为Cn+X 、 Cn+Y 、 Cn+Z (即C3 C7 C11)。根据式2.222.25的推导可将式中的G1,G2, G3和P1 P2, P3分别换为 GN0, GN1, GN2和PN0, PN1, PN2,把C0 换以Cn,即可得Cn+X 、 Cn+Y 、 Cn+Z 的表示式如下:,Cn+y=GN1+PN1G
8、N0+PN1PN0Cn =GN1+PN1GN0+PN1PN0Cn=GN1PN1+ GN1GN0PN0 +GN1GN0Cn (2-34) Cn+Z=GN2+PN2 GN1+ PN2 PN1GN0+ PN2 PN1PN0Cn=GN2+PN2 GN1+ PN2 PN1GN0+ PN2 PN1PN0Cn (2-35)=GN2PN2 + GN1GN0PN1+GN2GN1GN0Pn0 +GN2GN1GN0Cn由2-33,2-34,2-35式可知,只要74181型ALU能提供输出GN, PN 那么就可用3个与或非门和4片ALU相连,这样就能实现16位快速 ALU。实现2-33,2-34,2-35式的逻辑电路
9、就成为超前进位扩展器(74182 芯片),图2-11使它的逻辑电路图,图中将Pni、GNi分别用Pi、Gi表 示。图中P、G输出可用于把4组16位快速ALU扩展成64位快速ALU 图2-12画出了用74181和74182芯片构成的16位快速ALU。,图2.11 与74181型ALU连用的超前进位产生电路,用两个16位全先行进位部件(74182)和八个74181可级连组成的32位ALU电路,用四个16位全先行进位部件(74182)和十六个 74181可级连组成的64位ALU电路,由于集成器件的集成度的提高,允许更多位的 ALU集成在一个芯片内。例如AMD公司的 AM29332为32位ALU,而在
10、Intel公司的Pentium处 理器中,32位ALU仅是芯片内的一部分电路。尽 管器件不同,但基本电路原理还是相似的。,2.4.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。,下图分别为译码器引脚图和输入输出真值表
11、其中:G1、G2A、G2B为芯片选择端,G1高电 平有效,而G2A、G2B为低电平有效。,74LS138,2.4.4 数据选择器,F,地址A1A0 输出F 0 0 D0 0 1 D1 1 0 D2 1 1 D3,逻辑功能是在地址选择信号的控制下,从多路 数据中选择一种作为输出信号。又称多路开关或 多路选择器。以四选一选择器为例:,数据传输过程中,常常需要将一路数据分配到多路装置中指定的某一路中,执行这种功能的电路叫数据分配器。下面以四路数据分配器为例进行说明:,D,A1,A0,S,W0 W1 W2 W3,A0 A1 D W 0 0 D W0=D 0 1 D W1=D 1 0 D W2=D 1
12、1 D W3=D,2.4.5 数据分配器,2.4.6 三态门,当E=1时,其输出等于输入,是同相门;当E=0时,输出与输入呈现高电阻隔离。计算机中用做数据输出器件,当不输出数据时,可令E=0,使对总线无影响,因而多个器件可同时连到总线上。,D输入端 L输出端 E使能端,2.5 时序电路,2.5.1 触发器 2.5.2 寄存器 2.5.3 四级二进制并行计数器,D S Q CLK CLR Q,输入 输出 S CLR CLK D Q 0 0 1 1 0 0 0 0 1 0 X X 1 0 1 X X 0,D触发器功能表: 正跳变触发有效。,2.5.1 触发器 (1)D触发器,电路符号: D为数据输
13、入端; CLK为时钟信号; S为置位信号端; CLR复位信号端; Q为输出信号端。,电路符号: JK为控制输入端; CLK为时钟信号; S为置位信号端; CLR复位信号端; Q为输出信号端。,(2) J-K触发器,输入 输出 S CLR CLK J K Q 0 0 0 0 不变 0 0 1 0 1 0 0 0 1 0 0 0 1 1 翻转 0 1 X X X 0 1 0 X X X 1,1 寄存器,计算机中常用部件,用于暂存二进制信息。寄存器可由多个触发器组成。每个触发器存 1Bit,N个触发器储存N位二进制数据。,Q3 D3 CLK,X3,Q2 D2 CLK,X2,Q1 D1 CLK,X1,
14、Q0 D0 CLK,X0,控制端,下图为由4个D触发器组成的四位缓冲寄存器。,2.5.2 寄存器,2 移位寄存器,移位寄存器不仅具有存储数据的功能,而且还具有移位功能。所谓移位功能就是将移位寄存器中所存的数据,在移位脉冲信号的作用下,按要求逐次向左、右方进行移动。从信号输入上分有串行输入和并行输入从信号输出上分有串行输出和并行输出下面以串行输入并行输出右移位寄存器为例进行说明:,X1 X2 X3 X4,移位脉冲 CLK,串行输入信号DIN,串行输入并行输出右移位寄存器波形图,2.5.3 四级二进制并行计数器,2.6 可编程逻辑器件设计基础,2.6.1 可编程逻辑器件简介,2.6.2 硬件描述语
15、言(VHDL)介绍,2.6.3 可编程逻辑器件设计语言ABEL,2.6.1 可编程逻辑器件简介,目前,数字集成电路得到了广泛的应用,其本身也在不断地进行更新换代。随着微电子技术的发展,设计与制造集成电路的任务已不可能全由半导体厂商来独立承担,出现了可编程逻辑器件(PLD),其中应用最广泛的是现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。可编程逻辑器件如同一张白纸或是一堆积木。它能做什么呢?可以毫不夸张地讲,它能完成任何数字器件的功能,上至高性能CPU(如NiosII) ,下至简单组合逻辑(如74系列元器件) ,都可以用它来实现。现在的可编程逻辑器件已经能够容纳几个32位的CPU
16、同时工作,实现复杂嵌入式系统。可编程逻辑器件是电子设计领域中最具活力和发展前途的一项技术。下面我们深入地探讨一下可编程逻辑器件方面的知识。,1)FPGA和CPLDFPGA是现场可编程门阵列(Field Programable Gate Array) 的简称,它是可编程逻辑器件的一种。CPLD是复杂可编程逻辑器件 (Complex Programable Logic Device)的简称。两者的功能基本相 同,只是实现的原理有所不同。在进行逻辑设计时,统称为可编程 逻辑器件或CPLDFPGA。 FPGA与CPLD的主要区别在编程方式上,CPLD主要是基于EEPROM或FLASH存储器编 程,编程
17、次数可达1万次,其优点是系统断电时编程信息也不丢失。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失, 所以每次上电时须将编程数据从外部配置芯片重新写入SRAM中, 其优点是可以编程任意次,可在工作中快速编程,从而实现板级和 系统级的动态配置。但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的 数量要比CPLD丰富得多,更适合完成复杂的时序逻辑。CPLD由于 其宏单元的分解组合逻辑功能强大,适合于触发器有限而乘积项丰 富的组合逻辑。,为什么要使用CPLD/FPGA搞过硬件电路设计的工程师可能明白:使用通用的标准逻辑集 成器件(如74系列元器件)组合设计一块具有特定逻辑功能
18、的电路 板是很麻烦的。需要进行逻辑电路设计,然后再进行印刷电路板设 计、最后还有焊接工序。这期间的调试工作很多都牵涉到各器件之 间的阻抗匹配、信号完整性等。这就是说,各逻辑器件并不像在逻 辑设计阶段那么理想了,还需要考虑其实际情况。一个小错误都可 能使得PCB报废,须重新制板。系统的调试只有在硬件PCB板制 造、焊接完成后才能进行。若发现错误,调试也只能等下一次PCB 修改后才能继续。这样一来,整个开发周期就变得很长了,电路板的体积功耗都 变大,可靠性降低。而且逻辑设计人员不能专注于逻辑功能的设 计,效率大打折扣。可编程逻辑器件为数字系统的开发带来革命性的突破,简化了 系统的设计。只要逻辑门数
19、足够,一片可编程逻辑器件就可以容纳 传统设计所需要的通用标准逻辑器件。“器件”(并非真正的器件, 而是内部逻辑关系)之间的连接和可靠性完全由芯片制造商来保 证。,另外,通过逻辑设计或者修改模块参数,还可以“自制”原来所 没有的器件,这一点很重要。通过购买第三方的IP(Intellectual Property,知识产权)核,使系统设计大为简化,具有很高的集成 度。由于可编程逻辑器件的大部分引脚均为普通I/O引脚,可以设置 为输入、输出、双向或高阻。所以在器件型号选定后,根据系统的 要求,可编程器件的输入输出关系及其所使用的引脚就可以确定下 来了。另外由于可编程逻辑器件的内部逻辑设计与硬件PCB
20、绘制同 时进行,大大缩短了系统设计周期。在PCB完成以后,还可以利用 可编程逻辑器件的在线修改能力,随时修改设计,而不必改动硬件 电路。可以说,这就是“可编程”的魅力!总之,使用可编程逻辑器件来开发数字电路,可以大 大缩短设计时间,减少PCB面积,提高系统的可靠性。 可编程逻辑器件的这些优点使得PLD技术在20世纪90年 以后得到飞速的发展,同时也大大推动了EDA软件和硬 件描述语言(HDL)的进步。,2.6.2 硬件描述语言(VHDL)介绍(12.2节),随着EDA技术的发展,使用硬件描述语言(Hardware Description Language)设计CPLD/FPGA称为一种趋势 为
21、什么要使用硬件描述语言呢?它跟原理图输入又有什 么区别?传统的原理图输入其实就相当于物理器件的焊接,其输 入的可靠性好、效率高、比较直观,但设计大规模PLD/ FPGA时显得很烦琐、移植性差。硬件描述语言和传统原 理图输入方法的关系就好比是高级语言和汇编语言的关 系。HDL的可移植性好,使用方便,但效率不如原理图 高。在真正的CPLD/FPGA设计中,通常建议采用原理图 和HDL结合的方法来设计。在最短的时间内,用自己最熟 悉的工具设计出高效、稳定、符合设计要求的电路才是我 们的最终目的。,VHDL特点VHDL的英文全名是Very-High-Speed Integrated Circuit H
22、ardware Description Language,诞生于1982年。1987年底, VHDL被IEEE和美国国防部确认为标准硬件描述语言。 VHDL的程序结构特点是将一项工程设计,或称设计实体(可以 是一个元件、一个电路模块或一个系统)分成外部(或称可视部分, 即端口)和内部(或称不可视部分,即涉及实体的内部功能实现部 分)。在完成了对一个涉及实体开发后,其他的设计就可以直接调 用这个模块。这种将设计实体分成内外部分的概念是VHDL系统设 计的基本点。,目前主要的硬件描述语言是VHDL和Verilog HDL。VHDL发展较早,语法严格,而Verilog HDL是在C语言基础上发展起来
23、的一种 硬件描述语言,语法比较自由。两者相比,VHDL书写规则比erilog 烦琐一些,但Verilog自由的语法也容易让初学者出错。其实两种语 言的差别并不大,它们的描述能力也是相似的。掌握其中一种语言以后,通过短期的学习,可以较快的学会另一种语言。这里简要介绍一下VHDL语言。,VHDL是美国国防部颁布的超高速集成电路(VHSIC)计划 所确定的硬件描述语言,并于1987年被IEEE批准为标准设计 语言,命名为IEEE-1076-1987。美国国防部鼓励设计语言格 式标准化,它要求所有与政府项目有关的ASIC设计必须符合 IEEE-1076标准。设计者用VHDL可对整个ASIC进行从系统级
24、 (对电路结构的高层次抽象)到门级硬件的描述。对被模拟系统 的模型可混合使用高层次行为描述和低层次(逻辑和门)的详细 描述。,使用任何文本编辑器都可进行VHDL语言的编写,也可以 用专门的HDL编辑环境。通常将VHDL文件保存为.vhd文件。 VHDL的语言形式、描述风格及句法有点类似于一般的计算机高级语言,但是要注意的是,硬件描述语言与平常的计算机描述语言并不相同,它描述的是硬件电路。VHDL主要用于描述数字系统的结构、行为、功能和接口,与原理图有对应的关系,VHDL是一种标准语言,VHDL模型可以在与此标准相一致的任一计算机系统上运行,并产生相同的模拟结果。VHDL模型以使用离散值的“激励
25、一响应”形式为基础。对一个器件,常常会问两个最基本的问题:它由什么组成?它如何工作?这两个问题提出了硬件描述的基本方面:结构与行为。VHDL描述的对象是数字设备,是离散系统。即将离散的输入值(激励)进行一系列计算和转换,最后产生离散的输出值(响应)。从某输入点数值的变化(从“0”到“1”或从“1”到“0”)到输出端得到响应,总存在一定的时间延迟。,定义电路的端口(输入端、输出端),端口是电路与外界的连接 点。电路的行为描述和结构描述。编写对电路进行激励模拟的命令文件,进行逻辑模拟。(1)电路的VHDL描述在VHDL中,被模拟的电路由实体定义,实体由说明部分与结 构部分组成。今将半加器的VHDL
26、描述作一介绍(其中“- -”为注释 符,一行中“- -”后面的任何字符都为注释,在程序中不起作用 )。描述工具是Viewlogic公司提供的Workview软件。- -下面是半加器的实体说明ENTITY half_adder isport (X:in vlbit;Y:in vlbit;Sum:out vlbit;Carry:out vlbit);end half_adder;- -端口定义结束,in表示输入数据,out表示输出数据。,在对电路进行逻辑模拟时,一般要经历以下步骤:,- -VHDL有三种基本数据类型:整数、浮点数和枚举类 型,vlbit为枚举类型二值(0,1) 。- - X、Y是半
27、加器的输入,Sum为和(输出),Carry为 进位(输出)。- -下面为结构体描述ARCHITECTURE behavioral_description of half-adder is beginprocessbeginSum=X xor Y after 5 ns;Carry=X and Y after 5 ns;Wait on X,Y;end process;- -进程描述结束end behavioral_description;- -结构体描述结束,现将结构体描述简单说明如下:在VHDL中,常用进程Process进行行为描述。 在该进程中,表示Sum和Carry的值要比信号X,Y 延迟5
28、ns时间才能形成。Wait语句将进程挂起,直 到信号X或Y中的任一个发生了变化,进程就从进程 语句的顶端开始重新执行一遭,也可将进程改写如 下,此时不再需要Walt语句,而作用与有Wall语句 的进程相同。process (X,Y)beginSum=X xor Y after 5 ns;Carry=X and Y after 5 ns;end process;,例1、举一个移位器的例子。该移位器可对32位数据 A进行任意位(31位0位)移位,移位次数由 给出,移位器的功能由5级门完成,在B(i)控制下数据经 过每级门有两种操作可供选择:直接送出(B(i)=0不移位) 或移固定位数(B(i)=1
29、),其中第1级可移1位;第2级可移2 位;第3级可移4位;第4级可移8位;第5级可移16位。另 外该移位器可进行逻辑左移、逻辑右移、算术左移和算术 右移四种操作。逻辑左移和算术左移,空出来的低位补 0;所以这两种操作没有区别,统称为左移;逻辑右移空 出的高位补0;算术右移,空出的高位全部补入原符号 位。SR为移位结果。在本例中,首先对移位器进行行为描述,定义了三个 函数(function):左移shiftl,逻辑右移shiftr-logic,算 术右移shiftr maths,并一起归入ExtendVhd程序包 中。,左移的VHDL描述:function shiftl(A:vlbit_ld(3
30、1 downto 0);i:integer) return vlbit_ld is variableSR:vlbit_ld(31 dowmo 0);beginSR(31+i downto i):A;for j in i-l downto 0 loopSR(j):=0;end loopreturn SR(31 downto 0);cndI;程序中的vlbit_ld表示一维数组。在VHDL中有两种赋值符号“”和“:”。前者表示赋值需经 过一段延迟时间才能完成;后者则可立即赋值。当给变量置初始化 值或给常量赋值时使用“:”符号。,逻辑右移的VHDL描述;function shiftr_logic(A
31、:vlbit_ld(31 downto 0);i:integer) return vlbit_ld is variable SR:vlbit_ld(31 downto 0);beginfor j in 31 downto 32-i loopSR(j):= 0;end loopSR(31-i downto -i):=Areturn SR(31 downto 0);end;算术右移的VHDL描述请读者自行写出。,下面给出移位器的实体说明与结构体描述。文件名:shifter.vhduse work.extend.all;-use语句允许本实体引用。extend.vhd程序包,内有3个移 位函数ENT
32、ITY shifter isgeneric(SR_DELAY:time:=10ns);-属性定义,从输入A、B到输出SR的延迟port(A:in vlbit_ld(31 downto 00);B:in vlbit_ld(4 downto 0);SR:out vlbit_ld(31 downto 00);Clr,Cal:in vlbit);-端口定义,A为32位一维向量,B为5位一维向量。-Clr为左右移控制信号,Clr=“0“为左移,Clr=“1“,为右移-Cal为算术移位和逻辑移位的控制信号,Cal=“0”为算术移位, Cal=“1“为逻辑移位end shifter;,实体说明结束,以下为结
33、构体描述ARCHITECTURE behavior OF shifter ISbeginprocess (A,B,Clr,Cal)variable tmp1, tmp2,tmp3,tmp4,tmp5:vlbit_ld (31 downto 00)beginif B(0)=0 thentmp1:=A;elsif Clr=0 thentmp1=(shiftl(A,1);elsif Cal=0 thentmp1:= (shiftr_maths(A,1);elsetmp1:= (shiftr_logic(A,1);,end if;-shiftl,shiftr_logic及shiftr_maths在ex
34、tend.vhd中定义if B(1)= 0 then.end if-得出tmp2if B(2):=0 then.end ifif B(3)=0 then.end if-得出tmp3,tmp4,if B(4)=0 thentmp5:=(tmp4)elsif Clr=0 thentmp5:= (shiftl(tmp4,16); elsif Car=0 thentmp5:=(shiflr_maths (tmp4,16);elsetmp5:=(shiftr_logic (tmp4,16);end ifSR= tmp5 after SR_DELAY;-输出结果SRend process;-进程描述结束e
35、nd behavior;,例2、这里举一个简单的VHDL例子,让大家有一个入门的认 识。例子的功能是实现一个12位的寄存器。 ENTITY REG12 IS -外部端口定义:数据,时钟,输出PORT(d:IN BIT_VECTOR(11 DOWNTO 0);clk:IN BIT;q :OUT BIT_VECTOR(11 DOWNTO 0); EDN REG12;-内部实体逻辑ARCHITECTURE a OF REG12 ISBEGINPROCESSBEGINWAIT UNTILL clk=1;-等待时钟上升沿q=d;END PROCESS;END a;,这里例子十分简单,就是在时钟的上升沿把
36、输 入的数据锁存起来。当然,用原理图的方法也可 以实现,用12位的D触发器就可以了。例子虽然简 单,但已经具有以上所说的VHDL语言特点了,请 仔细推敲。,(2)逻辑模拟及验证如何证明用VHDL描述的ASIC在逻辑上和时序上的 正确性?这便是逻辑模拟的目的。在workview环境下,逻辑模拟可根据屏幕提示和菜 单进行操作。下面以shifter的模拟过程为例进行说明。第一步,把VHDL的逻辑描述(shifter.VHD)转换为网 表文件,这是因为模拟器只能对网表进行模拟,用命令 C2VHDL shifter-v 可生成shifter.VLI及shifter.VSM网表文件(其中VHDL为 编译命
37、令,-v为命令的参数,表示需要生成网表文件)。第二步,进入模拟器,并把模拟对象的网表文件加载 到模拟器中。在workview集成环境中,模拟器为viewsim。进入 viewsim中后,模拟器会问用户加载网表的名称,输入 shifter即可(关于workview的具体使用,可参看其使用说 明书)。,第三步,对输入端口施加激励并进行模拟。所 谓激励,对应于实际电路的输入端输入信号,一般 通过逻辑值1和0的组合来表达。在shifter中,输入端口有A,B, Clr及Cal为这些输入端口设计激励时,要注意尽可 能全面地测试移位器的功能。第四步,显示模拟结果,设计简单的列表方式及 图形显示方式等。,2
38、.6.3 可编程逻辑器件设计语言ABEL (用于计算机组成原理实验),前言 1 ABEL-HDL语言的基本语法 2 ABEL-HDL语言源文件的基本结构 3 逻辑描述,开发使用PLD的系统时,应使用语言或逻辑图来描述该PLD的功能,并通过编译、连接、适配,产生可对芯片进行编程的目标文件(如标准的JED文件),然后再下载并写入芯片中。常用的可编程逻辑器件设计语言为ABEL-HDL(ABEL硬件描述语言),它是DATA I/O公司开发的一种可编程 逻辑器件设计语言,它可支持绝大多数可编程逻辑器件。,前言,1、ABEL源文件构成在用ABEL-HDL进行逻辑设计时,描述逻辑功能的源文件必须是符合ABE
39、L-HDL语言语法规定的ASII码文件。ABEL-HDL源文件是由各种语句组成的,这些语句是由ABEL-HDL语言的基本符号构成的,这些符号必须满足一定的格式才能正确描述逻辑功能。语句的每一行最长为150个字符。在源文件的语句中标识符、关键字、数字之间至少必须有一个空格,以便将它们分隔开来。但在标识符列表中标识符以逗号分隔。在表达式中,标识符和数字用操作符或括号分隔。空格、点号不能夹在标识符、关键字、数字之间。如空格夹在标识符、数字之间将会被看作两个标识符或两个数字。以大写、小写或大小写混合写的关键字被看作同一个关键字(关键字不区分大小写),而以大写、小写或大小写混合写写的标识符将被看作不同的
40、标识符(标识符区分大小写)。,1 ABEL-HDL语言的基本语法,在ABEL-HDL语言中,其合法的ASCII字符除了数字0-9,大小写的英文字母外,还包括空格符及下述符号:! # $ ? + : “ ,. / %,2、ASCII字符,标识符是用合法的ASCII字符按次序排列定义的名字,其作用 是标识器件、管脚、节点、集合、输入输出信号、常量、宏以及变 量。所有的标识符必须符合下述规定:标识符的长度不超过31个字符; 2. 标识符必须以字母或下划线开始; 3. 标识符其他的宇母可采用大、小写字母、数字及下划线; 4. 标识符中不能包括空格符; 5. 除保留标识符(即关键宇)外,标识符中同一个字
41、母的大、小写 表示不同的含义; 6. 除了合法的点扩展外,标识符中同一个字母的大、小写表示不 同的含义。在ABEL-HDL中保留的标识符称为关键字,关键字不能用于命 名器件、管脚、节点、集合、宏或信号,而代表了这个字所特指的 功能。,3、标识符,在ABEL-HDL语言的逻辑描述中,常量用于赋值语句、真值表和测试向量的表达,有时也用于给某些标识符赋值,以使该标识符在整个模块的逻辑描述中代表该常量的值。常量可以是数值常量,也可以是非数值的特殊常量。,4、常量,块是包含在一对大括号中的文本,它用于宏和指令。括号中的文本内容可以是一行,也可以是多行。块可以嵌套,即块中包含块。如在块的文本的字符中包含了
42、大括号,则应在其之前加上反斜杠。例如:This is a block再如:This is also a block,and itspans more than one line再如:A=B#CD=0,1&1,0,5、块,注释是对源文件的解释,注释以双引号开始,以另一个双引号或行结束符号结束,注释不能用于关键字之间。例如:“declaration section”module Basic_logic; ”gives the module a name(回车),6、注释,ABEL-HDL中的所有的数值运算精度都是32位,合法的数值范围是0232-1。数字可采用二进制、八进制、十进制或十六进制,它们
43、分别以符号b、o、d或h表示,如不用符号则认为是十进制数。 在ABEL-HDL中数字还可用字符表示,在字符之前加上单引号后,即以字母ASCII码作为数值,例如a=h61,ab=h6162,7、数字,字符串用于标题、模块及选项的表达,也用于管脚、节点和属性的定义,它包含在一对单引号中。如字符串中有单引号或反斜杠则必须在它们之前再加一反斜杠。字符串可写几行,但不能超过324个字符。如: TITLE 1 to 8 line demultiplexer;DMIP16L8;,8、字符串,ABEL-HDL支持四类基本运算:逻辑运算、算术运算、关系运算及赋值运算。1) 逻辑运算(1)非: ! 例 !A(2)
44、与: & 例 A&B(3)或: # 例 A#B(4)异或:$ 例 A$B(5)同或:!$ 例 A!$B2) 算术运算(1)取负 - 例 -A(2)加 + 例A+B(3)减 - 例A-B(4)乘(无符号整数) * 例A*B(5)除(无符号整数) / 例A/B(6)取模(无符号整数) % 例A%B(7)左移 例AB,9、运算符,关系运算为无符号运算,其结果为位(布尔值)。(1)等于: = 例A=B(2)不等号: ! = 例A!=B(3)小于: 例AB(6)大于等于: = 例A=B例如:2=3 值为false32 值为false4)赋值运算组合输出为(非时钟赋值) =寄存器输出为(时钟赋值) :=,
45、3) 关系运算,表达式由标示符和运算符组成。在表达式中可出现任何逻辑、算术或关系运算,表达式中的运算次序按运算优先级决定,也可加括号改变执行次序。赋值运算仅用于等式,它将表达式的运算结果通过等式赋给输出信号(包括组合赋值和时序(寄存器)赋值)。一个信号可以被多次赋值,而其最终结果是所有这些赋值的或,而不是最后一次的赋值。,10、表达式和等式,WHEN 条件 THEN ! ENABLE 元素 = 表达式;ELSE 方程 或者 WHEN 条件 THEN ! ENABLE 元素 := 表达式;ELSE方程 式中: 条件:任意合法表达式; 元素:给一个或一组信号命名的标识符,或要被表达式赋值的集合 表
46、达式:由标识符和运算符组成的式子,求值后得出一个结果。例如: WHEN B THEN A=B; ELSE A=C X=A 若C#D为真,Y被使能(并不是Y输出为Y=C#D),11、布尔方程语法,1. 三态允许端: .OE,它为1有效,仅适用于引脚。 2. 寄存器复位端: .RS,它为1有效 3. 寄存器置位端: .PR,它为1有效 4. 寄存器时钟: .CLK,它为上跳触发 5. JK触发器输入端: .J和.K 6. T触发器输入端: .T 7. RS触发器输入端: .R和.S 8. D触发器输入端: .D也可使用:=,12、引脚和寄存器的特别说明,集合是作为一个独立单元进行操作的一组信号或常
47、量。它采用一个标识符,用方括号内的一组信号或常量表示,其中的每一个信号或常量称为集合的元素。定义集合的方法有枚举法、界限符法或它们的组合。例如:ADD=A5,A4,A3,A2,A1,A0 为枚举法ADD=A5A0 为界限符法ADD=A5,A4,A3A0 为两种方法的组合集合可以进行逻辑、加、减、关系运算。逻辑运算是对集合中每一个元素作相应的运算,因此如果需对两个或两个以上集合进行运算时,这些参与运算的集合的元素数目必须相同。但单个变量与集合进行逻辑运算为该变量与集合的每个元素进行逻辑运算。加、减、关系运算为对整个集合执行该运算。,13、集合,例:(ADD=h10)&(ADD=h2F)等价于A5A4VA5A4,