第5章 常见数字模块
- 格式:pdf
- 大小:289.16 KB
- 文档页数:29
常见数字模块+-NNNNNNNVCC=AB44-[N-1]NNN实现=AB44-[N-1]NNNcomp ABA <B 44ALUNN N3A B F 2:0 Function 000 A & B 001 A | B 010 A + B 011 not used 100 A & ~B 101 A | ~B 110 A - B 111 SLT+21AB31F 2F 1:0[N-1]SNNNNN NN N N2零扩展F 2:0 Function 000 A & B 001 A | B 010 A + B 011 not used 100 A & ~B 101 A | ~B 110 A - B 111SLT+21AB31F 2=0F 1:0=00[N-1]SNNNNN NN N N2零扩展F 2:0 Function 000 A & B 001 A | B 010 A + B 011 not used 100 A & ~B 101 A | ~B 110 A - B 111SLT+21AB31F 2=0F 1:0=01[N-1]SNNNNN NN N N2零扩展F 2:0 Function 000 A & B 001 A | B 010 A + B 011 not used 100 A & ~B 101 A | ~B 110 A - B 111SLT+21AB31F 2=0F 1:0=10[N-1]SNNNNN NN N N2零扩展F 2:0 Function 000 A & B 001 A | B 010 A + B 011 not used 100 A & ~B 101 A | ~B 110 A - B 111SLT+21AB31F 2=1F 1:0=00[N-1]SNNNNN NN N N2零扩展F 2:0 Function 000 A & B 001 A | B 010 A + B 011 not used 100 A & ~B 101 A | ~B 110 A - B 111SLT+21AB31F 2=1F 1:0=01[N-1]SNNNNN NN N N2零扩展F 2:0 Function 000 A & B 001 A | B 010 A + B 011 not used 100 A & ~B 101 A | ~B 110 A - B 111SLT+21AB31F 2=1F 1:0=10[N-1]SNNNNN NN N N2零扩展C in =1F 2:0 Function 000 A & B 001 A | B 010 A + B 011 not used 100 A & ~B 101 A | ~B 110 A - B 111SLT+21AB31F 2=1F 1:0=11[N-1]SNNNNNNN N N2Zero ExtendC in=1–以计算 S = A-B 的方法实现–若A < B , Y 应该是1的32位表示(0x00000001)–F 2:0 = 111–F 2 = 1 (设置加法器单元为减法运算)–A-B 的差S ,其最高有效位进行零扩展–F 1:0 = 11 多路选择器选择Y = S 31 (零扩展) 的值输出.–Ex: 11001 >> 2 = 00110 –Ex: 11001 << 2 = 00100–Ex: 11001 >>> 2 = 11110 –Ex: 11001 <<< 2 = 00100–Ex: 11001 ROR 2 = 01110位移量 shamt 1:0>>24400011011S1:0S1:0S1:0S1:0 0001101100011000011011位移量 shamt 1:0<<24400011011S1:0S1:0S1:0S1:0 0001101100011000011011位移量 shamt 1:0>>>24400011011S 1:0S 1:0S 1:0S 1:00001101100011000011011–例: 00001 << 2 = 00100 (1 × 22 = 4)–例: 11101 << 2 = 10100 (-3 × 22 = -12) –例: 01000 >>> 2 = 00010 (8 ÷ 22 = 2) –例: 10000 >>> 2 = 11100 (-16 ÷ 22 = -4)Q CLKResetN+N1CLKResetNNQNrNQSin S out•串行到并行转换器:将串行输入(S in)转换成并行输出(Q0:N -1)0101011D 0D 1D N-1D 2Q Q Q Q•可以担当一个串行到并行转换器(S in to Q 0:N -1) •或者一个并行到串行转换器 (D 0:N -1 to S out)1111 D0D1D N-1D2Q Q QQS inLoad=11111 D0D1D N-1D2Q Q QQLoad=0。
第五章 数据集的处理5.1 数据集定义z/OS 数据集是存储在一个磁盘卷或者多个磁盘卷上,逻辑相关的数据记录的集合。
例如, 一个数据集可以是一个源程序、一个宏库或一个能够被应用程序使用的数据记录文件。
用户可以在终端上打印或显示数据集。
逻辑记录是应用程序使用的基本信息单元。
数据可以存储在直接访问存储设备上(DASD) ,磁带卷或者光媒体上。
正如前面提到的, DASD适用于磁盘或与磁盘类似的设备。
所有类型的数据集都可以存储在DASD上,但是只有顺序数据集能够存储在磁带上。
我们将在后面讨论数据集的类型。
5.2 数据集命名每当用户分配一个新的数据集时,必须给数据集一个唯一的名字。
一个数据集名可能是一个名字段, 或一系列联合的名字段。
每个名字段描述了一个限定标准,例如,数据集名TECH01.COBOL.DATA是由三个名字段组成。
左边的第一个名字段被称为高级限定词(HLQ-high-level qualifier),右边的最后一个名字段是最低级的限定词(LLQ- lowest-level qualifier)。
每个名字段的长度可以是一到八个字符,名字段的第一个字母必须是字母(A到Z)或national符号(#,@,$),剩下的七个字符是任一字母、数字(0-9)、national符号或一个连接符号(-)。
名字段之间用句点(.)相隔。
包括所有的名字段和句点,数据集名的长度不能超过44个字符。
因此,一个数据集名最多可以由22个名字段组成。
5.2.1 HLQ命名约定一个数据集的HLQ是由安全系统控制的,其余的名字段也有许多命名约定,这些是约定而不是标准,但是它们被广泛地使用,它们包括下列各项:(1)名字中的字符LIB表示数据集是一个库,字符PDS也可以表示一个库,但它较少使用。
(2)名字中的字符CNTL、JCL或JOB表示数据集中包含JCL( 但是不一定专用于JCL)。
(3) 名字中的字符LOAD、LOADLIB或LINKLIB表示数据集中包含可运行的模块(一个具有z/OS可执行模块的库必须是单独的可执行模块)。
第五章常见数字模块5.1 介绍到目前为止,我们已经考察过使用布尔表达式、电路图和硬件描述语言来设计组合电路和时序电路。
本章将详细介绍数字系统中常见的组合电路和时序电路组件。
这些组件包括算术运算电路、计数器、移位寄存器、存储器阵列和逻辑阵列。
这些组件自身有重要作用,而且还说明了层次化,组件化,规整化的原则。
组件可以以层次化的方法由更简单的组件(如逻辑门电路,多路选择器,译码器等)组成。
每个组件都有定义好的接口,当底层实现不重要时,可以被视为黑盒。
每一个规整结构的组件都应易于扩展为不同规模。
第七章中将使用这些组件构成一个微处理器。
5.2算术电路算术电路是计算机的主要组件。
计算机和数字逻辑可以实现很多算术功能,例如:加法、减法、比较、移位、乘法和除法。
本节将介绍实现这些操作的硬件。
5.2.1 加法加法是数字系统中最常见的操作之一。
首先考察两个一位的二进制数如何相加。
然后再扩展到N位二进制数。
加法器同时说明了速度和硬件复杂度之间的平衡。
半加法器首先从构建一位半加法器(half adder)开始。
如图5.1所示,半加法器有两个输入A和B,两个输出S和C out。
S是A和B 之和。
如果A和B都是1,S就是2,但2不能用一位二进制数表示。
作为代替,用另一列输出C out表示。
半加法器可以用一个XOR门电路和一个AND门电路实现。
图5.1 1位半加器在多位加法器中,C out会被相加或者进位到下一个高位。
例如,在图5.2中以蓝色标注的进位C out是第一列的一位加法输出,同时也是第二列加法的输入C in。
然而,半加法器缺少一个输入C in去接受之前列的输出C out。
下节中介绍的全加器会解决这个问题。
图5.2 进位全加器如图5.3所示,2.1小节中介绍的全加器(full adder)接收进位C in。
图中还给出了S和C out的输出表达式。
图5.3 1位全加器进位传播加法器一个N位的加法器将两个N位输入和一位进位C in相加,产生一个N位结果S和一个输出进位C out。
因为进位将会传播到下一位中,这种加法器通常称为进位传播加法器(carrypropagate adder, CPA)。
CPA的符号如图5.4所示,除了A,B,S是总线而不是单独一位外,它和一个全加器画起来很像。
三种常见的CPA实现分别是行波进位加法器,先行进位加法器和前缀加法器。
图5.4 进位传播加法器行波进位加法器构造N位进位传播加法器的最简单方法就是把N个全加器串联起来。
如图5.5的32位加法器所示,行波进位加法器(Ripple-Carry Adder)中一级的C out就是下一级的C in。
这是应用组件化和规整化的一个范例:全加器模块在一个更大的系统中被多次重用。
行波进位加法器有一个缺点:当N比较大的时候,运算速度会慢下来。
例如在图5.5中,S31依赖于C30,C30依赖于C29,C29又依赖于C28,如此类推。
归根到底依赖于蓝色标注的C in。
可以看出,进位以串行通过进位链。
加法器的延迟t Ripple直接随位数的增长而增长,如等式5.1所示,其中t FA是全加器的延迟。
t Ripple=Nt FA(5.1)图 5.5 32位行波进位加法器先行进位加法器大型行波进位加法器运算缓慢的根本原因是进位信号必须依次在加法器中的每一位传输。
先行进位加法器(Carry-Lookahead Adder)是另外一种类型的进位传输加法器,它解决进位问题的方法是:把加法器分解成若干块,同时额外增加电路在每块一得到输入进位时就快速算出此块的输出进位。
因此它不需要等待进位通过一块内的所有加法器单元,而是直接先行通过每个单元。
例如,一个32位加法器可以分解成8个4位的块。
先行进位加法器用G(generate)和P(propagate)两个信号描述一列或者一块如何确定进位输出。
在不考虑进位输入的情况下,如果加法器的第i列必然能产生了一个输出进位,则称此列为产生(generate)进位。
一个加法器的第i列在A i和B i都为1时,必产生进位C i。
因此第i列的generate信号Gi可以这样计算,G i=A i B i。
如果在有进位输入时,第i列会产生了一个进位输出,那么此列就称为传播(propagation)进位。
如果A i或者B i为1,第i列会传播一个进位输入C i-1,.因此,P i=A i+B i。
利用这些定义,可以为加法器的特定列重写进位逻辑。
如果加法器的第i列会产生一个进位G i,或者传播进位输入P i C i-1,它就会产生进位输出C i,表达式为C i=A i B i+(A i+B i)C i-1=G i+P i C i-1(5.2)产生和传播的定义可以扩展到多位构成的块。
如果一个块在不考虑进位输入的情况下也能产生进位输出,称其产生进位。
如果一个块在有进位输入时候能产生进位,称其为传播进位。
定义G i:j和P i:j为从第i位到第j位块的产生和传播信号。
一个块产生一个进位的条件是:最高位列产生一个进位,或者如果最高位列传播进位而且之前的列产生了进位,如此类推。
例如,一个第3位到第0位的块产生逻辑如下所示G3:0=G3+P3(G2+P2(G1+P1G0)) (5.3)一个块传播进位的条件是:块中所有的列都能传播进位。
例如,一个从第3位到第0位的传播逻辑如下P3:0=P3P2P1P0(5.4)使用块的生成和传播信号,可以根据块的进位输入C j快速计算出块的进位输出C i。
C i=G i:j + P i:j C j(5.5)图5.6(a )是一个由8个4位块组成的32位先行进位加法器。
每一个单元包含一个4位的行波进位加法器和一些根据进位输入提前计算进位输出的逻辑,如图5.6(b )所示。
为简化起见,图中没有画出用于计算每一位A i 和B i 的产生信号G i 和输出信号和Pi 所需要的AND 门和OR 门来计算。
同样地,先行进位加法器也体现了组件化和规整化。
图5.6 (a)32位先行进位加法器(CLA ) (b) 4位CLA 模块所有的CLA 单元同时地计算单独位和块的生成,输出信号。
关键路径从首个CLA 块中计算G 0和G 3:0开始。
接着C in 直接通过每块中的AND/OR 门电路向前传输,直到最后。
在大型加法器中,这会比等待所有的进位行波式通过每一个加法器要快很多。
最后,关键路径通过最后一个块中包含了一个短的行波进位加法器。
因此,一个分解成k 位块的N 位加法器延迟为:CLA __t (1)pg pg block AND OR FA N t t t kt k =++−+ (5.6)其中t pg 为单独一个生成产生信号P 和传播G 的门电路(一个单独的AND 或者OR 门电路),t pg_block 为在k 位块中生成产生信号P i:j 和输出信号G i:j 的延迟,t AND_OR 为在k 位CLA 块中C in 从AND/OR 逻辑到C out 的延迟。
当N>16时,先行进位加法器一般总会比行波进位加法器快很多。
然而,加法器的延迟依然随N 线性增长。
例子5.1行波进位加法器和先行进位加法器的延迟对比32位行波进位加法器和4位块组成的32位先行进位加法器的延迟。
假设每个两输入门电路的延迟为100ps ,全加器的延迟是300ps.解答:通过等式5.1计算,32位行波进位加法器的传输延迟是32×300ps=9.6ns 。
CLA 的t PE =100ps ,t pg_block =6×100ps=600ps ,t AND_OR =2×100ps=200ps 。
由式5.6,4位块组成的32位先行进位加法器传输延迟为:100ps+600ps+(32/4-1)×200ps+(4×300ps)=3.3ns ,几乎比行波进位加法器快3倍。
前缀加法器前缀加法器(Prefix Adder)扩展了先行进位加法器的生成和传播逻辑,可以进行更快的加法运算。
它们首先以两位一组计算G 和P ,之后是4位块,再之后是8位块,之后是16位块,如此类推直到生成每一列的信号。
和就从这些生成的信号中计算得到。
换言之,前缀加法器的策略就是,尽可能快地计算每一列i 的进位输入C i-1,之后使用下述等式计算总值,:1()i i i i S A B C −=⊕⊕ (5.7)定义列i=-1以包含C in ,所以G -1=Cin ,P -1=0。
因为如果从跨度为-1到i-1位中生成一个进位的话,那么在列i-1将会有产生进位输出,所以C i-1=G i-1:-1。
生成的进位要么在i-1列中生成,要么在之前列中生成,之后传播。
因此,我们重写等式(5.7)为1:1()i i i i S A B G −−=⊕⊕ (5.8)因此,问题就集中于快速计算所有块的生成信号G -1:-1, G 0:-1, G 2:-1,…, G N-2:-1。
这些信号和P -1:-1, P 0:-1, P 2:-1,…, P N-2:-1一起称为前缀(prefix)。
图5.7是一个N=16位的前缀加法器。
这个加法器以用AND 和OR 门电路去为每一列的A i 和B i 产生P i 和G i 。
之后它用log 2N=4层的黑色单元去组成前缀G i:j 和P i:j 。
一个黑色单元的输入包括:上部分跨度位i:k 的块和下部分跨度为k-1:j 的块。
它使用以下等式,组合这两部分信号为整个跨度为i:j 的块计算生成生和传播信号:i:j ::k-1:ji k i k G G P G =+ (5.9) ::-1:j i j i k k P P P = (5.10)图5.7 16位前缀加法器换言之,如果上部分生成进位或者上部分传播下部分生成的进位,则一个跨度为i:j 的块将会生成一个进位。
如果上部分和下部分都能传播进位,则一个块也能传播进位。
最后,前缀加法器使用式5.8计算总和。
总的来说,前缀加法器的延迟以加法器位数的对数增长,而不是线性增长。
这明显提高了速度,特别在加法器位数超过32位时。
但是它比简单的先行进位加法器需要消耗更多的硬件资源。
黑色单元构成的网络称为前缀树(prefix tree)。
使用前缀树计算,使其执行延时按输入位数的对数增长。
这种方法是很有用的技术。
发挥一下智慧,它可以应用到其它类型电路中(参见练习5.7)。
N 位前缀加法器的关键路径包括P i 和G i 的预计算。
通过log 2N 步的黑色前缀单元获得所有前缀。
G i-1:-1之后通过底部最后的XOR 门电路计算S i 。
N 位前缀加法器的延迟可表示为:2_log ()PA pg pg prefix XOR t t N t t =++ (5.11)其中t pg_prefix 是黑前缀单元的延迟。