清华计算机组成原理课件02_计算机的逻辑部件_第1页
清华计算机组成原理课件02_计算机的逻辑部件_第2页
清华计算机组成原理课件02_计算机的逻辑部件_第3页
清华计算机组成原理课件02_计算机的逻辑部件_第4页
清华计算机组成原理课件02_计算机的逻辑部件_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

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

文档简介

第二章 计算机的逻辑部件 其中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相加,则称为全加 器。全加和Fn与进位输出Cn的表示式为: 其推导过程和逻辑电路图详见教材19页图2.6所示。 有关半加器和全加器的功能表及逻辑图如教材中图2.5和图2.6 Xn Yn Cn-1 Fn Cn 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 一位全加器真值表如下: 其中Xn 为被加数,Yn为加数, Cn-1为低级进 位信号,Fn为和,Cn为本级向上进位信号。 简单串行级联的4位全加器如下图所示: (教材图2-7 四位串行加法器) 将4个全加器相连可得4位加法器(图2.7),但其加法 所需时间较长。这是因为其位间进位是串行传送的。本位 全加和Fi必须等低位进位Ci-1来到后才能进行,加法时间 与位数有关。只有改变进位逐位传送的路径,才能提高加 法器工作速度。解决办法之一是采用“超前进位产生电路” 来同时形成各位进位,从而实行快速加法。我们称这种加 法器为超前进位加法器。 根据各位进位的形成条件,可分别写出Ci的逻辑表 达式: C1=X1Y1+(X1+Y1)C0=G1+P1C0 其中: Gi=XiYi 称为进位产生函数(绝对进位) Pi=Xi+Yi 称为进位传递函数(条件进位) Gi的意义是:当 XiYi 均为“1”时定会产生向高位的进位 Pi的意义是:当Xi和Yi中有一个为“1”时,若同时低位有 进位输入,则本位也将向高位传送进位。写成通用式为: 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) 当全加器的输入均取反码时,它的输出也均取反码。 (即应用反演律采用与非、或非、与或非实现连接)将上式 改写成如下: 图2.8 “超前进位产生电路”及四位超前进位加法器的逻辑图 2.4.2 算术逻辑单元(简称ALU) l ALU是一种功能较强的组合逻辑电路。它能 进行多种算术运算和逻辑运算。ALU的基本逻 辑结构是超前进位加法器,它通过改变加法器 的进位产生函数G和进位传递函数P来获得多种 运算能力。下面通过介绍SN74181型四位ALU 中规模集成电路了介绍ALU的原理。 l 在图2.9中功能表中,“加”表示算术加,“+” 表示逻辑加。它能执行16种算术运算和16种逻 辑运算,M是状态控制端,M=H,执行逻辑运算 ;M=L执行算术运算。S0 S3是运算选择端, 它决定电路执行哪种算术运算或逻辑运算。 74L181逻辑电路图演示 S0 S1 S2 S3 L L L L L L L H L L H L L L H H L H L L L H L H L H H L L H H H H L L L H L L H H L H L H L H H H H L L H H L H H H H L H H H H A A+B AB “0” AB B AB AB A+B AB B AB “1” A+B A+B A A A+B A+B 减1 A加(AB) (AB)加(A+B) A减B减1 (AB)减1 A加(AB) A加B (AB)加(A+B) (AB)减1 A加A A加(A+B) A加(A+B) A减1 A+1 (A+B)加1 (A+B)加1 “0” A加(AB)加1 (AB)加(A+B)加1 A减B AB A加(AB)加1 A加B加1 (AB)加(A+B)加1 (AB) A加A加1 A加(A+B)加1 A加(A+B)加1 A 正 逻 辑 M=H 逻辑运算 M=L算术运算 Cn=1 Cn=0 图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) l 与前面讲过的一位的进位产生函数Gi的定义相似, 根 据四位一组的进位产生函数GN为“1”的条件,可以得到 GN的表达式为: GN =G3+P3G2 +P3P2G1 +P3P2P1G0 l 与前面讲过的一位的进位传递函数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+PN1GN0+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式的逻辑电路就成为超前进位扩展器 (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,而在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。 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 G1 G2A G2B C B A 下图分别为译码器引脚图和输入输出真值表 其中:G1、G2A、G2B为芯片选择端,G1高电 平有效,而G2A、G2B为低电平有效。 输 入 输 出 C B A Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 74LS138 2.4.4 数据选择器 F D0 D1 D2 D3 A1 A0 地址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 1 D W3=D 2.4.5 数据分配器 2.4.6 三态门 当E=1时,其输出等于输入,是同相门; 当E=0时,输出与输入呈现高电阻隔离。 计算机中用做数据输出器件,当不输出数据时, 可令E=0,使对总线无影响,因而多个器件可同时 连到总线上。 D E L 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为数据输入端; 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 J S Q CLK K CLR Q 1 寄存器 计算机中常用部件,用于暂存二进制信息。 寄存器可由多个触发器组成。每个触发器存 1Bit,N个触发器储存N位二进制数据。 Q3 D3 CLK X3 Q2 D2 CLK X2 Q1 D1 CLK X1 Q0 D0 CLK X0 控制端 下图为由4个D触发器组成的四位缓冲寄存器。 2.5.2 寄存器 2 移位寄存器 移位寄存器不仅具有存储数据的功能,而 且还具有移位功能。所谓移位功能就是将移位 寄存器中所存的数据,在移位脉冲信号的作用 下,按要求逐次向左、右方进行移动。 从信号输入上分有串行输入和并行输入 从信号输出上分有串行输出和并行输出 下面以串行输入并行输出右移位寄存器为 例进行说明: X1 X2 X3 X4 移位脉冲 CLK D1 Q1 F1 CLK D2 Q2 F2 CLK D3 Q3 F3 CLK D4 Q4 F4 CLK 串行输入信 号DIN DIN CLK X1 X2 X3 X4 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 0 1 1 0 串行输入并行 输出右移位寄 存器波形图 2.5.3 四级二进制并行计数器 J Q CLK K CLR J Q CLK K CLR Q0 Q1 Q2 Q3 清0端 控制端 计 数 端 J Q CLK K CLR J Q CLK K CLR CLK Q0 Q1 Q2 Q3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2.6 可编程逻辑器件设计基础 2.6.1 可编程逻辑器件简介 2.6.2 硬件描述语言(VHDL)介绍 2.6.3 可编程逻辑器件设计语言ABEL 2.6.1 可编程逻辑器件简介 l 目前,数字集成电路得到了广泛的应用,其本身 也在不断地进行更新换代。随着微电子技术的发展, 设计与制造集成电路的任务已不可能全由半导体厂商 来独立承担,出现了可编程逻辑器件(PLD),其中应 用最广泛的是现场可编程门阵列(FPGA)和复杂可 编程逻辑器件(CPLD)。 l 可编程逻辑器件如同一张白纸或是一堆积木。它 能做什么呢?可以毫不夸张地讲,它能完成任何数字 器件的功能,上至高性能CPU(如NiosII) ,下至简单组 合逻辑(如74系列元器件) ,都可以用它来实现。现在的 可编程逻辑器件已经能够容纳几个32位的CPU同时工 作,实现复杂嵌入式系统。可编程逻辑器件是电子设 计领域中最具活力和发展前途的一项技术。下面我们 深入地探讨一下可编程逻辑器件方面的知识。 1)FPGA和CPLD FPGA是现场可编程门阵列(Field Programable Gate Array) 的简称,它是可编程逻辑器件的一种。CPLD是复杂可编程逻辑器件 (Complex Programable Logic Device)的简称。两者的功能基本 相 同,只是实现的原理有所不同。在进行逻辑设计时,统称为可编程 逻辑器件或CPLDFPGA。 lFPGA与CPLD的主要区别 在编程方式上,CPLD主要是基于EEPROM或FLASH存储器编 程,编程次数可达1万次,其优点是系统断电时编程信息也不丢失 。 FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失 , 所以每次上电时须将编程数据从外部配置芯片重新写入SRAM中, 其优点是可以编程任意次,可在工作中快速编程,从而实现板级和 系统级的动态配置。 但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器 的 数量要比CPLD丰富得多,更适合完成复杂的时序逻辑。CPLD由 于 其宏单元的分解组合逻辑功能强大,适合于触发器有限而乘积项丰 富的组合逻辑。 l为什么要使用CPLD/FPGA 搞过硬件电路设计的工程师可能明白:使用通用的标准逻辑 集 成器件(如74系列元器件)组合设计一块具有特定逻辑功能的电 路 板是很麻烦的。需要进行逻辑电路设计,然后再进行印刷电路板 设 计、最后还有焊接工序。这期间的调试工作很多都牵涉到各器件 之 间的阻抗匹配、信号完整性等。这就是说,各逻辑器件并不像在 逻 辑设计阶段那么理想了,还需要考虑其实际情况。一个小错误都 可 能使得PCB报废,须重新制板。系统的调试只有在硬件PCB板制 造、焊接完成后才能进行。若发现错误,调试也只能等下一次 PCB 修改后才能继续。 这样一来,整个开发周期就变得很长了,电路板的体积功耗 都 变大,可靠性降低。而且逻辑设计人员不能专注于逻辑功能的设 计,效率大打折扣。 可编程逻辑器件为数字系统的开发带来革命性的突破,简化 了 系统的设计。只要逻辑门数足够,一片可编程逻辑器件就可以容 纳 传统设计所需要的通用标准逻辑器件。“器件”(并非真正的器件 , 而是内部逻辑关系)之间的连接和可靠性完全由芯片制造商来保 证。 另外,通过逻辑设计或者修改模块参数,还可以“自制”原来 所 没有的器件,这一点很重要。通过购买第三方的IP(Intellectual Property,知识产权)核,使系统设计大为简化,具有很高的集成 度。 由于可编程逻辑器件的大部分引脚均为普通I/O引脚,可以设 置 为输入、输出、双向或高阻。所以在器件型号选定后,根据系统 的 要求,可编程器件的输入输出关系及其所使用的引脚就可以确定 下 来了。另外由于可编程逻辑器件的内部逻辑设计与硬件PCB绘制 同 时进行,大大缩短了系统设计周期。在PCB完成以后,还可以利 用 可编程逻辑器件的在线修改能力,随时修改设计,而不必改动硬 件 电路。可以说,这就是“可编程”的魅力! 总之,使用可编程逻辑器件来开发数字电路,可以 大 大缩短设计时间,减少PCB面积,提高系统的可靠性。 可编程逻辑器件的这些优点使得PLD技术在20世纪90年 以后得到飞速的发展,同时也大大推动了EDA软件和硬 件描述语言(HDL)的进步。 2.6.2 硬件描述语言(VHDL)介绍(12.2节) l 随着EDA技术的发展,使用硬件描述语言(Hardware Description Language)设计CPLD/FPGA称为一种趋势 l为什么要使用硬件描述语言呢?它跟原理图输入又有 什 么区别? 传统的原理图输入其实就相当于物理器件的焊接,其 输 入的可靠性好、效率高、比较直观,但设计大规模PLD/ FPGA时显得很烦琐、移植性差。硬件描述语言和传统原 理图输入方法的关系就好比是高级语言和汇编语言的关 系。HDL的可移植性好,使用方便,但效率不如原理图 高。在真正的CPLD/FPGA设计中,通常建议采用原理图 和HDL结合的方法来设计。在最短的时间内,用自己最 熟 悉的工具设计出高效、稳定、符合设计要求的电路才是 我 们的最终目的。 lVHDL特点 VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。1987年底, VHDL被IEEE和美国国防部确认为标准硬件描述语言。 lVHDL的程序结构特点是将一项工程设计,或称设计实体(可以 是一个元件、一个电路模块或一个系统)分成外部(或称可视部分 , 即端口)和内部(或称不可视部分,即涉及实体的内部功能实现部 分)。在完成了对一个涉及实体开发后,其他的设计就可以直接调 用这个模块。这种将设计实体分成内外部分的概念是VHDL系统 设 计的基本点。 目前主要的硬件描述语言是VHDL和Verilog HDL。VHDL发展较 早,语法严格,而Verilog HDL是在C语言基础上发展起来的一种 硬件描述语言,语法比较自由。两者相比,VHDL书写规则比erilog 烦琐一些,但Verilog自由的语法也容易让初学者出错。其实两种语 言的差别并不大,它们的描述能力也是相似的。掌握其中一种语言 以后,通过短期的学习,可以较快的学会另一种语言。这里简要介 绍一下VHDL语言。 VHDL是美国国防部颁布的超高速集成电路(VHSIC)计 划 所确定的硬件描述语言,并于1987年被IEEE批准为标准设 计 语言,命名为IEEE-1076-1987。美国国防部鼓励设计语言 格 式标准化,它要求所有与政府项目有关的ASIC设计必须符 合 IEEE-1076标准。设计者用VHDL可对整个ASIC进行从系统 级 (对电路结构的高层次抽象)到门级硬件的描述。对被模拟系 统 的模型可混合使用高层次行为描述和低层次(逻辑和门)的详 细 描述。 使用任何文本编辑器都可进行VHDL语言的编写,也可以 用专门的HDL编辑环境。通常将VHDL文件保存为.vhd文件。 VHDL的语言形式、描述风格及句法有点类似于一般的计算机 高级语言,但是要注意的是,硬件描述语言与平常的计算机描 述语言并不相同,它描述的是硬件电路。VHDL主要用于描述 数字系统的结构、行为、功能和接口,与原理图有对应的关系 VHDL是一种标准语言,VHDL模型可以在与此标准 相一致的任一计算机系统上运行,并产生相同的模拟结果 。 VHDL模型以使用离散值的“激励一响应”形式为基础 。 对一个器件,常常会问两个最基本的问题:它由什么 组成?它如何工作?这两个问题提出了硬件描述的基本方 面:结构与行为。VHDL描述的对象是数字设备,是离散 系统。即将离散的输入值(激励)进行一系列计算和转换, 最后产生离散的输出值(响应)。从某输入点数值的变化(从 “0”到“1”或从“1”到“0”)到输出端得到响应,总存在一定 的时间延迟。 l 定义电路的端口(输入端、输出端),端口是电路与外界的连 接 点。 l 电路的行为描述和结构描述。 l 编写对电路进行激励模拟的命令文件,进行逻辑模拟。 (1)电路的VHDL描述 在VHDL中,被模拟的电路由实体定义,实体由说明部分与 结 构部分组成。今将半加器的VHDL描述作一介绍(其中“- -”为注释 符,一行中“- -”后面的任何字符都为注释,在程序中不起作用 ) 。 描述工具是Viewlogic公司提供的Workview软件。 - -下面是半加器的实体说明 ENTITY half_adder is port (X:in vlbit; Y:in vlbit; Sum:out vlbit; Carry:out vlbit); end half_adder; - -端口定义结束,in表示输入数据,out表示输出数据。 在对电路进行逻辑模拟时,一般要经历以下步骤: - -VHDL有三种基本数据类型:整数、浮点数和枚举类 型,vlbit为枚举类型二值(0,1) 。 - - X、Y是半加器的输入,Sum为和(输出),Carry为 进位(输出)。 - -下面为结构体描述 ARCHITECTURE behavioral_description of half-adder is begin process begin Sum进行任意位(31位0位)移位,移位次数由 给出,移位器的功能由5级门完成,在B(i)控制下数据经 过每级门有两种操作可供选择:直接送出(B(i)=0不移位 ) 或移固定位数(B(i)=1),其中第1级可移1位;第2级可移 2 位;第3级可移4位;第4级可移8位;第5级可移16位。 另 外该移位器可进行逻辑左移、逻辑右移、算术左移和算 术 右移四种操作。逻辑左移和算术左移,空出来的低位补 0;所以这两种操作没有区别,统称为左移;逻辑右移 空 出的高位补0;算术右移,空出的高位全部补入原符号 位。SR为移位结果。 l 在本例中,首先对移位器进行行为描述,定义了三 个 函数(function):左移shiftl,逻辑右移shiftr-logic,算 术右移shiftr maths,并一起归入ExtendVhd程序包 中。 左移的VHDL描述: function shiftl( A:vlbit_ld(31 downto 0); i:integer) return vlbit_ld is variable SR:vlbit_ld(31 dowmo 0); begin SR(31+i downto i):A; for j in i-l downto 0 loop SR(j):=0; end loop return SR(31 downto 0); cndI; 程序中的vlbit_ld表示一维数组。 在VHDL中有两种赋值符号“VHDL shifter-v 可生成shifter.VLI及shifter.VSM网表文件(其中VHDL 为 编译命令,-v为命令的参数,表示需要生成网表文件)。 l 第二步,进入模拟器,并把模拟对象的网表文件加 载 到模拟器中。 在workview集成环境中,模拟器为viewsim。进 入 viewsim中后,模拟器会问用户加载网表的名称,输入 shifter即可(关于workview的具体使用,可参看其使用 说 明书)。 l 第三步,对输入端口施加激励并进行模拟。所 谓激励,对应于实际电路的输入端输入信号,一般 通过逻辑值1和0的组合来表达。 在shifter中,输入端口有A,B , Clr及Cal为这些输入端口设计激励时,要注意尽可 能全面地测试移位器的功能。 l 第四步,显示模拟结果,设计简单的列表方式及 图形显示方式等。 2.6.3 可编程逻辑器件设计语言ABEL (用于计算机组成原理实验) 前言 1 ABEL-HDL语言的基本语法 2 ABEL-HDL语言源文件的基本结构 3 逻辑描述 开发使用PLD的系统时,应使用语言或逻辑图来描 述该PLD的功能,并通过编译、连接、适配,产生可对 芯片进行编程的目标文件(如标准的JED文件),然后 再下载并写入芯片中。 常用的可编程逻辑器件设计语言为ABEL-HDL(ABEL 硬件描述语言),它是DATA I/O公司开发的一种可编程 逻辑器件设计语言,它可支持绝大多数可编程逻辑器件 。 前言 1、ABEL源文件构成 在用ABEL-HDL进行逻辑设计时,描述逻辑功能的源文件必须是 符合ABEL-HDL语言语法规定的ASII码文件。 ABEL-HDL源文件是由各种语句组成的,这些语句是由ABEL-HDL 语言的基本符号构成的,这些符号必须满足一定的格式才能正确描 述逻辑功能。语句的每一行最长为150个字符。在源文件的语句中 标识符、关键字、数字之间至少必须有一个空格,以便将它们分隔 开来。但在标识符列表中标识符以逗号分隔。在表达式中,标识符 和数字用操作符或括号分隔。空格、点号不能夹在标识符、关键字 、数字之间。如空格夹在标识符、数字之间将会被看作两个标识符 或两个数字。以大写、小写或大小写混合写的关键字被看作同一个 关键字(关键字不区分大小写),而以大写、小写或大小写混合写 写的标识符将被看作不同的标识符(标识符区分大小写)。 1 ABEL-HDL语言的基本语法 在ABEL-HDL语言中,其合法的ASCII字符除了 数字0-9,大小写的英文字母外,还包括空格符及 下述符号: ! # $ ? + : “ ,. / % 2、ASCII字符 标识符是用合法的ASCII字符按次序排列定义的名字,其作用 是标识器件、管脚、节点、集合、输入输出信号、常量、宏以及变 量。所有的标识符必须符合下述规定: 1. 标识符的长度不超过31个字符; 2. 标识符必须以字母或下划线开始; 3. 标识符其他的宇母可采用大、小写字母、数字及下划线; 4. 标识符中不能包括空格符; 5. 除保留标识符(即关键宇)外,标识符中同一个字母的大、小写 表示不同的含义; 6. 除了合法的点扩展外,标识符中同一个字母的大、小写表示不 同的含义。 在ABEL-HDL中保留的标识符称为关键字,关键字不能用于命 名器件、管脚、节点、集合、宏或信号,而代表了这个字所特指的 功能。 3、标识符 在ABEL-HDL语言的逻辑描述中,常量用于 赋值语句、真值表和测试向量的表达,有时也用于 给某些标识符赋值,以使该标识符在整个模块的逻 辑描述中代表该常量的值。 常量可以是数值常量,也可以是非数值的特殊 常量。 4、常量 块是包含在一对大括号中的文本,它用于宏和指令。括号中的 文本内容可以是一行,也可以是多行。块可以嵌套,即块中包含块 。如在块的文本的字符中包含了大括号,则应在其之前加上反斜杠 。 例如: This is a block 再如: This is also a block,and it spans more than one line 再如: A=B#C D=0,1 ”gives the module a name(回车) 6、注释 ABEL-HDL中的所有的数值运算精度都是32位,合法的数值 范围是0232-1。 数字可采用二进制、八进制、十进制或十六进制,它们分别以 符号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)与: ELSE A=C X=A Y:=A ENABLE Y=C#D; 若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、引脚和寄存器的特别说明 集合是作为一个独立单元进行操作的一组信号或常量。它采用 一个标识符,用方括号内的一组信号或常量表示,其中的每一个信 号或常量称为集合的元素。 定义集合的方法有枚举法、界限符法或它们的组合。 例如:ADD=A5,A4,A3,A2,A1,A0 为枚举法 ADD=A5A0 为界限符法 ADD=A5,A4,A3A0 为两种方法的组合集合可以进 行逻辑、加、减、关系运算。 逻辑运算是对集合中每一个元素作相应的运算,因此如果需对 两个或两个以上集合进行运算时,这些参与运算的集合的元素数目 必须相同。但单个变量与集合进行逻辑运算为该变量与集合的每个 元素进行逻辑运算。加、减、关系运算为对整个集合执行该运算。 13、集合 例:(ADD=h10) End GATE 在这个模块中有说明段、定义段、逻辑描述段、测 试向量段及结束语句段五部分组成。 在这五部分中,说明段为模块的开始;定义段的定 义部分指定或定义用于设计的器件、信号、常量宏和 库;逻辑描述段对所设计的逻辑进行功能描述;测试向量 段写出了测试向量,用以验证所设计的逻辑;结束语句 段表示一个模块的结束。 此外在模块中还允许有选择地加上一些指令。每一 个模块只能有一个说明段,它与结束语句段配对使用 ,而定义段、逻辑描述段、测试向量段则可以任意次 序重复,定义语句必须紧跟标头或定义段的关键字。 在例1中说明段如下: Module GATE Options _trace wave Title example of gate 说明段包括模块语句、选项和标题三个元素组成。 1) 模块语句 模块语句是必不可少的,其作用是命名模块并标志 模块的开始,它与结束语句配对使用,同时也可指出是 否利用哑元。 2、说明段 模块语句的关键字是Module,其格式为: Module modulename(dummy_arg,dummy_arg) 其中modulename为命名模块的合法标识符,在本例中 为GATE。 dummy_arg是哑变量名称,如不利用哑变量则可以略 去。 若模块选用哑变量,则在使用语言处理程序处理模块 时,可将真实变量传给模块。哑变量可为模块引用。模块 中,凡带有“?”的哑变量,语法分析程序都用真实变量 将其替代。 例: module my_example (A,B) C=?B+?A; end my_example 2) 选项 选项为可选语句。其作用是语言处理器控制源文件的 处理。选项的关键字是 Options,其格式为 Optionssting string为选项字符串。 3) 标题 标题为可选语句,其作用是给出模块一个标题,此标 题将作为语言处理程序所生的编程器下载文件及设计编制 文件的题头。 标题的关键字是Title,其格式为: Titlestring string为标题字符串。 在例1中定义段如下: Declarations gate DEVICE GAL16V8; A,B PIN 1,2; X,Y PIN 18,17; 定义段包括定义段关键字、器件定义、信号定义、 常量定义、宏定义、库定义等元素。 定义段的关键字是Declarations,后面可跟任何合 法的定义语句。定义段的关键字允许定义段可在源文件 的任何一部分进行定义。如定义语句紧跟说明段,则可 略去定义段关键字。 3、定义段 器件定义是可选项,它的作用是将模块中所使用的器 件名与实际所采用的可编程逻辑器件联系起来。 器件定义的关键字是DEVICE,其格式为 Device_id DEVICE real_device; 此表达式中,device_id为模块中所使用的器件名, 在本例中为gate。real_device为实际际所使用的某一个 特定可编程逻辑器件的型号,在本例中为GAL16V8。值得 注意的是device_id必须是合法的文件名,因为编程器装 载文件的文件名由device_id加上扩展名“.jed”产生的 2) 信号定义 信号定义包括了管脚定义、节点定义及属性定义。其 作用是定义信号,并可选择和管脚及节点相联系。 节点/管脚定义用于定义信号名,并将信号同具体的 器件节点/管脚序数联系起来。 1) 器件定义 属性用于定义信号的特性,它既可用于器件的节点/ 管脚说明中,作为节点/管脚定义的一部分,也可设在器 件的节点/管脚定义之后,作为一个独立的定义部分。它 们的关键字分别为PIN,NODE,ISTYPE。 (1) 管脚定义 管脚定义的格式为: !pin_id,!pin_idPINpin#,pin#ISTYPEatt ributes; 其中!pin_id是逻辑设计中用于指示模块中管脚的 标识符,pin#为实际器件中的管脚(可为?,由系统分配) ,attributes为在节点可编程的器件中用于指明属性的字 符串,有以下几种: 例: !Clock,Rest,SI pin in U12,12,15,3; 这行代码将器件U12的管脚12,15,3分别用标示符 Clock,Rest,SI来表示。 若模块中不止定义一个器件,必须用语句中的in项来指明器件 。 例:管脚的属性可由语句中的属性项或ISTYPE语句定义,比如 FO pin 13 =neg,reg; FO pin 13 ISTYPEneg,reg; (2) 节点定义 节点定义的格式为: !node_id,!node_idNODEnode#,node#IETYPEattrib utes; 其中!node_id是逻辑设计中用于表示节点的标识符,node # 为实际器件中的节点号,Attributes为在节点可编程的器件中用于 指明属性的字符串(同管脚定义)。 关键字NODE并没有把信号限制在器件上的内部节点上,当一个 信号用NODE定义后,也可能被器件装配器分配给器件的I/O引脚上 。 (3) 属性定义 属性定义的格式为: signalsignalPIN NODE#S ISTYPE attributes,attributes; signal是管脚或节点的标识符,attributes为指明属 性的字符串。 例: FO , A istype neg,latch;将FO和A定义为负 极性锁存信号。 3) 常量定义 常量定义用于定义模块中的常量,常量的关键字是=, 其格式为: id ,id = expr ,expr 。 id为模块中所使用的常量的标识符。 expr为定义 常量值的表达式。 例:A , B , C = 5 , 1,0 , 6; G = 1,2 + 3,4 宏定义用于定义模块中的宏。这个宏包含了源文件中的某一部 分,这样,用户在建立文件时,不必每次书写相同的内容,而可以 调用宏。 宏定义的关键字是MACRO,其格式为: Macro_id MACRO(dummy_arg,dummy_arg)block; Macro_id为表示宏的宏的标识符。dummy_arg为哑变量。block 为块。 例:若定义了NAND3 MACRO(A,B,C)!(?A 则引用D=NAND3(Clock,Hello,Busy); 相当于D=!(Clock 5) 库定义 库定义的关键字是Library,其格式为: Library name name为定义库文件名的字符串,不含扩展名。 库定义使用户指定的文件内容从name.inc 库文件中抽取出来 ,并被插到源文件中。 4) 宏定义 在例1中逻辑描述段如下: Equations X=A Y=A$B; ABEL-HDL语言描述逻辑的方式有方程、真值表、状态 图、熔丝和异或因子,其中每一种描述方法均以关键字或 符号开始,以引导某种描述的开始。 1) 方程的形式 它以扩展的布尔方程来描述逻辑功能;方程语句表示 与某个器件相关的一组方程的开始;方程语句的关键字是 Epuations,其赋值符为=或:=,其中=为组合逻辑的赋值 操作符,:=为时序逻辑的赋值操作符。 4、逻辑描述段 在方程中允许使用WHEN-THEN-ELSE语句。 方程的表达形式如下: Equations WHEN condition THEN ! element = expression; ELSE equations; 或者 WHEN condition THEN equations; ELSE equations; 其中condition 为任何合法的表达式。 element 命名一个或一组信号,或一个实际集合的一 个标识符。 equation 为任何合法的表达式。 例: equations in IC13 A = B W,Y=3; WHEN B THEN A=B; ELSE A=C; 2) 真值表的形式 它以表格的形式描述了输出与输入逻辑之间的关系。真值表由 表头向量和表格组成。它的关键字是TRUTH TABLE. (1) 表头向量 它的表达形式为: TRUTH TABLE(in ids-out ids) inputs-outputs; 或者 TRUTH TABLE(in ids:reg ids) inputs:regs outs; 或者 TRUTH TABLE(in ids:reg ids-out ids) inputs:regs outs-outputs; 其中:in ids为逻辑关系中的输入信号标识符。 out ids为逻辑关系中的输出信号标识符。 reg ids为逻辑关系中的寄存器型信号标识符。 inputs为逻辑关系中的输入信号。 outputs为逻辑关系中的输出信号。 reg outs为信号寄存后的输出。 这三种形式中第一种适合于描述组合逻辑,第二种适合于描述 时序逻辑,第三种适合于描述既包含组合逻辑又包含时序逻辑的较 复杂的逻辑电路。 符号-表示输入输出关系为组合型,符号:表示输入输出关 系为寄存器型。 (2) 真值表格式 格式由真值表的表头向量定义,真值表本身即为按格式定义格 式排列的一组输入输出信号。真值表中使用的所用信号必须是常量 。 例:定义带使能的异或门 TRUTH TABLE in IC6 (EN,A,B-C) 0, .X., .X.-.X; 1, 0, 0-0; 1, 0, 1-1; 1, 1, 0-1; 1, 1, 1-0; 例:定义一个简单的状态机。当前状态用放在一个集合里 的信号A,B表示,下一个状态用寄存器输出信号C,D表示, 它们也放在一个集合中。输出信号为一简单的组合型信号 E。 该状态机工作时,在各状态之间循环。当A=0,B=1时 ,将E置为低电平。 TRUTH TABLE in IC17(A,B:C,D-E) 0,0:0,1-1; 0,1:1,0-0; 1,0:1,1-1; 1,1:0,0-1; 也可写为 TRUTH TABLE in IC17(A,B:C,D-E) 0:1-1; 1:2-0; 2:3-1; 3:0-1; 状态图采用了状态机的结构,专门用于描述时序逻辑,它可以 更简便地设计如计数器、顺序控制器等状态机构。它的关键字是 STATE DIAGRAM,其表达形式为: STATE DIAGRAM State reg -state out STATE state exp equation equation . . trans-stmt 其中State reg为表示决定状态机当前状态信号的一个或一组 标识符。 state out为表示状态机下一个状态的一个或一组标识符。 state exp为表示当前状态的表达式。equation为定义状态机输出 信号的合法方程。 trans stmt可为IF-THEN-ELS

温馨提示

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

评论

0/150

提交评论