1 CPU的用途字长:8位 D[7…0]寻址范围:64byte,2的6次方=64,A[5…0]2 确定ISA(包括程序员可访问的寄存器)1)程序员可访问的寄存器 AC—8位累加器CPU的指令集(共4条)2)其他寄存器3 CPU设计状态图为了确定CPU的状态图,对每条指令作以下分析1)从存贮器中取指令(所有指令均相同)原理:在CPU能执行指令之前,它必须从存贮器中取出,CPU通过执行如下的操作序列完成这个任务A)选择存贮单元由A[5…0]确定B)对工A[5…0]译码,延迟,并向存贮器发一个信号使存贮器将此指令输出到它的输出引脚。
这些引脚与CPU的D[7…0]相连。
CPU从这些引脚读入数据。
具体操作:(分为三个状态)A)要取的指令的地址存放在程序计数器(PC)中。
第一步就是把PC的内容拷贝到AR中。
FETCH1:AR←PCB)CPU必须从存贮器中读取指令,为此CPU必须发一个READ信号到器的RD (RD-RAM,相对于OE-ROM)端上使存贮器将数据发送到D[7…0]上,存入CPU的DR寄存器中。
同时实现PC←PC+1,为取下一条指令作准备。
FETCH2:DR←M,PC←PC+1C)作为取指令的一部分,CPU还必须完成两件事。
①DR的高2位拷贝到IR,目的是确定指令的功能②DR的低6位拷贝到AR,目的:a. 对于ORT和SUB1指令这6 位包含了指令的一个操作数的存贮器地址(一个数已经在AC)b. 对于COM和JREL,它们不需要再次访问存贮器,一旦它们返回到FETCH1周期,FETCH1将把PC的值装到AR,覆盖无用的值。
FETCH3:IR←DR[7,6], AR←DR[5…0]取指令周期的状态图2)本CPU有四条指令,因此有四个不同的执行同期,为此用IR中的值来确定即可。
3)指令执行(每条指令的执行周期都是一样的)每条指令的执行周期的状态分析:1.COM指令功能是对AC的内容取反,执行周期的状态是COM1:AC←AC’2. JREL指令代码为01AAAAAA,即转移的相对地址由AAAAAA确定,而AAAAAA在DR[5…0]中,所以有JREL1:PC←PC+ DR[5…0]3.OR指令为了执行指令,必须完成两件事情OR1:DR←M;从存贮器取出一个操作数送到数据寄存器OR2:AC←AC∨DR;与AC相或,并把结果存回AC中4. SUB1指令为了执行指令,必须完成两件事情SUB11:DR←M;从存贮器取出一个操作数送到数据寄存器SUB12:AC <- AC + DR';对DR取反,等于-DR-1综上所述可知CPU的完全状态图如下4 设计必要的数据通路和控制逻辑,以便实现这个有限状态机,最终实现这个CPU。
状态图以及寄存器的传输说明了实现本CPU所须完成工作(方法和步骤如下)1)与CPU的每个状态相关联的操作(共九个状态)FETCH1:AR←PCFETCH2:DR←M,PC←PC+1FETCH3:IR←DR[7,6], AR←DR[5…0]COM1: AC←AC’JREL1:PC←PC+ DR[5…0]OR1:DR←M;OR2:AC←AC∨DR;SUB11:DR←M;SUB12:AC <- AC + DR'2)建立数据通路的原理和方法A.存贮器是通过引脚D[7…0]将数据送给CPU。
B.存贮器的地址是通过地址引脚A[5…0]从AR中获得的。
于是CPU与存贮器之间要A[5…0](地址)和D[7…0](数据)通路,如下图3)总线类型的确定方法原理:首先把操作数重新分组,依据是指导修改同一个寄存器的操作分配在同一组。
AR:AR←PC ,AR←DR[5…0]PC:PC←PC+ DR[5…0],PC←PC+1DR:DR←M,IR:IR←DR[7,6],AC:AC <- AC + DR',AC←AC∨DR,AC←AC’决定每个部件应完成的功能a>AR, DR, IR,AC总是从其他一些部件中装入数据。
若数据已在总线上,则需要做的是能够执行并装入操作。
(LD端口分别是ARLOAD,DRLOAD,IRLOAD,ACLOAD信号同步装入)b>PC能从其他一些部件中装入数据,还有相应的自增(INC)当前值,所以应创建一个单独的硬件使之能自增。
(端口有PCINC,PCLOAD)4)把每个部件都连接到系统总线上三态缓冲区——原有的寄存器部是把结果输出到系统总线,使CPU内部数据冲突,所以应增加三态缓冲区加以控制,但AR的输出还应与A[5…0]相接,这是寻址所需。
5)根据实际需要修改上图的设计,并加上适当控制信号名称1.AR :仅向存贮器提供地址,没有必要将它的输出连接到内部总线上,加上ARLOAD实现从BUS装入数据。
2.AR←PC :保留三态缓冲器由PCBUS控制同步3.IR :不通过内部总线向任何其他部件提供数据,而IR的输出将直接送到控制器用于确定指令的功能4.AC:本CPU不向其他任何单位提供数据5.DR[7…0]:不统一,有6位也有2位宽度,必须确定哪些寄存器从总线的哪些位上接收和发送数据。
应有DRBUS实现同步。
DRLOAD实现LD6.AC:必须能装载AC + DR'的和,以及AC∨DR与AC’的逻辑与结果。
CPU必须包含一个能产生这些结果的ALU,并由ACLOAD实现装入。
7.PC:必须能装载PC+ DR[5…0]的和。
CPU必须包含一个能产生这些结果的ALU 并由PCLOAD实现载入,而PCINC实现PC←PC+1ALU的设计1)ALU1(与PC相连)的设计数据通路的分析:功ALU1必须接收PC和DR作为输入,然后把运算结果输出到PC实现PC←PC+ DR[5…0]在本CPU中,把PC的导线和ALU的输入输出相连起来,并且利用系统总线把DR和ALU的输入连接起来。
用计数器来实现PC←PC+1操作,就可以在FETCH2内完成,因为计数器不必占用总线的时间。
2) ALU2(与AC 相连)的设计在本ALU 的设计中AC 和ALU 的输入输出连接,并且利用系统总线把DR 和ALU 和输入相连起来。
( [ALUS1,ALUS2]=[0,0], 选AC ←AC’,[ALUS1,ALUS2]=[0,1],选AC ←AC ∨DR , [ALUS1,ALUS2]=[1,0],选AC <- AC + DR', )用硬布线的方法设计控制器 组成:计数器:保存当前状态DRTO PC共有9个状态(四条指令,共有9个状态)所以需要一个四——16位译码器,译码器中有7个状态没用到。
译码器:接收当前状态并为每个状态生成单独的信号逻辑组合:接受单独的状态信号,为每一部件生成控制信号以及计数器的控制信号原理图:计数器与译码器的设计:1. FETCH1状态:规定计数器的0值,使用计数器的CLR=1到达这一状态。
(指令执行完毕后,转入的取址状态。
)2. 将顺序状态设定为计数器的连续值,用INC实现。
3 利用IR映射1 [IR]0来确定指令的执行如下表指令的执行FETCH1――――――――――――――――0FETCH2――――――――――――――――1FETCH3――――――――――――――――2COM1: ――――――――――――――――8JREL1:――――――――――――――――10OR1:――――――――――――――――12OR2:――――――――――――――――13SUB11:――――――――――――――――14SUB12:――――――――――――――――15计数器控制信号的确定LD:在取址周期的FETCH3状态中发出,进入执行周期的第一个状态(装载1IR[]0进入指令的正确执行周期)FETCH3:IR←DR[7,6], AR←DR[5…0]INC:CLR:如上图所示根据译码器的输出信号组合后产生CPU中寄存器的有关信号1ARLOAD(装载地址寄存器的控制信号)FETCH1:AR←PCFETCH3:AR←DR[5…0]2PCLOAD PCINCPCLOAD =JREL1: PC←PC+ DR[5…0]PCINC =FETCH2:PC←PC+13DRLOAD(实现DR←M)FETCH2+OR1+SUB114ACLOAD (实现AC←AC’, AC←AC∨DR,AC <- AC + DR')ACLOAD=COM1+ OR2+ SUB125IRLOAD= FETCH36 ALUS1,ALUS2与AC相连的ALU有两个控制信号[ALUS1,ALUS2]=[0,0], 选COM1: AC←AC’[ALUS1,ALUS2]=[0,1],选OR2:AC←AC∨DR;[ALUS1,ALUS2]=[1,0],选SUB12:AC <- AC + DR'ALUS1= SUB12ALUS2= OR2缓冲器控制信号许多操作需从内部总线上获取数据,CPU必须能控制缓冲器以便在合适的时间将正确的数据放到总线上,为此应满足如下逻辑关系。
MEMBUS= FETCH2+ OR1+ SUB11PCBUS= FETCH1READ= FETCH2+ OR1+ SUB11DRBUS= FETCH3+ JREL1+ OR2+ SUB12部分电路图如下:COM1 OR2 SUB12设计验证1.程序段如下所列[存贮单元:指令]0: COM1: JREL 02 OR 43: SUB 54 20H5: 30H2. CPU遵循状态图并以合适的状态顺序取出、译码和执行每条指令:COM: FETCH1→FETCH2→FETCH3→COM1JREL 4: FETCH1→FETCH2→FETCH3→JREL1OR 5: FETCH1→FETCH2→FETCH3→OR1→OR2SUB 6: FETCH1→FETCH2→FETCH3→SUB11→SUB122.对这段程序的一次循环的跟踪情况(所有寄存器的初始值都是0)用微程序控制器设计一微程序控制器的基本框图两种可能的下址方式(由MUX 实现选择)S =1―――操作码映象(经指令译码进入下一条指令的执行周期) S =0―――绝对跳转(下一条要执行的微指令在控存内) 工作原理分析描述1) 确定微子程序的第一条指令入口地址。
方法是根据取批中的最后一个状态FETCH3,便可转入到四条指令中任一条执行周期的第一条微指令入口,但必须通过MAP 输入来实现 2) 下址的确定绝对跳转:可直接跳转到FETCH1状态 当前地址加1。
3) 几个参数的设定控存中地址的倍数24=16>9因共有9 条微指令,可用四位 MUX →微地址寄存器,微地址寄存器→控存 24=16>9用四位 确定UPOS 的位数4二生成正确序列并设计映象逻辑1. 给有限状态机的每一种状态分配一个控存地址利用IR映射1 [IR]0来确定指令的执行如下表2.其余微指令的地址微程序控制器的状态地址FETCH1――――――――――――――――0FETCH2――――――――――――――――1FETCH3――――――――――――――――2COM1: ――――――――――――――――8JREL1:――――――――――――――――10OR1:――――――――――――――――12OR2:――――――――――――――――13SUB11:――――――――――――――――14SUB12:――――――――――――――――153. 确定微指令中的选择域和地址域,即生成正确的微指令执行顺序1)一般状态转换设SEL=0,ADDR为下一条指令要执行的控存号,一个微指执行完后,从ADDR中得到下址,转到ADDR指定的微指令2)特别状态FETCH3下址的确定当FETCH3执行完后,必须到指令执行周期的微子程序入处,根据1IR[]0所算出的结果三生成正确的微操作及相应的控制信号用水平型微指令生成微操作及用垂直型指令生成微操作本CPU采用水平型微指令生成微操作法微操作及它们的助记符由于IRDR和ARDR在同一个微操作进行,可以对他们进行合并为AIDR来表示。