1、1,计算机组成原理教学课件王 诚 教授 清华大学计算机系2009年10月,2,第章 计算机的控制器部件,.1 控制器的功能、组成和指令执行步骤概述.2 硬连线控制器部件.3 微程序的控制器部件.4 指令流水线的概念和实现技术,3,、控制器部件概述,冯. 诺依曼结构的计算机“存储程序”计算机,设置内存,存放程序和数据,在程序运行之前将程序调入内存,然后执行程序。 计算机的功能是执行程序程序是依次排列起来的指令序列 计算机执行程序的基本过程从程序首地址开始执行第一条指令分步执行每一条指令,并形成下一条待执行指令地址自动地连续执行指令,直到程序的最后一条指令,4,控制器的功能概述,控制器的功能就是控
2、制指令的执行过程 能够正确并且自动地连续执行指令按程序中设定的指令次序执行 能够正确并分步完成每一条指令规定的功能读取指令 分析指令 执行指令能够在执行程序的过程中响应并处理中断 使计算机得以更有效的地兼顾多项工作进一步讲,就是向计算机各功能部件 (运算器、存储器、总线、输入输出设备的接口,也包括控制器部件本身) 提供它们执行指令过程中每一个步骤运行所需要的控制信号。,5,控制器的组成概述, 程序计数器 PC存放指令地址,有 增量 或 接收新值的功能 指令寄存器 IR存放指令内容:操作码与操作数地址 指令执行步骤标记线路指明每条指令的执行步骤和相对次序关系 控制信号产生线路给出计算机各功能部件
3、协同运行所需要的全部控制信号,主脉冲源与启停控制线路,6,控制器组成和在整机中的地位,在计算机硬件系统中,控制器处于指挥控制地位,7,两种不同类型的控制器,根据指令步骤标记线路和控制信号产生线路不同的组成和不同的运行原理,有两种不同类型的控制器:硬连线控制器(组合逻辑控制器):采用组合逻辑线路、依据指令及其执行步骤直接产生控制信号。微程序控制器:采用存储器电路把控制信号存储起来,依据指令执行的步骤读出要用到的信号组合。,8,时序控制 信号 形成部件,译码,IR,PC,节拍,启停,.,控制条件,控制器信号,主振,硬连线控制器,地址寄存器,输出 设备,输入 设备,主 存,运算器 部件,数据总线,地
4、址总线,控制总线,9,、硬连线控制器组成与运行原理,硬连线控制器由程序计数器PC、指令寄存器IR、节拍发生器Timer 和 控制信号产生部件CU 4 部分组成PC用于提供待读出指令在主存储器中的地址,IR 用于保存从主存储器中读出的指令内容,Timer 用于给出并维护指令执行步骤的编码,控制信号产生部件用于依据指令内容(在IR中)和指令执行所处的操作步骤(Timer 提供),用组合逻辑线路产生计算机本操作步骤中各个部件所需要的控制信号。划分指令执行步骤,确定各步骤应执行的功能和步骤之间的衔接关系,以及确定各部件完成这些功能所需要的控制信号,是控制器设计的几个关键环节。,10,硬连线控制器组成与
5、运行原理,如何划分指令执行步骤,是由指令的格式、功能和计算机结构决定的。已经说过,一条指令的执行过程包括读取指令、指令译码、指令执行 等几个步骤,而且读取指令公用于所有指令,指令译码步骤对不同指令差异也不大,不同指令执行上的主要差异表现在指令执行这一步骤,如具体用到几个操作步骤、具体完成何种功能,需要遵照指令本身的功能要求来安排指令中最常用到的操作功能主要是:累加器之间的数据运算或传送 (1步完成),存储器 或 入/出设备读写 (2步完成) ,改变指令执行次序 ( 1或2步完成 ) 等几种基本类型,11,硬连线控制器组成与运行原理,划分指令执行步骤,与分配各步骤应执行的功能以及步骤之间的衔接方
6、案密切相关,是由指令的总体功能决定的,各步骤的执行次序有严格的逻辑关系,在简单的、指令完全串行执行的多周期 CPU系统中,这个关系是简单而明确的。例如,执行指令的前提是先得到指令,因此执行指令的第 1个动作只能是取指步骤,之后进入译码步骤;接着执行指令具体功能,例如寄存器之间的数据运算或传送,读写主存或 I/O接口(要先送地址,之后才能开始读写操作)。在这个期间还要形成下条指令的地址,如此等等。力争用最少的执行步骤完成每条指令的功能是设计多周期 CPU 的控制器的原则之一。,12,硬连线控制器组成与运行原理,在多周期 CPU 系统中, 要按照指令总的功能要求,把不同的功能序列划分到相应的步骤,
7、再落实到不同的部件,控制器需要按照指令及其执行步骤,为计算机各个部件提供它们协同运行所需要的控制信号。向各部件提供哪些控制信号,决定于各部件的运行要求。为此必须规划汇总各部件在各个执行步骤中要求使用的控制信号。例如,教学机的运算器要求使用 23 位控制信号,控制器就必须按照运算器的运行要求如实提供。控制器同样需要向主存储器、接口电路、总线电路、也包括控制器部件本身提供相应控制信号。这些信号是用组合逻辑电路产生的,可以表示为: 信号i = f (指令内容, 执行步骤 等),通常表现为多个由与、或两级逻辑构成的表达式。,13,指令执行步骤标记:节拍发生器,前面已经说到,一条指令的执行时间被称为指令
8、周期,一个指令周期通常由几个 CPU 周期组成。指令的总体功能被分配在这几个 CPU 周期依次完成,每个周期完成指令的一部分功能。不同指令依据其功能的复杂程度,将使用不同数目的CPU时钟,会造成CPU周期有不同的衔接次序。为此需要设计专门的电路,实现时钟周期的切换和衔接。这个电路是用触发器构成的时序逻辑电路,以有限状态自动机原理运行。若把各时钟周期与有限状态自动机的一个选定状态相对应,则自动机的状态转换就是时钟周期的切换与衔接关系。有的计算机又把一个 CPU周期划分几个更小的执行步骤,称其为节拍。也可以使一个CPU周期就是一个节拍,则可以把实现CPU周期转换的电路叫做节拍发生器(Timer/T
9、iming)。,14,硬连线控制器特点,用与-或两级构成的逻辑电路生成控制信号 线路延时小,指令执行速度快 适合实现比较精简的指令系统(早期) 常用于实现 RISC 机 (当前) 较容易实现并行 可扩展性差,制作系列机时较难实现 下面以TH-FPGA教学计算机系统为例, 讲解硬连线控制器,15,3、TH-FPGA计算机硬件系统TH-FPGA是一台16位字长、指令系统与TEC-2008 计算机保持一致的计算机系统。 CPU 的功能使用VHDL语言描述,并在单个芯片的FPGA器件中实现,体现了CPU设计与实现的最新技术。整机系统中配置了由ROM、DRAM芯片构成的主存,配置了路串行接口电路,可以连
10、接由PC机实现的计算机仿真终端,配有监控程序,支持汇编语言程序设计。在这台计算机的设计实现过程中,全力朝着有利于降低教学授课与学习难度,有利于提高教学实验效果这个主导思想,指令都在2或3个步骤中完成,容易实现指令流水和片内Cache,还可选用片内存储器。,16,运算器由ALU、REGs和Flag 三个主要部件组成: ALU完成数据运算 , 运算数据可来自REGs 的B口数据和A口数据,常数和,通过内部总线IB送来的输入数据,由多路选择器实现选择。 REGs暂存数据和结果, 由寄存器编号选择读写的寄存器,读出数据送ALU,写入的数据来自ALU运算结果并经由移位电路。 Flag保存ALU产生的运算
11、结果的标志信息。 运算器的输出可以经IB送到其他部件。,运算器部件在第章已经讲解过。,在运算器中,读寄存器组、ALU运算、写回结果可一步完成。,17,控制器设计考虑:选用多指令周期方案。为用一个步骤完成取指操作,要求可以用程序计数器 PC作地址直接读内存,指令寄存器IR 能直接接收读出的指令,还设置专用的加法器电路计算指令地址(PC+1PC,PC+offset PC),而不是再经ALU完成指令地址计算。 为了处理CALA指令执行过程中保存主程序断点的需求,又在控制器中设置了一个缓冲寄存器NPC。以上线路的连接关系和信息传送关系从控制器组成框图中可以看得很清楚。CU部件 用组合逻辑方案产生各部件
12、使用的控制信号,它由两部分电路组成。第一部分是节拍发生器电路,产生指令执行步骤的标记信号,第二部分是控制信号的产生电路,依据指令的内容(由IR提供)、指令所处的执行步骤(由节拍发生器标记)通过组合逻辑电路提供此时刻各部件要用的控制信号。,18,控制器部件主要由程序计数器 PC、指令寄存器 IR、节拍发生器Timing、控制信号产生线路 CU 等主要部分组成。设计工作主要集中到 CU 如何产生各组控制信号,这在后面会详细讲解。控制器内部各电路的连接关系是:PC 可接收 PC+1 和 PC+offset 的计算结果,加运算使用专用的加法器完成; PC 还可以接收经过总线从堆栈中读出来的主程序的断点
13、地址。pc_wt 信号用于控制 PC 的写入操作。PC+1 的结果也能暂存到 NPC,NPC 的值可经过内部总线写入堆栈。取指操作时使用 PC 内容作地址去读存储器,IR 接收读出来的指令内容, ir_wt 信号用于控制 IR 的写入操作。此时还要同时完成 PC+1PC 的功能。,19,控制器和其他部件之间信息传送关系:控制器部件要为自己和其他部件提供控制信号。首先列出控制器本身用到的控制信号:pc_wt, ir_wt, npc_wt,pc_src, add_src,npc_ib。送其他部件的控制信号到介绍各个部件时再说明。 需要送出 PC 的内容、io port 的内容到地址总线,要经过 I
14、B 送 NPC 的内容到堆栈,要送出指令寄存器 IR 的 dr 和 sr 字段的内容到运算器部件。IR 要接收从总线送来的指令内容,PC 经总线接收丛运算器的REGs、从存储器、从堆栈中读来的指令地址。控制器部件要接收时钟信号clock,系统总清信号reset,运算器传送来的标志位信号 C 和 Z 。,20,操 作 码,目的寄存器,源寄存器,I/O 端 口 地 址,相对转移指令的偏移量,立即数 / 直接地址 / 变址偏移量,8位 4位 4位,指令格式,取指 周期 000,执行 周期 001,存储 周期 011,指令执行步骤,所有指令都经过取指和执行周期, 仅有读写内存操作的7条指令要增加存储周
15、期,复位状态 100,strr, ldrr, push, pop, ret, cala, calr,21,3-1、划分指令执行步骤(1) 按照指令系统的功能要求,设计计算机各部件的组成及其连接关系;(2) 划分指令执行步骤,设计各步骤完成的功能,分配功能到各个部件;(3) 确定要为每个执行步骤中各个部件提供哪些控制信号,设计这些控制信号的当前值。,取指 周期 000,执行 周期 001,存储 周期 011,指令用 2 3 步完成,都经取指和执行周期,仅读写内存用到存储周期。,复位状态 100,strr, ldrr, push, pop, ret, cala, calr,取指周期占用控制器和存储
16、器, 实现读取指令与计算下条相邻指令地址。执行周期占用运算器完成数据或内存地址计算,用控制器计算指令地址。存储周期占用运算器、控制器和存储器完成数据读写或指令地址的读写。,需要向各部件提供的控制信号取决于部件本身的运行控制需求,由控制器的控制单元CU提供,其VHDL程序由两层嵌套的 CASE语句组成,外层区分指令执行周期,内层区分每条指令,CU将依据不同指令及其所处的周期,向计算机各个部件提供它们运行所需要的控制信号。设计实现控制单元 CU 的逻辑实现是控制器教学中的难点之一。,22,1,取指 周期 000,执行 周期 001,存储 周期 011,指令执行步骤,复位状态 100,全部指令都经取
17、指和执行周期,仅读写内存指令经存储周期,计算机硬件系统组成,23,取指 周期 000,执行 周期 001,存储 周期 011,指令执行步骤,复位状态 100,全部指令都经取指和执行周期,仅读写内存指令经存储周期,1,这个系统由控制器、运算器、存储器和接口电路个部分组成。控制器由PC、IR、Timing、CU四个子部件组成,还有一个专用于计算指令地址的加法器 Adder,使计算指令地址不再通过运算器中的ALU完成。 暂存器NPC 用于为 CALA 指令暂存主调用程序的返回地址。PC 可以接受PC+1,PC+offset,从存储器中读出来的指令地址。,24,1,取指 周期 000,执行 周期 00
18、1,存储 周期 011,指令执行步骤,复位状态 100,全部指令都经取指和执行周期,仅读写内存指令经存储周期,运算器部件由寄存器组REGs、ALU和Flag等部分组成,向REGs提供的寄存器编号可以是来自IR的 dr、sr的寄存器编号,SP(R4)、R0(用于IN、OUT指令)的编号和,向ALU提供两路输入数据的选择门用于选择从寄存器组读出的两路数据,常数或者,还有内部总线IB送来的输入数据 (是从存储器或接口电路读出的) ,运算器输出可以是ALU的运算结果或从A口读出的数据,用于传送到存储器的地址寄器AR,或内部总线IB (作为写存储器和接口电路的数据)。,25,1,取指 周期 000,执行
19、 周期 001,存储 周期 011,指令执行步骤,复位状态 100,全部指令都经取指和执行周期,仅读写内存指令经存储周期,存储器和接口电路从地址总线AB接收地址信息(可以是指令、数据在存储器中的地址,或 IO端口地址),通过数据总DB线与CPU进行连接和数据交换。DB和IB都是双向传送的总线,二者通过一个双向传送的控制门实现连接,控制双向不连通还是连通,连同时数据传送方向是 IBDB 还是 DBIB,在执行读内存或接口时,需要 DBIB,出现在IB上的内容可以写到 IR 、PC 或累加器,在执行写内存或接口时,需要 IBDB,把NPC或者运算器输出的内容写到内存或接口中。,26,以动画形式看几
20、条指令的执行过程: 2200: ADD R2, R3 ;3 条指令的地址为2200、2201、2202 2201: JRNC 2200 ;若C=0 转去执行第1条,否则顺序执行 2202: STRR R2, R3 ; 把 R3的内容写入内存地址为 R2 的单元 程序运行的初始状态:程序已读入内存,第1条指令地址已经在PC中,假定 R2的初值为 1234, R3的初值为2345。 ADD指令的二进制代码为 00000000 0011 0010,已在内存中 JRNC指令的二进制代码为 01000101 1111 1110,已在内存中 STRR指令的二进制代码为 10000011 0010 0011
21、,已在内存中 3 条指令都要在取指周期执行读取指令的操作, ADD 指令要在 执行周期完成数据运算与写回功能; 结束 JRNC指令要在 执行周期完成指令地址计算并保存功能; 结束 STRR指令要在 执行周期完成数据地址计算并保存功能,还要在 存储周期完成存储器的写入功能。 结束,27,取指操作:在取指周期,以PC作地址读内存,读出指令送IR,计算下条指令地址假设PC的内容为 2200,内存2200单元的内容为 0023,IR的内容未定实现功能:pcAB, memABir , pc+1pc控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1,2
22、 2 0 0,0 0 3 2,0 0 3 2,1,1,2 2 0 0,2 2 0 1,4 5 F E,28,动画演示 REGs(3) + REGs(2) REG(3) 假设R2的内容为1234R3的内容为2345控制信号: b_sel 选 00a_sel 选 00 s_sel 选 00 r_sel 选 00 alu_func 选 000 reg_src 选 00reg_wt 选 1flag_func选 001,2,3,1234,2345,1234,2345,3579,2,3,+,00000000 0010 0011,ADD R2, R3,0,0,在执行周期,完成在取指周期读出来的加法指令的具体
23、运算过程,29,2 2 0 1,0 0 2 3,4 5 F E,1,4 5 F E,2 2 0 2,2 2 0 1,0 0,取指操作:在取指周期,以PC作地址读内存,读出指令送IR,计算下条指令地址此时PC的内容为 2201,内存2201单元的内容为 45FE,IR的原有内容0023实现功能:pcAB, memABir , pc+1pc控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1,0 0 2 3,30,相对转移指令:标志位C为 0 时,转移到2200地址,否则顺序执行在执行周期,由控制器部件计算转移指令地址,若C=0 则把转移地址送入
24、PC实现功能:if nc then pc+offsetpc控制信号:add_sel=1, pc_wt=1,0 0 2 3,4 5 F E,2 2 0 0,2 2 0 2,4 5 F E,F E,0 0,01000101 11111110,JRNC 2200,31,取指操作:在取指周期,以PC作地址读内存,读出指令送IR,计算下条指令地址此时PC的内容为 2202,IR的原内容45FE,假设内存2203单元的内容为 8323实现功能:pcAB, memABir , pc+1pc控制信号:addr_sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1,2 2 0 2
25、,0 0 3 2,8 3 2 3,1,1,2 2 0 2,2 2 0 3,8 3 2 3,4 5 F E,32,动画演示 在执行周期,在运算器部件中完成把R2的内容送地址寄存器AR的操作R2的内容为1234R3的内容为3579 请注意,此步骤中是计算数据在内存中的单元地址,通过R2+ 0AR实现,不影响C、Z等标志位;不使用R3。,2,3,1234,1234,3579,1234,2,3,+,10000001 0010 0011,STRR R2, R3,00,在执行周期,完成读内存指令的数据地址计算与传送操作,0000,1234,33,写内存指令,在存储器读写周期,完成把寄存器R3的内容写入存储
26、器的选定单元实现功能: RegR3 MemAR ,运算器中通过 R3+0 执行数据计算控制信号:addr_sel=00,s_sel=01,r_sel=00, gate_en=1,gate_dir=1,mio=1,we=1,10000001 0010 0011,STRR R2,R3,动画演示在存储器读写周期,完成把寄存器堆中的一个寄存器 (R3) 的内容写入存储器的由 AR 指定地址的一个存储单元,2,3,3,8132,1234,3579,0000,3579,00,3579,3579,+,1234,1234,34,取指操作实现功能:pcAB, memABir , pc+1pc控制信号:addr_
27、sel=01, gate_en=1, mio=1, ir_wt=1, pc_wt=1,1 2 0 1,0 0 2 3,4 5 F E,1,4 5 F E,1 2 0 2,1 2 0 1,35,双寄存器指令实现功能:Regsdr op Regssr Regsdr控制信号:b_src=00, a_sel=0, s_sel=00, r_sel=00,alu_func= OP 码, reg_wt=1 (cmp、test 除外), flag_func=001,36,单寄存器指令(INC、DEC)实现功能:Regsdr +1 (或-1) Regsdr控制信号:b_src=00, s_sel=00, r_s
28、el=11,alu_func= 000或001, reg_wt=1, flag_func=001,37,单寄存器指令(SHL、SHR)实现功能:Regsdr 1) Regsdr控制信号:b_src=00, s_sel=00, r_sel=01,alu_func= 000, reg_wt=1, flag_func=011 (或100),38,MVRD指令实现功能:pcAB, memABdr, pc+1pc控制信号:s_sel=01, r_sel=10, reg_wt=1, pc_wt=1addr_sel=01, gate_en=1, mio=1,39,相对转移指令(JR、JRC、JRNC、JRZ
29、、JRNZ)实现功能:pc + offset pc ( 如果转移条件成立 )控制信号:add_src=1, pc_wt=1 ( 如果转移条件成立 ),40,JMPA指令实现功能:pcAB, memABpc控制信号:pc_src=10, pc_wt=1addr_sel=01, gate_en=1, mio=1,41,读内存指令LDRR_1实现功能:sr ar控制信号:s_sel=01, ar_wt=1,42,读内存指令LDRR_2实现功能:Memar dr控制信号:s_sel=01, r_sel=10, reg_wt=1,43,CALA指令-1实现功能:pcAB, memABpc, pc+1np
30、c, sp-1sp,ar控制信号:gate_en=1, mio=1, addr_sel=1, pc_src=10, pc_wt=1, npc_wt=1 b_src=01, r_sel=11, alu_func=001, reg_wt=1, ar_wt=1,44,CALA指令-2实现功能:arAB, npcmemAB控制信号:npc_ib=1, gate_en=1, gate_dir=1, mio=1, we=1,45,RET指令_1实现功能:spAB, sp+1sp控制信号:a_sel=1, y_sel=1, ar_wt=1b_sel=01, r_sel=11, reg_wt=1,46,RET
31、指令_2实现功能:arAB, memABpc控制信号:pc_src=10, pc_wt=1gate_en=1, mio=1,47,3-2、TEC-FPGA计算机的 VHDL 语言的程序设计 这个VHDL语言程序由 4 个模块组成: (1) 顶层模块 CPU主要说明 CPU 的输入输出信号说明整个程序使用的全局信号说明 2、3、4 三个功能模块的接口关系 (2) 运算器部件模块 alu说明寄存器组 REGs、算逻运算单元 ALU 的线路组成描述运算器部件的功能和线路行为,描述 AR 的动作过程 (3) 控制器部件模块 controller说明控制器部件的线路组成描述节拍发生器和控制信号产生线路的
32、行为描述 PC、IR 的动作过程 (4) 总线控制模块 databus描述地址总线、数据总线的线路行为,48,部件之间的信号传递关系(见顶层模块程序) 左侧大虚线框内部分在FPGA芯片内部实现, 右侧的3个电路(用黄色填充)在印制电路板上。,49,library ieee; -顶层模块设计 use ieee.std_logic_1164.all; entity cpu isport ( clock, reste : in std_logic;mem_addr_bus : out std_logic_vector(15 downto 0);mem_data_bus : inout std_log
33、ic_vector(15 downto 0);nmio, req, nwe : out std_logic ); end cpu; architecture behavioral of cpu iscomponent controller -说明3个功能模块的接口参数signal sig_dr,sig_sr: std_logic; -说明程序所用的全局信号this_databus:databus -说明功能模块之间的接口参数对应关系port map ( sig_ar_out, mem_addr_bus, mem_data_bus, sig_ib,sig_gate_en, sig_gate_di
34、r, sig_pc, sig_addr_sel );nmio=not sig_mio; req =sig_req; nwe =not sig_we; end behavioral;,50,library ieee; -总线控制模块设计 use ieee.std_logic_1164.all; entity databus isport ( ar_out : in std_logic_vector(15 downto 0); mem_addr : out std_logic_vector(15 downto 0);db, ib : inout std_logic_vector(15 downto
35、 0);gate_en, gate_dir : in std_logic;pc : in std_logic_vector(15 downto 0);addr_sel : in std_logic_vector( 1 downto 0); end databus; architecture behavioral of databus isbegin with addr_sel select mem_addr Z) when others; ib Z);db Z); end behavioral;,51,运算器部件设计(VHDL程序摘选),architecture behavioral of a
36、lu issignal alu_out : std_logic_vector(15 downto 0); -说明ALU组成subtype register_type is std_logic_vector(15 downto 0);type register_heap is array (0 to 15) of register_type;signal regs : register_heap; -说明寄存器堆的构成 begin with a_sel select a_addr Z)when others;with b_sel select b_addr Z) when others;a_da
37、ta = regs(conv_integer(a_addr); -读出两个寄存器的内容b_data = regs(conv_integer(b_addr);,52,(续前页)with reg_src select reg_input Z) when others;register_write: process(clock, reg_wt, reg_input)begin -执行寄存堆的写入操作if ( rising_edge(clock) and (reg_wt=1) )then regs( conv_integer(b_addr) ) = reg_input;end if;end proce
38、ss register_write;,53,(续前页) with r_sel select r Z ) when others;with alu_func select alu_out Z) when others; if alu_out=X“0000” then zero = 0 else zero = 0 ; -确定标志位的值,再用一个 process 执行写标志位寄存器(略),54,控制器部件设计(VHDL程序摘选),architecture behavioral of controller is begintime_keeper: process(clock, reset) -节拍发生
39、器的功能描述beginif (reset=1) then timingtiming if (ir_inter(15)=1) and (ir_inter(8)=1) or(ir_inter(11 downto 8)=“1110“) or(ir_inter(14 downto 8)=“1100000“) then timingtimingtiming=“000“;end case;end if;end process time_keeper;,55,(续前页)produce_ctlsig:process(timing) -控制信号产生逻辑begin -开始时把全部控制信号赋初值为 0b_sel -
40、取指周期pc_wt -执行周期case icode is -向不同指令提供不同的控制信号when X“00“ = reg_wt alu_func alu_func=“110“; flag_func=“001“; - xor 指令reg_wt=1;,56,(续前页)when X“82“ = b_sel add_src s_sel r_sel b_sel b_sel npc_wtnull;end case;,57,(续前页)when “011” = -内存读写周期gate_en s_sel s_sel npc_ib s_sel s_sel pc_src gate_dirnull;end case;
41、when others =null;end case;end process produce_ctlsig;,58,4、TEC2008 教学计算机的硬件系统,(1) 寄存器堆和 ALU 部件(用位片结构的Am2901实现)寄存器堆与 ALU 合成一体,不能拆开分步使用16个寄存器中把 R4 和 R5 分别指定为 SP 和 PC,专用 (2) 主存储器及其相关线路既用于存储程序又用于存储数据,设置有地址寄存器读出的指令存入IR, 没有设置存储器的数据寄存器 (3) 输入输出线路 设置有两路串行接口 (4) 控制器部件由 程序计数器 PC (在通用寄存器组中)、指令寄存器 IR、节拍发生器Time
42、r 和 控制信号产生线路CU 4 部分组成,后两部分是控制器设计的主要工作。,59,教学计算机的数据通路,(1) 寄存器堆和 ALU 部件,选用位片结构的芯片实现,ALU 的两路输入数据可来自通用寄存器组或内部总线输出直接送地址寄存器 AR,或经过控制门送内部总线设置有标志位寄存器,需要正确维护与使用 (2) 主存储器及其相关线路地址寄存器 AR 接收的指令地址和数据地址都来自ALU的输出,读出数据直接送通用寄存器组 (无数据缓冲寄存器) (3) 输入输出部件 串行接口和主存储器的数据入出引脚都接在数据总线上,使用的地址都来自地址总线 (AR的输出),数据总线通过一个隔离线路被划分为内部总线和
43、外部总线 (4) 控制器部件PC 是用一个通用寄存器实现的,比较特殊,节拍发生器 和 控制信号产生线路 用可编程器件实现,60,CPU用CPLD和小规模集成电路实现的教学计算机系统,I/O 设备,地 址 总 线,数据 总 线,控制器、运算器存储器、串行口,D,Am2901,61,TEC-2008 计算机硬件系统组成,I/O 设备,地 址 总 线,数据 总 线,D,62,4-1、 划分指令执行步骤,读取指令需要 2步,因为 PC 是用通用寄存存器 R5 实现的,不能直接送到存储器芯片的地址引脚,需要首先传送到地址寄存器,读指令操作就要到下一步完成;算术逻辑运算在通用寄存器之间进行, 1步完成,因
44、为寄存器组和 ALU 在一个芯片内,已经通过 2 个锁存器线路连接好,ALU的计算结果可以直接写回寄存器组;读写存储器要用 2步完成,是在存储器与通用寄存器之间进行,首先要通过ALU计算出存储器中的数据地址并送到地址寄存器,读写数据操作就要到下一步完成;读写入出接口要用 2步完成,是在接口与通用寄存器之间进行,入出端口地址在指令低位字节给出,首先要经ALU 送到地址寄存器,读写数据操作就要到下一步完成;有几条指令需要 2 次访问存储器,正常情况要用 4步完成。变通一下也可以 3步完成。,63,每条指令的执行步骤,读取指令 指令地址送入主存地址寄存器 读主存,读出内容送入指令寄存器 分析指令依操
45、作码确定指令功能和执行步骤等 按指令规定内容执行指令 不同指令的操作步骤数, 和具体操作内容差异很大 检查有无中断请求 若有,则响应中断并转中断处理 若无,则转入下一条指令的执行过程,64,每条指令的执行步骤,读取指令指令地址送入主存地址寄存器 读主存,读出内容送入指令寄存器 分析指令根据指令操作码,指明指令的执行步骤 按指令规定内容执行指令不同指令的操作步骤数,和具体操作内容差异很大检查有无中断请求 若有,则响应中断并转中断处理 若无,则转入下一条指令的执行过程,R_R类型指令 读写内存类型指令 输入输出类型指令 其他类型指令,可执行一个或多个步骤,是一次读 内存操作,公共操作,公共操作,是
46、每一条指令的特定操作,65,指令的执行步骤分析与相关知识,指令功能与指令格式相关内容指令的操作码指明该条指令的操作功能;指令的操作数地址字段提供算术与逻辑运算指令 、传送指令等用到的操作数地址(或操作数) , 提供转移指令、子程序调用等指令用到的指令地址;指令中所涉及到的操作数和指令地址,主要保存在:运算器的通用寄存器中,内存储器的存储单元中,输入/输出设备接口的寄存器中。 运算器中的通用寄存器的读写控制 运算器中累加器的内容可以是操作数,操作数的地址,指令的地址,或用于完成寻址计算的有关内容等;读写累加器通常要通过运算器中的 ALU 才能完成。,66,指令的执行步骤分析与相关知识,读写内存储
47、器的存储单元读写内存某一单元的内容,通常用两个执行步骤:第一步,先送这一单元的地址到地址寄存器,驱动地址总线,用以选择存储器的一个单元;第二步,向内存储器发出读写命令,为读操作时,还要保存读出的内容,为写操作时,还要提供写入的数据。 读写输入/输出设备 (接口中的寄存器)读写输入/输出设备,通常是在 CPU 与相应接口卡的寄存器之间完成。通常要用两个执行步骤:第一步,先送这一设备的端口地址到地址寄存器,以驱动地址总线,用以选择接口电路中的一个寄存器;第二步,向接口卡发出读写命令,为读操作时,还要保存读出的内容,为写操作时,还要提供写入的数据。,67,典型指令的执行过程举例,2000 ADD R0,R1 ;两个累加器求和并保存结果到R0 2001 MVRR R2,R0 ;寄存器之间传送数据 2002 MVRD R9,2008 ;把16进制数2008传送到累加器R9;这是双字指令 2004 STRR R9,R2 ;写 R2 的内容写到 R9 给出地址的内;存单元中 2005 IN 80 ;从串行口(接键盘)读输入数据;并送到 R0 低位字节 2006 JRC 2000 ;若进位触发器 C为1,则相对转移到; 2000 地址 2007 RET ;子程序返回指令, 这里用于结束程序 2008 ;这是用于写入一个字的内存单元,