CO理论
计算机性能
1.机器字节:
运算器一次运算所处理的二进制数的位数。常见的机器字长有16位、32位、64位。
2.主存容量
主存储器信息存储量,一般以字节为单位。1KB(kilobyte)=2^10^字节,1MB(Megabyte)=2^20^字 节,1GB(Gigabyte)=2^30^字 节,1TB(terabyte)=2^40^字 节,1PB(Petabyte)=2^50^字节。
3.时钟周期
计算机硬件最小时间单位,决定了计算机硬件完成基本功能的速度。时钟周期由计算机的主时钟电路决定,计算机硬件电路的构建都基于主时钟电路。
4.CPI(Clock Cycles Per Instruction):
、计算机执行每条机器指令所需时钟周期平均数。
5.MIPS(Million Instructions Per Second):
每秒执行的百万条机器指令数,是衡量计算机性能(速度)的一个指标,更大的单位有GIPS(Giga Instructions Per Second);
6.**MFLOPS(Million Floating-Point Operations Per Second)**:
每秒执行百万浮点运算的次数,是衡量计算机浮点运算性能的指标。
经典CPU性能公式:
CPU时间=指令数 * CPI * 时钟周期长度
冯·诺依曼计算机结构体系:主存储器、CPU(算法逻辑单元和程序控制单元)、输入/输出接口。
组合逻辑
逻辑代数
基本概念
一个封闭的系统,由变量集、0、1、与(合取)、或(析取)、非组成
扩展:异或(A * B + ~A * B)、同或(A * ~B + A * B)
公理、定理与规则
公理:交换律、结合律、分配律(**A + B * C = (A + B) * (A + C)**与代数运算略有不同)、0-1律(A + 0 = A;A * 1 = A;A + 1 =1;A * 0 =0)、互补律
定理:重叠律(A + A = A;A * A = A)、吸收律(A + A * B = A;A * (A + B) = A)、还原律(双非还原)、德摩根律((A + B) = ~A * ~B ; ~(A * B) = ~A + ~B、包含律(A * B + ~A * C + B * C = A * B + ~A * C;(A + B) * (A + C) * (B + C)=(A + B) * (~A + C))
包含律证明:
AB + ~AC + BC = AB + ~AC + (A + ~A)BC = AB + ~AC + ABC + ~ABC = AB(1 + C) + ~AC(B + 1) = AB + ~AC
规则:代入规则(扩大基本公式和常用公式的使用范围)、
反演规则(直接求已知逻辑函数的反函数,可用于公式的化简)、
对偶规则(已知某公式成立,则可以得到其对偶公式仍成立。若两个逻
辑函数表达式F和G相等,则其对偶式F’和G’也相等)
逻辑函数表达式
函数取值由逻辑变量的取值以及电路结构共同决定。
标准表达式:
最小项表达式:与或式(积之和)
最大项表达式:或与式(和之积)
同离散数学的定义一致
最小项
相邻最小项:除一个变量相反外,其他变量均相同的两个最小项。
全部最小项之和(或)为1;
任意两个最小项之积(与)为0;
有相邻性的两个最小项之和可合并为一个积项,化掉的是互为相反的变量,保留相同的变量。
最小项推导法则(从真值表):
1.取出输出为1的最小项(以输入为1保留原变量,输入为0取反的形式)
2.将所有最小项加(或)起来即为所求
最大项
相邻最大项定义同相邻最小项
全部最大项之积为0
任意两个最大项之和为1
有相邻性的两个最大项之积可以合并为一个和项,消去互为相反的变量,保留相同变量。
最大项推到法则(从真值表):
1.取出输出为0的最大项(和的形式)(以输入为0保留原变量,输入为1取反的形式)
2.将所有最大项积(与)起来即为所求
逻辑函数优化
设计优化:
1.时间优化
2.面积优化
化简
代数法:
1.合并乘积项法:采用互补律消去变量
2.吸收项法:利用吸收律反构建式子,再利用分配律和和互补律减少“与”项
3.配项法:利用互补律配项,配在乘积项上
卡诺图法:
卡诺图:
将最小项输出为1的对应写入相应格,再根据相邻性消去变量。
注意:卡诺图应该看成是一个环形包围的图形,即卡诺图的四个角是相邻的,并且参与一次消去运算的格可以再次参加其他项的变量消去。
逻辑门电路
晶体管和MOS管
半导体:P型、N型
半导体二极管
一个PN结就是一只晶体二极管,记作D。
二极管单向导电性:受外加电压极性控制的开关特性
正向导通:二极管外加正向电压大于开启电压VD,二极管导通。一旦导通,则 UD=VD 不变。因此,VD称为钳位电压或正向压降。
反向截止:二极管外加反向电压或电压小于开启电压VD ,二极管截止。二极管截止,电流ID=0
击穿:二极管两端外加反向电压超过一个阈值(VZ )时,二极管会被击穿,此时二极管失去单向导电性,压降是VZ。
正向开启电压:锗管约为0.2-0.5V;硅管为0.5-0.7V(课程默认0.7V)
半导体三极管
半导体三极管又称晶体(三极)管。由两层N型半导体中间夹一层P型半导体(NPN型)或两层P型半导体中间夹一层N型半导体(PNP型)组成。基极B接高电平,导通;反之,截止。
MOS管
MOS管属于单极型集成电路,只有一种载流子(自由电子或空穴)参与导电。
MOS管分为NMOS管和PMOS管,又有增强型和耗尽型两种类型
NMOS管中G接高电平,导通;反之,截止。
CMOS是由NMOS和PMOS管形成的电路结构,称为互补MOS
总结
注意:三极管的导通是指由C极指向E极直接相连,根据箭头方向传递电流,截止则是C极E极之间断开;MOS管的导通是D极与S极相连,根据箭头方向传递电流,截止是D极与S极之间断开。
逻辑门电路的实现
“与”门电路(二极管实现)
工作原理:
A、B都为高电平3.0V时,D1、D2均导通,二极管导通后钳位电压为0.7V,输出Y = 3.0+0.7 = 3.7V。
A、B都为低电平(0.0V)时,D1、D2均正偏导通,则输出Y=0.0+0.7=0.7V。
A为低电平、B为高电平时,当D1导通后,UY=UA+UD1=0.7V,使得UD2=UY-UB=0.7V-3V=-2.3V则D2承受的是反向电压,因此截止。输出Y=0.0+0.7=0.7V, D2被反偏截止;A为高电平B为低电平情况一样。
通常二极管导通之后,如果其阴极电位是不变的,那么就把它的阳极电位固定在比阴极高0.7V的电位上;如果其阳极电位是不变的,那么就把它的阴极电位固定在比阳极低0.7V的电位上,人们把导通后二极管的这种作用叫做钳位。
“或”门电路(二极管实现)
工作原理:
A、B均为低电平0.0V时,D1、D2均导通,二极管导通后的钳位电压为0.7V,则输出Y=0.0-0.7= -0.7V。
A、B均为高电平3.0V时,D1、D2均导通,则输出Y=3.0-0.7=2.3V。
A为高电平、B为低电平时, 二极管D1先导通,则输出Y=3.0-0.7=2.3V, D2被反偏截止; A为低电平B为高电平情况一样。
“非”门实现(CMOS管)
工作原理:
当Vi=0V时(输入低电平),T1截止,T2导通,输出Vo=10V(输出高电平)。
当Vi=10V时(输入高电平),T1导通,T2截止,输出Vo=0V (输出低电平) 。
注意:NMOS高电平导通,PMOS低电平导通。
“或非”门电路(CMOS实现)
构成:两个NMOS(驱动管)并联,加上两个PMOS(负载管)串联。
工作原理:
A、B中至少一个为高电平时,T3、T4中至少一个被导通,而T1、T2中至少一个被截止,又由于串并联的关系,此时F输出是Vss为低电平。
当A、B均为低电平时,T3、T4均被截止,T1、T2均导通,则F将与VDD相连为高电平。从而实现或非的功能。
“与非”门电路(CMOS)
实现方法类似或非门。
为什么总把逻辑表达式化简为与非-与非式?
1.任意一个逻辑表达式都可用与非门或者或非门实现,现如今数字电路基本都采用CMOS实现,非门是1个PMOS和1个NMOS。
2.与非门较与门、或门简单、且工作速度块。
门电路特性
逻辑电平
扇出系数(Nc)
门电路的输出端所能连接的下一级门电路输入端的个数,体现门电路的负载能力/驱动能力。
平均传输延迟时间(Ty)
门电路从输入改变到输出发生相应改变的延迟时间:Ty=(t1+t2)/2
空载功耗
当输出端空载,门电路输出低电平时的功耗称为空载导通功耗*Pon,输出高电平时的功耗称为空载截止功耗Poff。平均功耗是Pon和Poff*平均值。门电路功耗与集成度和工作频率相关。
功耗
动态功耗
CMOS电路工作时的动态功耗,由开关电流和短路电流引起。当输入为“0”时,PMOS导通,电源通过PMOS向负载电容充电;当电路输入为“1” 时,负载电容又会通过NMOS向地放电,开关电流就是不断对负载电容充放电所产生的。
静态功耗
CMOS电路在输入稳定时总有一个管子截止,所以静态功耗在理想情况下应该是零(由于漏电流的存在,实际上不是零)。
可编程逻辑阵列PLA
逻辑函数采用最小项表达式形式
与矩阵:用于构造逻辑函数中的各最小项(与式,也成积)
或矩阵:用于将逻辑函数中各个最小项“或”起来(也称和)
基本组合逻辑部件设计
加法运算电路
半加器
两个1位二进制数进行相加求和,并向高位进位的逻辑电路,不考虑来自低位的进位(两个输入、两个输出)
输入:两个1位二进制数, A、B
输出:两个,和S0,进位C0
全加器
三个输入端(相加的两个数以及一个低位的进位,并向高位进位),两个输出端。
多位加法器
串行进位
1.进位串行传输;2.进位延时长:若门电路延时为T,则一个全加器的延时为2T,则64位串行加法器延时为128T。
并行进位
将串行中每一次先计算完一位结果再传递给下一位,转变为同时输入原始的数据实现同时计算。
以四位并行加法器为例:
1.同时产生进位
2.加法延时缩短至
4位并行加法器的延时(假设门电路延时为T)为T+2T=3T
分组并行进位加法器(组内并行,组间传递)
分组并行进位加法器(组内并行,组间并行)
多路选择器(多路开关)
通过选择输入端控制输出。
C(output)= A * ~ S + B * S(S为select端)(2选1多路器MUX,A在0位置,B在1位置)
ALU
1位ALU
其中的4选1多路器MUX也是通过与sel端的真值组合得到的,用A表示Ainvert、B表示Bnegate、Op表示Operation,则有:
与运算:Op=00,A=0,B=0,result=a&b
与非运算:Op=01,A=1,B=1,result=~ (a & b)
加法运算:Op=10,A=0,B=0,result=a+b
减法运算:Op=10,A=0,B=1,result=a + ~b + 1 = a-b
32位ALU,MSB带溢出判断Overflow
ALUCtrl(4位) | 输出 |
---|---|
0000 | Result = A&B |
0001 | Result = A|B |
0010 | Result = A+B |
0110 | Result = A-B |
0111 | Result = A<B?1:0 |
1100 | Result = ~ (A|B) |
1101 | Result = ~(A&B) |
ALUCtrl从高到低依次为:Ainvert、Bnegate和Operation,对于32位ALU而言,Overflow=Cin31^Cout31
对于ALUCtrl为0111时的Result结果说明:假若A<B,则实际操作A-B,当A<B时A-B结果应该为负数,因此ALU31输出的set应该是1;反之,A>B,输出即为0了。
Verilog语言
设计流程
功能仿真(前仿真)、逻辑综合、布局布线、时序仿真(后仿真)、下载生产
乘法运算
无符号数乘法
补码乘法
乘积的补码 = 被乘数的补码 * 乘数的真值(即不考虑计算机内部表示(如原码、补码等)的原始数值)
1位Booth法:
补码表示与真值的关系:
[X]补=x0,x1,x2…xn-1
X=-x0 * 2^n-1^+∑xi * 2^n-i-1^(i从1到n-1)
比较法算法推导(以定点整数为例)
令Q-1=0 则
[P]补=[M * Q]补=[M]补 * Q=
示例:
右移为逻辑右移,根据运算规则,示例中共需要进行四次算术运算和四次移位运算(紧跟在每个算术运算之后),而每次算术运算时被乘数对齐的都是乘数的最高位再高位(因为[M]补*2^n^).
阵列乘法器
基本思路:
利用若干个全加器,完全由硬件直接计算结果
以4位无符号数为例:
其中Cij=AiBj
实现电路:
其中FA(full add)为全加器,图中标红的路径为阵列乘法器的最长延时路径,最长延时为6T(假设门电路延时为T)。
除法运算
以无符号定点整数除法为例:
运算特点:
余数:真余数和假余数,规定余数符号与被除数相同时为真余数;反之,为假余数。
溢出:由于机器数表示范围的限制,在进行除法前,要先判断除法的商值是否能在表示范围内。
思路:从被除数中试减除数,通过判断余数的真假(是否够减)来决定商的值。
除法溢出条件
B:2n位被除数
A:n位除数
Q:n位商
R:n位余数
若|B/A|>=2^n-1^则除法溢出
若B、A位无符号数时,溢出条件为2 * B - A * 2^n^ >= 0
恢复余数法运算规则
1.判断溢出:被除数B左移一位后减除数,若余数为正则溢出,停止运算;否则商中Qn-1位=0,恢复余数。
2.余数左移一位,减除数,若余数为正,则商1,余数为真余数,;否则商0,余数为假余数,恢复余数。
3.重复2步直至最后一位。
示例:00101101/0111
被除数:B=00101101
除数:A=0111,-A=~ A + 1=1001
商:Q=0110
余数: 0011
阵列除法器
浮点数运算
加减法运算
规格化
对阶:小阶向大阶对齐
尾数加减运算
结果规格化
结果溢出问题
乘除法运算
乘法:阶码相加,尾数相乘,结果规格化
除法:阶码相减,尾数相除,结果规格化
实现
硬件实现:定点数与浮点数共享运算部件
数值比较器
1位比较器:
两输入(A、B)、三输出(大于、等于、小于),根据真值表得到相对应关系。
FA>B=A * ~ B = A * (~ A + ~B) = A * ~(AB)
FA<B=~ A * B = B * (~ A + ~B) = B * ~(AB)
FA=B=A * B + ~ A * ~ B = ~ (A * ~ B + ~ A * B)=~ (A * ~(AB) + B * ~(AB))
4位比较器(7485芯片)(无符号):
本质是通过4个一位比较器搭建而成的:
同样可以通过2片扩展成8位数值比较器
编码器
实现编码功能的数字电路,通常有二进制编码器、BCD码编码器及优先编码器。
前提:n个输入中,一般保证在任意时刻只有一个有效,即编码器只对其中一个有效信号进行编码。输出一组二值代码,对应输入信号中有效事件的编码。
对于2^n^线(输入)-n线(输出)编码器:用n位二进制代码对2^n^个信号进行编码的电路。
分为高电平输入有效(输入为1时对输入信号进行编码)和低电平输入有效(输入为0时对输入信号进行编码)两种
译码器
将二进制代码表示的信息翻译成相应高低电平信号输出的过程,即编码的逆过程。
变量译码器(二进制译码器)
实现输入变量状态全部组合的译码器,一般称为n线-2^n^线译码器。因为高电平输出有效时,每个输出都为对应的输入变量最小项,低电平输出有效时相反,则其也被称为最小项译码器。
码制变换译码器
显示译码器
用于驱动数码显示器,一种将二进制代码表示的数字、文字、符号以人们习惯的形式直观显示出来的电路
多路选择器
一组输入数据根据选择控制端选出一个作为数据输出。
1.选择功能
8选1数据选择器
2.构造函数发生器
以上图为例,可以通过将D0-D7赋值成0或1来获得Y同A0-A2之间的函数关系。
组合逻辑电路的竞争冒险
左图在门电路延时情况下,在A由1变0的瞬间,~A在短时间内仍为0,使结果产生毛刺现象。
右图同理。
竞争:组合逻辑电路中,不同路径的输入信号变化传输到同一点门级电路时,由于延时的存在在时间上有先后顺序,这种先后形成的时间差称为竞争。
冒险:由于竞争的存在,输出信号需经过一段时间才能达到稳定状态,过渡时间内可能产生瞬间的错误输出,如尖峰脉冲。
产生的原因:门电路的延时
信号在器件内通过连线和逻辑单元时,都有一定的延时。其大小同连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。且信号的高低电平转换也需要一定的过渡时间。
判断方法
1.代数法
逻辑函数F中,若某一变量A同时以原变量和反变量形式存在,逻辑函数在一定条件下(其他变量取特定的值1或0时)可以简化为F=A + ~A或F=A * ~A形式,则此时该电路存在冒险,其中前者存在“0”冒险,而后者存在“1”冒险。
2.卡诺图
在逻辑函数的卡诺图中,函数的每个与项对应卡诺图上的一个卡诺图,若两个卡诺图相切,则相切处将存在冒险。
消除方法
1.修改逻辑设计,增加冗余项,化简为繁
消除互补变量,如L = (A + B)(~ A + C),若直接依此设计逻辑电路,当B = C = 0时,L = A * ~ A,存在“1”冒险。加上一个BC,L = AC + ~AB + BC,消除冒险。对L=AC + ~AB,当B = C = 1时,L = A + ~A,存在“0”冒险,增加BC可以消除冒险。
2.输出端并联滤波电容,消除窄脉冲
==对于速度较慢的组合逻辑电路==,由于冒险产生得到尖峰脉冲一般情况下很窄,则可采用在电路输出端并联电容的方法消除尖峰脉冲。
3.引入采样脉冲
在电路输入端引入一采样脉冲,采样脉冲的作用时间取在电路达到新的稳定状态后,如此一来,逻辑电路的输出端便不会出现毛刺。
时序电路
锁存器和触发器
触发器(Flip-Flop):一种有记忆功能的器件。触发器的级数是指需要多少个触发器来处理序列中的信息,一般来说,序列信息根据二进制数的位数,一位需要一个触发器来储存。
双稳态触发器:
1.有两个互为非的输出Q和~Q,前者为0时称为0态,前者为1时称为1态 。
2.无外加信号时,触发器保存原有状态不变,**n级触发器可记忆n位二进制信息的2^n^种状态。
3.在外加信号作用时,可改变原态。,即具有置0或置1的功能。
4.原态–>次态
SR/D锁存器
1.基本RS锁存器
具有两个稳定状态,可自行保持输出状态。
~ SD和~ RD都为0时,会将Q和~Q都置1导致其不符合两个互非得输出这个条件,因此其为约束条件,即这两个输入不能同时为0,
依据波形图和约束条件得到相应的真值表(将原态也作为一种输入):
得到相应的特性方程:
S ~R+ ~S ~R Q = S ~R(1 + Q)+ ~S ~R Q + ~S ~R S ~R =(S ~R + ~S ~R )(S ~R + Q).
2.钟控RS锁存器
有时钟控制端(为协调各部分电路同步运行)的锁存器称为钟控锁存器
此处时钟信号CP为高电平时原器件保持原有状态,即基本RS锁存器的功能;低电平时,~ SD和~ RD均为1,锁存器输出保持不变,具有数据保存功能。
3.钟控D锁存器
由于输入信号的单线载,如何将输入唯一化?
将RS锁存器输入由R、S双端输入改为单端输入(D),即将S端改为D端输入端,D经过门接R端:
根据当CP=1时D才有影响,此时S经过与非门得到取反,因此改进得到,同时也消除了非门延时的影响:
1 |
|
D锁存器也存在不足:
1.输入 状态不稳定,易产生毛刺,增加下一级电路的不稳定性。
2.锁存器的出现使得静态时序分析变得更加复杂。
不恰当的Verilog代码将会被综合成锁存器。
D触发器
两个反相的D锁存器构成。主从结构:L1(左)为主锁存器,L2为从锁存器。
电路符号中的三角形表示该D触发器是上升沿触发,反之为小圆圈表示其为下降沿触发。
工作原理(CP:0->1):
1.CP = 0:CP1 = 1,L1置值,D->Q1;CP2 = 0,L2保持,Q2不变,则Q不变
2.CP从0->1(T时刻瞬间):CP1 = CP2,D2->Q2(即D->Q1->Q),时钟触发时刻
3.T时刻后,CP=1;CP1=0,L1保持,Q1不变;CP2=1,L2置值,Q1->Q2(因此实际上Q2也保持着上升沿Q1传给其的值),此时输入端D的变化并不会影响Q1和Q2。
D锁存器和D触发器之间的区别,前者是电位触发的,只在CP有效电平期间,触发器状态才有可能发生变化。后者是状态变化只发生在CP的有效沿期间,CP=1或0时触发器状态并不会发生变化。
只用一个D锁存器的实现方式:
在CLK上升沿到来之前,D输入端无论输入任何值触发器状态不会改变,次态等于现态。电路处于保持状态;当时钟上升沿到来时,利用与时钟信号连接的非门产生的短暂延迟,此时CP出现短暂的为1的状态,在这个短暂的CP为1的时间内,电路输出端可以置成D输入端的状态。
带使能端的D触发器
在时钟信号上一般不要设置逻辑,否则可能因延迟导致时序错误。
带复位端的D触发器
reset有效即为1时,D触发器复位(Q=0);反之,触发器正常工作。
JK触发器
在RS锁存器基础上,增加两条反馈线,Q反馈到R钟控门的输入端,R改为K;~Q反馈到S门上,S改为J。
(CP=1时的特性方程很重要)
负边沿触发的JK
利用门电路传输延迟差而引导触发即下图中G1、G2传输延迟大于A、D的翻转时间。
动作原理:
1.CP=0时:G1、G2输出为1,门A、D”封锁“,门B、C构成基本锁存器,~ 𝑆𝐷=1,~ 𝑅𝐷=1,保持功能,Qn+1=Qn,与J、K输入无关。
2.CP=1时:A、D输入分别为~Q和Q,若Q^n^=0,则Q^n+1^=1,保持功能,与J、K输入无关。
3.CP负边沿时:
1)A、D先关闭,但G1、G2还未关闭(对这两个门可以视为CP=1),J、K的状态从G1、G2S输出,由B、C进入基本RS触发器,先完成的是钟控JK触发器的功能。若JK=10,则为置1功能。若JK=01,则为置0功能。
2)此后,G1、G2关闭,输出1,~ SD=1,~ RD=1,触发器执行保持功能,J、K如何变化也不影响。
总结与应用
寄存器是由共享时钟信号CLK的多个D触发器构成的。
例:分析下图中CLK、~ RD信号作用下输出信号Q1、Q2、Q3的频率与CLK频率间的关系:
1.每个D触发器都接成了D=~Q,因此Q^n+1^= ~ Q^n^ ,即每次上升沿时D触发器都要翻转
2.因此Q1的触发时钟是CLK,Q2的是~ Q1,Q3的是~ Q2.假若CLK的频率是f0,则对于由CLK触发产生变化的输出信号来说,前者需要经过两个上升沿即两个周期,才可以使后者出现一个周期上的变化,因此Q1的频率为f0/2,同理,Q2:f0/4,Q3:f0/8.
有限状态机
Moore型有限状态机:输出信号仅与当前状态有关,输出单独根据现态进行组合逻辑的输出
Mealy型有限状态机:输出信号与当前状态及输入信号有关,在构造状态转移电路时将输出也联系进来,即输入会直接对输出产生影响。
状态编码方式的选择:(N个状态的前提下)二进制编码:采用log2N个触发器表示,按二进制顺序编码,但可能产生输出毛刺;格雷编码:采用log2N个触发器表示,但相邻状态只有一个比特位不同,降低输出毛刺的可能,相邻状态间只有一个比特位发生变化,有点像卡诺图的编码顺序;一位热码状态机编码:N个触发器表示N个状态,可避免状态机产生错误的输出,且有时可简化输出逻辑,但逻辑资源消耗大。
时序逻辑电路设计分析
数据寄存器
同步时序电路:所有触发器使用同一个时钟,需改变状态的触发器在同一时刻改变其状态。
同步时序电路分析方法:
异步时序电路:触发器不一定使用同一个时钟,只要接触条件满足就改变状态。
数据寄存器
多位边沿触发器组成来保存一组二进制代码的寄存单元,由同步时钟信号控制,是脉冲敏感型。
例:4位数据寄存器:
并行数据输入,并行数据输出。
1 |
|
锁存器同理,只不过always块的触发条件改为时钟或数据的变化(always @(CLK or Data)
)。
数据锁存器
电位触发器(D锁存器)组成,电平敏感型。
移位寄存器
具有移位功能的寄存器称为移位寄存器,每到达一个时钟脉冲,寄存器中数据就依次左移或右移一位。
例1:4位右移移位寄存器
串行并出:DIR串行输入1011,第4个周期Q3Q2Q1Q0并行输出(只需要将这四位并起来即可)
串入串出:DIR串行输入1011,4个周期后Q3依次串行输出,将原来的数挤出后Q3就会开始串行输出之前串行输入的数。
例2:4位串行输入、串/并行输出双向移位寄存器
S=0,左移:数据从SL端串行输入,顺序左移,4个周期后,串行输入的4位数据全部移入移位寄存器中,可从输出端并行输出,也可继续左移,经由QA端实现串行输出。
S=1,右移,实现方式同例1.
计数器(根据输入脉冲进行计数的器件,不需要输入,但拥有初始值)
用途:计数、计时、定时、分频、产生节拍脉冲(顺序脉冲)和序列脉冲
根据计数器中触发器时钟端的连接方式,分为同步计数器和异步计数器
二进制计数器的模值通常为2的n次方,例如:一个4位二进制计数器的模为16,即可从0计数到15.
同步计数器
特点
1.所有触发器时钟端并联在一起,作为计数器的时钟端
2.各触发器同时翻转,不存在时钟到各触发器输出的传输延迟的积累
3.由于其工作频率只与一个触发器的时钟到输出的传输延迟有关,所
以它的工作频率比异步计数器高
4.由于计数器各触发器几乎是同时翻转的,因此,各触发器输出波形
的偏移为各触发器时钟到输出的延迟之差,同步计数器输出经译码
后所产生的尖峰信号宽度比较小。
缺点:结构比较复杂(各触发器的输入由多个Q输出相与得到),所用元件较多。
例
设计一个同步十六进制数加法计数器,按照0->1->2->……->f->0方式计数,且达到f后进位C置1一个周期
由于计数器的构造结构,二进制计数器也被称为分频器。
异步计数器
比较同步计数器所举的例子,借由异步计数器得到的时序图如下:
每一位状态转换所依赖的tongbujishuq时钟不同。
特点
1.输入系统时钟脉冲只作用于最低位触发器,高位触发器的时钟信号往往是由低一位触发器的输出提供的,高位触发器的翻转有待于低一位触发器翻转后进行 ,因此也被称为串行计数器。
2.因此由于每一级触发器都存在传输延迟,因此计数器工作速度慢,位数越多越慢。
3.对计数器状态进行译码时,由于触发器不同步,译码器输出会出现尖峰脉冲(位数越多,尖峰信号越宽)。
4.优点:结构较简单,所用元件较少
时序电路的时序
建立时间Tsetup:触发时钟边沿之前输入必须稳定的时间。若不满足建立时间要求,数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿数据才能被打入触发器。举例:坐火车需提前到站检票,而不是一到站就可乘坐,需提前到达站的时间就是建立时间。
保持时间Thold:触发时钟边沿之后输入仍需稳定的时间。指在触发器的时钟信号上升沿到来后,数据稳定不变的时间。
建立时间决定了触发器间的组合逻辑的最大延迟,而保持时间决定最小延迟。
Clock-to-Q时间Tctq:从触发时钟边沿到输出稳定的时间。也就是触发器的输出在触发时钟边沿到来后多久时间内发生变化,也即触发器的输出延时。
孔径时间Tsh:Tsetup + Thold,输入信号在孔径时间内必须稳定不变
建立时间分析:
触发时钟边沿到FF1时会锁存输入至FF1.D的数据。在触发器的CLK-to-Q延迟后将数据放在触发器输出FF1.Q上(launch event)。信号以一定延迟通过组合逻辑输出到触发器FF2输入端(arrive time),FF2.D的值在触发时钟边沿到达前变化至少要在触发器的建立时间前。最小允许到达时间为路径required time,FF2数据锁存称为时序路径的capture event。
满足时序约束的时间裕量称为slack。 如果信号早于必要的时间到达,那么slack就是正的。 如果信号恰好在required time到达,则slack为零。 如果信号到达的时间晚于required time,那么slack就是负的。 在所有三种情况下,slack是required time减去arrival time。
总之,在第二个触发时钟边沿到来前,FF2.D数据线上的信号要满足稳定时间>触发器的建立时间即:
Tclk - Tctq - Tcd > Tsetup
同步时序电路时钟周期
时序电路由“寄存器元件+操作元件(组合电路)+寄存器元件”组成
时钟周期TC>=Tctq(从触发时钟边沿到输出稳定的时间)+Tcd(组合电路最长延时)+Tsetup(建立时间)+时钟偏移(由于时钟信号源到各个寄存器部件的连线长度不同等原因引起的各个寄存器时钟信号达到的细微时间差异),Tctq+Tsetup称为时序开销。
保持时间约束:
1.R2有保持时间约束即在时钟上升沿之后的**thold**之内,D2必须保持稳定不变;
2.时钟上升沿后**tctq时,R1的输出Q1将发生变化,该变化经组合逻辑电路延迟tcd**后传播到D2;
3.则thold<=tctq+tcd,否则R2不能正确对上一个时钟周期内形成输入D2进行锁存,因为在保持时间内,D2就发生变化了。tccq是指触发时钟边沿时,输出在时钟到Q的最小延迟
示例:
假定下面的电路触发器时钟到Q的最小延迟和稳定时间分别为30ps(Tccq)和80ps(Tctq),建立时间和保持时间分别为50ps(Tsetup)和60ps(Thold),每个门电路的最小延迟和最大延迟分别是25ps和40ps。(1)该时序电路的最小时钟周期是多少?(2)该电路其功能是否总是正确。
(1).组合逻辑电路最大延迟Tcd=3*40=120ps。所以最小时钟周期为:TC = Tctq + Tcd + Tsetup = 80 + 120 + 50 = 250ps
(2).由于组合逻辑电路的最小延迟为25ps(D的改变最快经过25ps就可能引起Y‘的改变)。需要考虑最快发生改变的情况,因为若在此种情况下都满足约束条件,其他时间更长的情况肯定也满足,Tccq + 25 = 55ps < Thold = 60违反了保持约束,Y’值不能保持足够长的稳定时间,所以Y值实际上不可预测。
总结
每种类型的时序检查(建立时间和保持时间)都考虑了不同的最坏情况。
一个setup检查考虑最长的组合逻辑和最慢的数据路径,因为最大延时情况下,数据很有可能在下一个时钟周期触发边沿后到达定时元件。而hold检查则考虑最短和最快的数据路径,因为在最小延时下,数据很有可能无法保持到本周期上升沿到达定时元件时。
因此Tcd的范围为:
Tc-Tctq-max-Tsetup(不考虑时钟偏移) >= Tcd >= Thold - Tctq-min
。
主存储器
存储系统
介质分:半导体(RAM、ROM)、磁介质、光盘
访问方式分:随机访问存储器(RAM)、只读存储器(ROM,不能修改只能读,访问模式也是随机的,断电后信息仍保持,存储BIOS相关信息)、顺序访问存储器(Tape)、直接访问存储器(Disk)
功能分:高速缓冲存储器(Cache、快存)、主存储器、辅助存储器(外存)、控制存储器
二级存储系统:Cache+主存
静态随机访问存储器SRAM
供电情况下信息能一直保持,不必刷新,集成度低,军用或公共采用(抗干扰能力强),用作Cache存储器
动态随机访问存储器DRAM
供电情况下内部情况不稳定,需要每隔一段时间刷新一次,集成度高,基本所有家用内存都采用,用作主存储器,
SDRAM
同步DRAM,与系统总线时钟同步,避免了不必要的等待周期,减少数据存储时间,数据可在脉冲上升期便开始传输。SDRAM内存又分为PC66、PC100、PC133等不同规格,相应带宽分别为528MB/S、800MB/S和1.06GB/S。
DDR
双倍速率SDRAM,SDRAM只在一个时钟的上升期传输一次数据,而DDR则在一个时钟的上升期和下降期各传输一次数据
DDR2
DDR4
ROM
固定掩膜(Masks)ROM、PROM、EPROM(紫外线可擦可编程ROM)、EEPROM(带电可擦可编程ROM,CIH)、Flash Memory(闪存,本质上属于电擦除可编程ROM,用作BIOS存储器,图形卡、硬盘控制器)
存储单元电路
SRAM单元电路(六管单元电路)
T1、T2:工作管;T3、T4:负载管;T5、T6:门控管
稳定状态:“1”:T1截止,T2导通;“0”:T2截止,T1导通
保持状态:字选线低电平,T5和T6截止,内部稳定
读出操作
字选线高电平,T5和T6导通,若存储单元存储信息是“1”,D线则“读出”内部状态(A点电平)则为高,否则为低。(字选线为高电平时,T5导通,等价于A点同D相连)
写入操作
写1:D高电平,~D低,字选线高电平,T5和T6导通,T1截止,T2导通,写入1.
写0:D低,~D高,字选线高电平,T5和T6导通,T1导通,T2截止,写入0.
DRAM单元电路(单管单元电路)
Cs<<Cd,Cs上有电荷表“1”,反之表“0”,保持状态:字选线低电平,T截止,理论上内部保持稳定状态
注意:在保存二进制信息“ 1 ”的状态下,Cs有电荷,但Cs存在漏电流,Cs上的电荷会逐渐消失,状态不能长久保持 ,在电荷泄漏到威胁所保存的数据性质之前,需要补充所泄漏的电荷,以保持数据性质不变。这种电荷的补充称之为刷新(或再生)。
读出操作
D线先预充电到2.5V,然后字选线置高电平,T导通。
若电路保存信息1,Vcs=3.5V,电流方向从单元电路内部向外;
若电路保存信息 0,Vcs=0.0V,电流方向从外向单元电路内部;
因此根据数据线上电流的方向可判断单元电路保存的是 1还是 0。读出过程实际上是Cs与Cd上的电荷重新分配的过程,也是Cs与Cd上的电压重新调整的过程。Cd上的电压,即是D线上的电压。
写入操作
字选线置高电平,T导通;写1时,D线高电平,对Cs充电;写0时,D线低电平,Cs放电。
ROM(固定掩膜只读存储器)单元电路
由于其不可修改的特性,电路不存在状态的改变,因此可以通过相应器件的存在与否来表征1或0。
PROM(一次性可编程ROM)单元电路
出厂时所有位均为1,即上图状态。编程时(写入数据),对写0的单元加入特定的大电流,将熔丝烧断,变为表示0的状态,不可恢复。工作时加入正常电压。
EPROM单元电路
出厂时所有位均为 1,FAMOS(浮空栅极MOS)FG(浮空栅极)无电荷,处于截止状态。
编程时(写入数据),对写0单元的CG(控制栅极)加入特定高电压,FG与漏极之间形成正向强电场,电子从漏极通过隧道氧化层进入FG。撤销编程电压后,FG上聚集的电子不能越过隔离层,FAMOS导通,表示0。
工作时,加入正常电压,FAMOS 的状态维持不变。
擦除时,用紫外线照射,FAMOS聚集在FG上的电子获得能量,越过隔离层泄漏,FAMOS恢复截止状态。
EEEPROM单元电路
总结
一般化的表示。
MIPS单周期CPU
单周期数据通路和控制器设计
单周期性能分析
R型指令的周期
取指令(IM Access Time)、读寄存器(Register File Access Time)、ALU运算、写寄存器
lw指令周期
取指令、读寄存器、ALU运算、读数据、写寄存器
假设主要功能单元的操作时间:
存储器访问:tmem
ALU运算:tALU
寄存器堆堆读、写:tRFR,tRFW
多路开关、符号扩展、移位延迟:tmux,tse,tsh
寄存器性能指标:tCTQ、tSetup
则最长指令为lw:TClw = tCTQ + tmem + max{tRFR, tse + tmux} + tALU + tmem + tmux + tRFW + tSetup
单周期存在问题及解决方法
单周期会浪费部分时间,CPU存在空闲的时间,性能并没有充分发挥。(想象你是一个资本家)。
若采用可变时钟周期,时间性能比单周期更高,但控制比单周期要复杂、困难。
改进方法:将时钟周期定义为一个执行步骤所需的时间,按每种指令执行的实际步骤安排指令周期所用的时钟数,即采用多周期实现。
MIPS多周期数据通路设计
方案
指令执行分解成多个步骤,每一步一个时钟周期,则指令执行周期为多个时钟周期,不同指令执行的时钟周期,不同指令执行的时钟周期数不同。
总体考虑
普林斯顿结构:指令和数据使用同一个寄存器。
一个ALU:R型指令算术逻辑运算、取指令后形成PC+4新值、及Beq指令转向地址计算(PC+Signext(imm16)<< 2),每一个指令的相关运算操作均在ALU中实现。
多周期同步:一个时钟周期内信号总是从一个状态单元经过组合逻辑处理后传送到另一个状态单元。所以指令每一个周期的通路总是从前一个状态单元输出,经过功能单元处理,在下一个时钟周期触发沿将结果写入下一个状态单元,因此数据通路种需要增加一个或多个寄存器以保存指令各周期执行的结果,以便在后续时钟周期内继续使用。
主要部件:
将每种数据通路的可独立为单一操作的通路作为一种有限状态机的一种状态,将控制信号器作为一个有限状态机,指令为输入,相应每个周期进行的数据通路所需要的控制信号为输出,进而通过状态的转移完成将每一条指令分布在多个周期中完成。
流水线
原理
1.时钟周期等于最长步骤所花时间为:200ps
2.指令执行分5步(5级流水)(取指、译码读寄存器、运算、访存、回写),每步一个时钟周期,共 1000 ps
3.N条指令的执行时间为:(1000+200*(N-1))ps
4.在指令数N很大时,比单周期方式提高约 4 倍
5.指令数N很大时,CPI ≈ 1
MIPS流水线数据通路
以单周期数据通路为基础(IM、DM独立),数据通路分IF、ID、EX、MEM、WB5段流水线,每一步执行需要的数据全来自前一个寄存器的输出,经本段功能单元处理后,在下一个时钟周期触发沿将本段处理结果写入下一个寄存器,因此数据通路中需要增加多个寄存器以保存各流水段处理结果,以便在后续流水段内继续使用。这样的寄存器称为流水线寄存器
增加寄存器:IF级:PCF(存储取指阶段的PC)/IRF(存储指令);ID级:PCD(存储译码读寄存器阶段时的PC)、R1D(读出的第一个寄存器的值)、R2D、IMD(存储立即数)、WAD(译码阶段的写入寄存器地址);EX级:PCE(存储运算阶段的PC)、AOE(运算阶段的ALU运算结果)、WDE(存储写入内存数据)、WAE(运算阶段的写入寄存器地址);MEM级:MDM(内存读出的数据)、AOM(访存阶段的ALU运算结果)、WAM(访存阶段的写入寄存器地址,为了方便最终的回写阶段的正常进行)。
可以理解为将GRF读端口与写端口分开。最后的寄存器堆是W阶段的流水线寄存器堆。
流水线寄存器:
前级/后级
控制信号
每个控制信号只在所需要的流水阶段发生作用,因此需要设置寄存器将下一个阶段需要的控制信号在该阶段存储起来。
流水线冒险
流水线相近指令出现某些关联,下一个时钟周期不能执行下一条指令,流水线出现停顿。
结构冒险
硬件不支持多条指令在同一个时钟周期执行。例如:寄存器堆的写操作和读操作同时进行可能会带来数据冒险问题。
数据冒险
相邻指令间存在数据依赖的情况,如:后面指令的执行需要使用前面指令的结果,但此时结果尚未形成,将带来数据冒险。
add $2, $3, $5
add $4, $9, $2
处理策略
旁路转发
1.R类型Rd(写入),后续指令Rs或Rt(读)(对于同一寄存器)
2.load指令Rt(写入),隔条指令Rs或Rt(读)
可以通过利用控制信号MemToReg的选择进行两种转发(AOM到GRF,MOM到GRF)的综合。
3.同一时钟写和读同一个寄存器,先写后读,读操作需要在时钟周期内获得值,而写操作是在下一个时钟周期的上跳沿写入,则读操作获得的数据仍为旧值,有错误。因此,可以通过在写入操作时将相应写入操作改成下跳沿写入(加上一个非门),而如此在时钟周期内,新值能够保持稳定,是读操作得到正确的值。
4.load指令Rt(写入),下一条指令Rs或Rt(读):不可直接将DM输出端开一条转发通路到ALU输入端,这样可能会导致整个时钟周期被拉长,会造成更大的时间开销。应该通过阻塞当前指令使紧挨的两条指令转换为隔一条指令,等效于加入一个nop空指令。如何插入:使当前的E级流水线寄存器堆的值清空(等价于传入一条nop空指令),使D级流水线寄存器阻塞即(使能端置0),使F阶段的PC寄存器阻塞(防止下一条指令进入,即使能端置0).
控制冒险
高速缓冲与虚拟存储
高速缓冲存储器(Cache)
存储访问的局部性特征
时间局部性
刚被访问存储单元可能不久再(下几个时钟周期内)将被访问
空间局部性
刚被访问的存储单元的物理空间上临近单元可能不久被访问。
存储系统层次结构
主存用DRAM,在CPU和主存间设置一容量小速度高的存储器(SRAM),存放最活跃的程序和数据——Cache,保存最近访问的数据以提高时间局部性,以块为单位在CPU与Cache间交换数据提高空间局部性。
Cache工作原理
Cache需要解决:快速访问、数据交换、地址判断、替换决策的问题。
基本结构:
采用SRAM构成存储结构,保存与存取数据。以Block为单位;多个字节组成,取决主存一次读写操作能完成的数据字节数
地址比较机制,地址标记(Tag),保存数据块对应的主存数据块地址信息,一block一tag
记录block使用情况,有效位(v)记录对应数据块数据是否有效
一个block、tag、valid bit构成一行(line)
若干块构成一组,地址比较一般能在组内各块间同时进行
路(way):Cache关联的等级,每一路有独立的地址比较机构,各路地址比较能同时进行,路数即一组内的块数。
命中率(目标数据在Cache中存储访问的比例)、缺失率(不在)
Cache读操作:
Cache映射机制
主存块与Cache块的映射方式:全相联、组相联、直接映射
全相联
每个主存块映射到任一Cache块中,每个Cache数据块均可接收来自主存中的任一块中的数据。同时与所有Cathe块的Tag比较,Cache有多少块,就需要多少个比较器,数据访问与比较并行运行。相当于M路组相联
组相联
Cache含M块,分K组,每组含L块,M = K*L;
主存块J按$I = J mod K$的方式映射到Cache组I中任意块,因此主存块到Cache块的映射是1:L
的映射。
对于内存1MB,4路组相联(每组4个Block)
直接映射
相当于1路组相联
主存地址格式
Cache替换
缺失
替换策略
最近最少使用法(LRU):记录每一个数据块的相对使用情况,最近没有被使用的块被替换。
最小使用频率法(LFU):记录每一个数据块的使用频率,使用次数最少的被替换,队列模型,越近被访问的越靠近队列顶端,越靠近队尾越易被替换。
先进先出法(FIFO):最先装入数据的块被替换
随机法:随机选择一个数据块进行替换
性能分析
Cache性能计算
Cache命中率问题
与大小、映射方式和替换策略有关。一般而言,增加块尺寸可以降低缺失率(空间局部性),但块尺寸达到一定程度时,缺失率反而会随尺寸增加而上升(块数量下降带来块替换的增加)
存储系统分层次与速度差异
虚拟存储系统
局部性原理:某个时间,只需要一部分活跃的程序和数据。
内存管理采用交换技术和分区(或分页)机制,进程保存在辅存中,进程执行时,只将其活跃部分调入内存。这样一种将主存当做辅存的高速缓存的技术即是虚拟存储技术。
采用虚拟地址(用户程序空间)访问内存,虚存驻留在辅存,基于局部性原理调入。
同一虚页可以加载到内存不同位置:重定位技术。
虚拟存储器能从逻辑上为用户提供一个比物理内存容量大得多、可寻址的“主存储器”。
虚拟存储器的容量与物理主存大小无关,由MMU(存储管理单元)和OS存储管理共同管理。
虚拟存储管理模式
简单分区模式
操作系统固定、用户区分区,可能浪费主存空间。
可变分区模式
开始不错,但越往后执行,存储器中会存在多小空块,使存储器利用率降低。
页式虚拟存储
内存按照固定大小分页(存储页,实页),每个进程按相同大小分页(程序页,虚页)
页式虚拟存储其地址转换:
逻辑地址:程序中指令所使用地址,称为虚地址。(高位为虚页号)
物理地址:内存中存放指令或数据的实际地址,实地址,高位为实页号。
页表:记录虚页与实页的映射关系,实现虚实地址转换,内存中,操作系统为每道程序建立一个页表。==页表以虚页号作为索引,页表项包括虚页对应的实页号和有效位。==
**页表基址寄存器(PTBR)**:保存进程页表在内存中首地址,操作系统为活跃进程设置PTBR。
虚拟地址到物理地址的转换
页式虚拟存储器访问流程(结合Cache)
加快地址转换,采用快表TLB(转换后备缓冲器):
问题:每次虚拟存储器访问带来两次存储器访问,一次页表,一次所需数据,简单虚拟存储器速度慢。
解决方法:使用Cache存储部分活跃的页表项,即TLB,包含了最近使用的页表项。
TLB一般采用全相联:标记(虚页号)、数据块(实页号)、有效位、修改位。一般情况下,虚页号的位数比实页号更大通过虚地址到实地址的映射实现存储的放大。
外部存储与输入输出系统
硬磁盘基本结构
盘面、磁道、扇区(磁盘数据读写最小单位,一般512-4096字节,默认512字节,每个磁道含有相同数量扇区,地址由柱面号、磁头号和扇区号组成)、柱面
RAID
包括六种不同模式:RAID0、RAID1、……RAID5
RAID0
无差错控制的带区组,虽然没有冗余,但是仍归在RAID家族中。
RAID1
镜像结构,简单镜像磁盘冗余方案,成本高。出现磁盘损坏时,数据恢复简单。
RAID2
带海明校验,数据按较小的条带(一个字或一个字节)分布在不同的磁盘上,根据磁盘数据计算错误校验码(如海明码)。
RAID3
带奇偶校验码的并行传送。
RAID4
带奇偶校验码的独立磁盘结构。
RAID5
分布式奇偶校验的独立磁盘结构。
固态盘
用闪存存储数据,相比HDD具有更快的读写速度、更低功耗和更高可靠性。
软盘
CD-ROM
凹点(Pit)表示0,Land表示1.
等线速度方式:一个螺旋环环绕22188次(600环/mm,长度约5.6km长)。
数据格式:
DVD
与CD-ROM差别:Pit直径更小,环绕密度更高,0.65微米波长红色激光(CD是0.78微米的红外微光)
总线
连接计算机硬件功能部件的一组公共的并行传输信号线缆,用于各功能部件间进行信息传输。
分类
片内总线
系统总线
数据总线
地址总线
控制总线
数据传输控制信号、总线请求和交换信号、其他控制信号:时钟、复位、电源线
通信总线
常用总线
ISA(工业标准体系结构)、EISA(扩展的ISA)、PCI(外部设备互连)、USB、USB TYPE-C
总线的传输控制
总线传输过程:请求、寻址、传输、结束
总线事务:(一般)包括一个寻址和一个传输阶段,突发传送事务(一个寻址和多个传输阶段)
总线仲裁方式
链式查询方式
总线仲裁器收到总线申请BR、BG(总线允许信号)逐个往下传。若某接口有总线申请,BG停止下传。该接口获得总线使用权,建立总线忙信号。近水楼台先得月。
计数器定时查询方式
总线仲裁器收到总线申请BR后,内部计数器开始计数,当某个有总线申请的设备地址与计数器计数一致,就获得总线使用权,建立BS。
独立请求方式
总线通信的控制方式
采用握手协议进行数据传输的完成。
有全互锁(三次握手)、半互锁(两次)、不互锁(一次)三种时序。
可能存在从设备回传应答信号线的损坏或主设备发出请求信号线的损坏。
I/O接口
外设不直接接挂在系统总线上,而是通过I/O接口为桥梁实现与系统总线的连接。
功能
设备寻址、数据交互、设备控制、状态检测、数据缓冲、格式转换
分类
按传送数据格式
串行接口(速度低、传输距离长)、并行接口
按I/O方式
程序查询接口、中断接口、DMA接口、通道控制接口
按时序控制方式
同步接口、异步接口
编址
独立编址(现在比较普遍,存储器地址与I/O地址分开,CPU拥有专用的I/O指令,系统总线中有区别存储器读写和I/O操作的控制信号)、统一编址(存储器地址与I/O地址统一考虑,地址空间的一部分是存储器,另一部分为I/O,支持存器操作的指令都可用于I/O操作)
自动化与命令行操作小技巧
打包当前文件夹下拥有统一后缀的所有文件
利用编写Python脚本的方式,打包当前文件夹下的所有拥有统一后缀的文件。
Python代码示例:
1 |
|
将上述python代码复制粘贴至.txt
文件中后扩展为.py
文件,并复制到相应文件夹内,通过命令行的方式运行该脚本,即可实现打包当前目录 (.
) 下所有以 .txt
结尾的文件压缩到 myarchive.zip
中。如想要实现打包其他后缀名的文件只需要修改.txt
为对应的后缀即可。