资源预览内容
第1页 / 共49页
第2页 / 共49页
第3页 / 共49页
第4页 / 共49页
第5页 / 共49页
第6页 / 共49页
第7页 / 共49页
第8页 / 共49页
第9页 / 共49页
第10页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验七、八微程序控制器设计2012年11一、实验目的:一、实验目的:1、通过实验通过实验, ,进一步理解进一步理解微程序控制器微程序控制器的组成结构。理解微程序控的组成结构。理解微程序控制器的控制原理制器的控制原理, ,掌握微指令格式和各字段功能。掌握微指令格式和各字段功能。2、加深理解加深理解微程序控制器微程序控制器的工作原理。掌握指令流程与功能的工作原理。掌握指令流程与功能3、理解掌握微程序控制器的设计思路与方法,掌握微程序的编制、掌握微程序的编制、写入、观察微程序的运行,学习基本指令的执行流程。写入、观察微程序的运行,学习基本指令的执行流程。 二、实验原理二、实验原理 1 1、微程序控制器的组成原理、微程序控制器的组成原理 控制存储器控制存储器:实现整个指令系统的所有微程序,一般指令系统是实现整个指令系统的所有微程序,一般指令系统是规定的由高速半导体存储器构成,容量视机器指令系统而定,取决规定的由高速半导体存储器构成,容量视机器指令系统而定,取决于微程序的个数,其长度就是微指令字的长度。于微程序的个数,其长度就是微指令字的长度。 微指令寄存器微指令寄存器:存放从控存读出的当前微指令。微操作控制字段存放从控存读出的当前微指令。微操作控制字段将操作控制信号送到控制信号线上,微地址字段指出下一条微地址将操作控制信号送到控制信号线上,微地址字段指出下一条微地址的形成。的形成。 微地址寄存器微地址寄存器:存放将要访问的下一条微指令地址存放将要访问的下一条微指令地址 地址转移逻辑:地址转移逻辑:形成将要执行的微指令地址,形成方式:形成将要执行的微指令地址,形成方式: 取指令公操作所对应的微程序一般从控存的取指令公操作所对应的微程序一般从控存的0 0地址开始,所以地址开始,所以微程序的人口地址微程序的人口地址0 0是由硬件控制的。当出现分支时,通过判别测是由硬件控制的。当出现分支时,通过判别测试字段、微地址字段、和执行部件的反馈信息形成后即微地址。试字段、微地址字段、和执行部件的反馈信息形成后即微地址。Cpu设计步骤:设计步骤:1.拟定指令系统拟定指令系统2.确定总体结构(数据通路)确定总体结构(数据通路)3.安排时序安排时序4.拟定指令流程。根据指令系统,写出对应所有机器指拟定指令流程。根据指令系统,写出对应所有机器指令的全部微操作,然后列出操作时间表令的全部微操作,然后列出操作时间表5.确定微指令的控制方式、确定微指令的控制方式、下地址形成方式下地址形成方式、微指令格、微指令格式及微指令字长,编写全部的微指令的代码,最后将式及微指令字长,编写全部的微指令的代码,最后将编写的微指令放入控制存储器中。编写的微指令放入控制存储器中。指令系统是设计计算机的依据,拟定指令系统将涉及基本字长、指令系统是设计计算机的依据,拟定指令系统将涉及基本字长、指令格式、指令类型、寻址方式等内容。根据内存的字长,可定指令格式、指令类型、寻址方式等内容。根据内存的字长,可定基本字长基本字长8 8位,位,指令格式:指令格式:单字长,(双字长指令,在双字长指令格式中,第二单字长,(双字长指令,在双字长指令格式中,第二个字节一般定义为操作数或操作数地址。)个字节一般定义为操作数或操作数地址。)总体结构:总体结构:根据要求设计数据通路根据要求设计数据通路1 1、定义指令系统、定义指令系统、定义指令系统、定义指令系统字长字长8位,位,采用一地址指令采用一地址指令指令格式指令格式操作码操作码3位,地址码位,地址码5位位操作码操作码000LOAD001STORE010ADD011SUB100BNE其中(其中(101101,110110,111111为今后扩展指令留用为今后扩展指令留用)寻址方式:直接寻址寻址方式:直接寻址,为了简单指令采用,为了简单指令采用一地址指令一地址指令如下如下面程序面程序Load4将内存将内存4 4地址的操作数送地址的操作数送ACCACC累加器累加器Add5将内存将内存5 5地址的操作数取出与地址的操作数取出与ACCACC相加相加Stare6将将ACCACC的内容存入内存的内容存入内存6 6号地址号地址Bne7判断,结果判断,结果Z_flagZ_flag不为不为0 0 ,跳转到内存,跳转到内存7 7地址所指的地地址所指的地址执行指令址执行指令操作码对应的编码操作码对应的编码LOAD 000 ,STORE 001,ADD010,SUB011,BNE100内存中储存的机器指令内存中储存的机器指令内存地址内存地址 指令指令描述描述0Load4 从从mem(4)取数到取数到ACC1Add5从从mem(5)取数到总线,与取数到总线,与ACC中的数加中的数加2Store6 结果存储在结果存储在MEM(6)3Bne7结果不为结果不为0,跳到,跳到742数据数据253数据数据3其它其它0全为全为0参考设计参考设计指令指令编码编码Load 4000 00100Add 5010 00101Store 6001 00110Bne 7100 00111 机器指令的编码(机器语言)机器指令的编码(机器语言)指令执行的基本过程指令执行的基本过程取指令取指令执行指令执行指令取操作数取操作数操作数在操作数在内存内存无操作无操作数或操数或操作数在作数在CPU3、方案选择、方案选择8位模型机设计,单总线,采用微程序控制方式。寻址方式:位模型机设计,单总线,采用微程序控制方式。寻址方式:直接,(寄存器,寄存器间接和变址寻址)直接,(寄存器,寄存器间接和变址寻址)微程序控制方式由微指令译码器产生,一条机器指令分成若微程序控制方式由微指令译码器产生,一条机器指令分成若干步执行,每一步需要若干个微命令及微指令,若干条微指令组干步执行,每一步需要若干个微命令及微指令,若干条微指令组成一段微程序。放入控制存储器。成一段微程序。放入控制存储器。微程序执行过程:微程序执行过程:(1)从存储器中逐条取出)从存储器中逐条取出从控制存储器中逐条取出从控制存储器中逐条取出“取指微指令取指微指令”执行取指令公操作。执行取指令公操作。(2)、根据指令操作码,经过微地址形成部件,得到该机器指)、根据指令操作码,经过微地址形成部件,得到该机器指令微程序入口地址,并送入微地址寄存器,令微程序入口地址,并送入微地址寄存器,(3)、从控制存储器逐条读出对应的微指令并执行)、从控制存储器逐条读出对应的微指令并执行(4)、执行完一条机器指令对应的微程序后又回到取指微程序)、执行完一条机器指令对应的微程序后又回到取指微程序的入口微地址,继续第一步(的入口微地址,继续第一步(1)(5)、采用微程序的控制,设计微指令的格式)、采用微程序的控制,设计微指令的格式、操作字操作字段段15位,下地址字段位,下地址字段5位位(6)操作控制字段:采用直接控制方法,位数与设计的微命操作控制字段:采用直接控制方法,位数与设计的微命令的个数一致,令的个数一致,3 3、确定数据通路、确定数据通路、确定数据通路、确定数据通路含有那些部件,部件功能,之间的连接、指令含有那些部件,部件功能,之间的连接、指令信息,地址信息,数据信息传递的路径,从而得信息,地址信息,数据信息传递的路径,从而得到所需要的位命令到所需要的位命令(15个)个)寄存器部件寄存器部件 ACC, MDR, MAR, IR, PCACC, MDR, MAR, IR, PC,均为,均为8 8位位8 8位位运算器部件运算器部件 ALU RAM 微程序控制逻辑部件微程序控制逻辑部件:1.微地址形成部件微地址形成部件2.控制存储器控制存储器3.微指令寄存器微指令寄存器4.微地址寄存器微地址寄存器5.译码器译码器IRPSWPC微地址形成微地址形成电路电路微地址微地址寄存器寄存器AR译码器译码器。微指令寄存器微指令寄存器控制存储器控制存储器CM微命令序列微命令序列微命令字段微命令字段微地址字段微地址字段指令代码指令代码运行状态运行状态微程序控制基本框图微程序控制基本框图。数据通路设计数据通路设计 单总线结构单总线结构8 8位,主要包括:位,主要包括: 确定总体结构。确定总体结构。cs片选,用片选,用MARMAR的内容设置存储器地址的内容设置存储器地址R_nw读,不可写,当读,不可写,当R_NR_N无效且无效且CSCS有效时,有效时,MDRMDR的内容写的内容写入存储器中入存储器中Alu+addALUALU中执行加中执行加Alu_subALUALU中执行减中执行减Acc_busACCACC总线总线Load_acc总线总线ACCACCPc_busP P总线总线Z ZLoad_IR总线总线IRIRLoad_MAR总线总线MDRMDRMDR_busMDRMDR总线总线Load_MDR将总线的数据装入将总线的数据装入MDRMDRALU_ACCALUALU的结果送的结果送ACCACCINC_PCPC+1=PCPC+1=PCADDR_bus用用IRIR中指令的操作码部分驱动总线中指令的操作码部分驱动总线4、拟定指令系统。、拟定指令系统。3位位 5位位操作码操作码地址码地址码指令格式指令格式寻址方式寻址方式直接寻址直接寻址指令中给出操作数的地址指令中给出操作数的地址指令系统设计:指令系统设计: load, store, add, sub, bne格式、寻址方式、指令类型设置格式、寻址方式、指令类型设置操作码操作码3 3位,最多定义位,最多定义8 8条机条机器指令器指令数据传输范围数据传输范围 RR, RS RR, RS SRSR寻址方式寻址方式 操作码操作码操作数操作数0754机器指令格式机器指令格式为了简单,指令均为一地址指令,指令字长为了简单,指令均为一地址指令,指令字长8位位编码编码000001010011100101110111设计微命令设计微命令微操作控制信号产生微操作控制信号产生 在微程序控制器中,微操作控制信号由微指令产在微程序控制器中,微操作控制信号由微指令产生,并且可以重复使用。生,并且可以重复使用。 控制存储器用来实现整个指令系统的所有微控制存储器用来实现整个指令系统的所有微程序,一般指令系统是固定的,所以实现指令系程序,一般指令系统是固定的,所以实现指令系统的微程序也是固定的,因此控制存储器程序也统的微程序也是固定的,因此控制存储器程序也是固定的。一般采用高速半导体存储器。其容量是固定的。一般采用高速半导体存储器。其容量视机器指令系统而定。即取决于微程序的数量,视机器指令系统而定。即取决于微程序的数量,其字长等于微指令的长度。其字长等于微指令的长度。微程序控制器的设计步骤微程序控制器的设计步骤IRPSWPC微地址形成微地址形成电路电路微地址微地址寄存器寄存器AR译码器译码器。微指令寄存器微指令寄存器控制存储器控制存储器CM微命令序列微命令序列微命令字段微命令字段微地址字段微地址字段指令代码指令代码运行状态运行状态微程序控制基本框图微程序控制基本框图。可根据需要扩展可根据需要扩展19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 40Load-PCACC-busLoad-ACCPC-bus Load-IRLoad-MARMDR-busLoad-MDRALU-ACCINC-PCAddr-busCSR- NWALU-sub下址下址ALU-add根据微命令表,设计微指令:根据微命令表,设计微指令:微指令设计,采用直接控制微指令设计,采用直接控制 水平微指令水平微指令微命令的位置安排任意微命令的位置安排任意基本格式如下:基本格式如下:微指令的编码微指令的编码操作控制字段操作控制字段下地址字段下地址字段采用直接控制方法采用直接控制方法 15个控制信号,个控制信号,5位位下地址下地址微指令格式微指令格式(1 1)设计微程序)设计微程序 确定微程序流程图,也就是控制算法流程图。确定微程序流程图,也就是控制算法流程图。(2 2)确定微指令格式)确定微指令格式微指令格式中的操作控制字段取决于执行部件的子系微指令格式中的操作控制字段取决于执行部件的子系统需要多少微指令。假定采用直接控制方式,执行部统需要多少微指令。假定采用直接控制方式,执行部件需要件需要1515个微命令,则操作控制字段需要个微命令,则操作控制字段需要1515位。位。 测试判别字段取决于微程序流程图中有多少处分支测试判别字段取决于微程序流程图中有多少处分支转移。假定有转移。假定有3 3处分支,则测试判别字段需要处分支,则测试判别字段需要3 3位。位。下址字段取决于微程序流程图的规模。假定微程序共下址字段取决于微程序流程图的规模。假定微程序共用用5050条微指令,则下址字段至少需要条微指令,则下址字段至少需要6 6位。这是因为位。这是因为ROMROM地址译码时,地址译码时,2 26 6=64=64,6 6位地址可容纳位地址可容纳6464条微指令。条微指令。(3 3)将微程序编译成二进制代码)将微程序编译成二进制代码(4 4)微程序写入控制存储器)微程序写入控制存储器(5 5)设计硬件电路)设计硬件电路 微程序控制器的设计步骤微程序控制器的设计步骤在系统的一个基本周期在系统的一个基本周期( (又称机器周期,一般由几个时又称机器周期,一般由几个时钟周期组成钟周期组成) )中,一组实现一定操作功能的微命令的组中,一组实现一定操作功能的微命令的组合,构成一条微指令。合,构成一条微指令。 强调两点:强调两点:第一,一条微指令的有效持续时间为一个系统基本周期,第一,一条微指令的有效持续时间为一个系统基本周期,它表示从它表示从CMCM中读出微指令与执行这条微指令的时间总和。中读出微指令与执行这条微指令的时间总和。当从当从ROMROM中读出下一条微指令后,当前的这条微指令即中读出下一条微指令后,当前的这条微指令即失效。失效。 第二,一条微指令中包含若干个微命令,它们分头并行第二,一条微指令中包含若干个微命令,它们分头并行地控制执行部件进行相应的微操作。地控制执行部件进行相应的微操作。 微指令除给出微命令信息外,还应给出测试判别信息。微指令除给出微命令信息外,还应给出测试判别信息。一旦出现此信息,执行这条微指令时要对系统的有关一旦出现此信息,执行这条微指令时要对系统的有关“状态标志状态标志”进行测试,从而实现控制算法流程图的条件进行测试,从而实现控制算法流程图的条件分支。微指令中还包含一个下址字段,该字段将指明分支。微指令中还包含一个下址字段,该字段将指明ROMROM中下一条微指令的地址。中下一条微指令的地址。 微程序控制器的结构与微指令的格式密切相关。微程序控制器的结构与微指令的格式密切相关。上图是微程序控制器的结构框图。它由控制存储器、上图是微程序控制器的结构框图。它由控制存储器、微地址寄存器、微命令寄存器和地址转移逻辑几部微地址寄存器、微命令寄存器和地址转移逻辑几部分组成。微地址寄存器和微命令寄存器两者的总长分组成。微地址寄存器和微命令寄存器两者的总长度即为一条微指令的长度,二者合在一起称为微指度即为一条微指令的长度,二者合在一起称为微指令寄存器。令寄存器。地址转移逻辑:地址转移逻辑:用来形成要执行的微指令的地址,形成方式一般有以下几种:用来形成要执行的微指令的地址,形成方式一般有以下几种:取指令公操作所对应的微程序一般安排在控制存储器的取指令公操作所对应的微程序一般安排在控制存储器的0号单号单元,所以微程序的入口地址元,所以微程序的入口地址0是由硬件强制规定的。是由硬件强制规定的。当微程序出现分支时通过判断测试字段当微程序出现分支时通过判断测试字段微地址字段和执行部微地址字段和执行部件的反馈信息形成微地址,包括根据操作码转移情况。件的反馈信息形成微地址,包括根据操作码转移情况。微程序控制器执行过程描述微程序控制器执行过程描述1、从、从CM逐条取出逐条取出“取机器指令的微指令,执行取指令公操取机器指令的微指令,执行取指令公操作,执行完后,从主存取出的机器指令就已经存入指令寄存器作,执行完后,从主存取出的机器指令就已经存入指令寄存器IR2、根据、根据IR中的操作码,经过地址形成部件,得到这条指令对中的操作码,经过地址形成部件,得到这条指令对应的微程序入口地址。并送入微地址寄存器。应的微程序入口地址。并送入微地址寄存器。3、从、从CM中逐条取出对应的微指令并执行中逐条取出对应的微指令并执行4、执行完一条机器指令的一段微程序后,又回到取指微程序、执行完一条机器指令的一段微程序后,又回到取指微程序的人口地址,继续第的人口地址,继续第1步步4 4、绘微程序的流程图、绘微程序的流程图 5 5、依据微程序的流程图给出微程序编码、依据微程序的流程图给出微程序编码常用下地址生成方法:常用下地址生成方法:计数器方法、计数器方法、真量方式与断定方式结合方法真量方式与断定方式结合方法多路转移方法多路转移方法每条机器指令的操作码如何与其微程序人口地址对应,通过编每条机器指令的操作码如何与其微程序人口地址对应,通过编码方法将指令码的状态分成不同的几个,在用微地址进行编码码方法将指令码的状态分成不同的几个,在用微地址进行编码实验内容:单总线,采用微程序控制,寻址方式:采用直接实验内容:单总线,采用微程序控制,寻址方式:采用直接(,寄存器,寄存器间接,变址)。,寄存器,寄存器间接,变址)。微程序控制器控制方式由微指令译码产生微程序控制器控制方式由微指令译码产生取指令取指令PCMAR,PC1 PCMMDRIR执行执行addrMAR寻址方式寻址方式直接寻址直接寻址指令中给出操作数的地址指令中给出操作数的地址MMDRACCLoad Load 地址码地址码主存中的数据读入主存中的数据读入ACC拟定指令流程和微命令序列。拟定指令流程和微命令序列。 拟定指令流程拟定指令流程拟定指令流程和微命令序列。拟定指令流程和微命令序列。 微命令序列。微命令序列。取指令取指令PCMAR,PC1 PC CS R_NW MMDRIR执行执行addrMARMMDRALU(ACC)取指取指取操取操作数作数拟定指令流程和微命令序列。拟定指令流程和微命令序列。Load:把主存内容读入把主存内容读入ACCStore:把把ACC内容存入主存内容存入主存Add:主存内容与主存内容与ACC相加相加Sub:主存内容与主存内容与ACC相减相减Bne:转移转移形成控制逻辑。形成控制逻辑。000101000100000 0000119 18 17 16 15 14 13 12 11 10 9 8 7 6 5 40Load-PCACC-busLoad-ACCPC-bus Load-IRLoad-MARMDR-busLoad-MDRALU-ACCINC-PCAddr-busCSR- NWALU-sub下址下址ALU-add000000000001100 000101 1、地址转移逻辑:、地址转移逻辑: 用来形成要执行的微指令的地址,形成方式一般有以下几用来形成要执行的微指令的地址,形成方式一般有以下几种:种: 取指令公操作所对应的微程序一般安排在控制存储器的取指令公操作所对应的微程序一般安排在控制存储器的0 0号单元,所以微程序的入口地址号单元,所以微程序的入口地址0 0是由硬件强制规定的。是由硬件强制规定的。当微程序出现分支时通过判断测试字段当微程序出现分支时通过判断测试字段 微地址字段和执行部微地址字段和执行部件的反馈信息形成微地址,包括根据操作码转移情况。件的反馈信息形成微地址,包括根据操作码转移情况。微程序控制器执行过程描述微程序控制器执行过程描述(1 1)、从)、从CMCM逐条取出逐条取出“取机器指令的微指令,执行取指令公取机器指令的微指令,执行取指令公操,执行完后,从主存取出的机器指令就已经存入指令寄存器操,执行完后,从主存取出的机器指令就已经存入指令寄存器IRIR(2 2)、根据)、根据IRIR中的操作码,经过地址形成部件,得到这条指中的操作码,经过地址形成部件,得到这条指令对应的微程序入口地址。并送入微地址寄存器。令对应的微程序入口地址。并送入微地址寄存器。(3 3)、从)、从CMCM中逐条取出对应的微指令并执行中逐条取出对应的微指令并执行(4 4)、执行完一条机器指令的一段微程序后,又回到取指微)、执行完一条机器指令的一段微程序后,又回到取指微程序的人口地址,继续第程序的人口地址,继续第1 1步步如果下地址为如果下地址为01111时,下条微指令的地址为:时,下条微指令的地址为:下地地址的高下地地址的高2 2位与操作码组合即位与操作码组合即01OP的编码;如的编码;如LOAD指令,开始的下地址为:指令,开始的下地址为:01000如果下地址为:如果下地址为:10000时,依据时,依据ZF标志位产生分支。标志位产生分支。下一条微指令地址为:下一条微指令地址为:其他下一条微指令的地址为就是微指令中提供的下地其他下一条微指令的地址为就是微指令中提供的下地址。址。WHDL编写编写1、定义存储器,存放验证的指令及其操作数、定义存储器,存放验证的指令及其操作数2、定义控制存储器,存放微程序、定义控制存储器,存放微程序3、定义进程、定义进程进程中完成的操作为:如果进程中完成的操作为:如果RESET=0,包含,包含PC=0,微地址为微地址为0,否则在时钟的上升沿时取出微指令,或的,否则在时钟的上升沿时取出微指令,或的下地址,依据有效的微命令,执行相应的微操作。下地址,依据有效的微命令,执行相应的微操作。2、下地址的形成、下地址的形成Load微程序人口地址微程序人口地址01000 8Store010019Add0101010Sub0101111Bne01100122 2、微程序控制器执行过程、微程序控制器执行过程 A)A)从控存中逐条读出从控存中逐条读出“取机器指令取机器指令”用的微指令,并执行用的微指令,并执行取指令公操作,执行完后,从主存读出的机器指令放入取指令公操作,执行完后,从主存读出的机器指令放入IR.IR. B) B)根据根据IRIR中的操作码,经过地址形成部件得到该机器指令中的操作码,经过地址形成部件得到该机器指令对应的微程序入口地址,并送入微地址寄存器。对应的微程序入口地址,并送入微地址寄存器。 C)C)从控存中逐条取出对应的微指令并执行。从控存中逐条取出对应的微指令并执行。 D D)执行完对应的的一条机器指令的一段微程序后又回到取)执行完对应的的一条机器指令的一段微程序后又回到取指微程序的入口微。指微程序的入口微。地址。继续地址。继续A)A)3 3微指令编码法微指令编码法 直接控制法:就是在微指令的操作控制字段中,每一个微命直接控制法:就是在微指令的操作控制字段中,每一个微命令都用一位信息表示,只要将控制字段中表示该命令的相应位令都用一位信息表示,只要将控制字段中表示该命令的相应位置置1 1或置或置0 0就可以打开或关闭某个控制门。微命令的产生不必经就可以打开或关闭某个控制门。微命令的产生不必经过译码,过译码,【控制简单,直观、操作并行性好,缺点:微指令太控制简单,直观、操作并行性好,缺点:微指令太长长】上图中标明了一个基本机器周期中的控制时序信号。例如用上上图中标明了一个基本机器周期中的控制时序信号。例如用上一周期的一周期的T4T4时间按微地址寄存器内容从时间按微地址寄存器内容从ROMROM中读一条微指令,经中读一条微指令,经过一段时间后被读出,用当前周期的过一段时间后被读出,用当前周期的T1T1时间打入到微指令寄存时间打入到微指令寄存器。器。T2T2、T3T3时间用来控制执行部件进行操作。时间用来控制执行部件进行操作。T4T4时间修改微地时间修改微地址寄存器内容并读出下一条微指令。址寄存器内容并读出下一条微指令。 PCARIR时公共操作LOADaddstoresubbneandT0PC_BLDAR,LDPCT1CE,OET2MDR_B,LDIRT3Addr_B,LDART4CE,OECE,OEACC_BLDDRCE,OECE,OECE,OET5MDR_B,LDACMDR_B,ALU_ACC,ALU_ADDCEMDR_B,ALU_ACC,ALU_SUBMDR_BLDPCDR_BALU_ACCALU_AND1安排指令时间表安排指令时间表微指令编码微指令编码操操作作码码 地地址址码码地址转移逻辑地址转移逻辑IR微地址寄存器微地址寄存器地址译码地址译码控制存储器控制存储器操作控制字段操作控制字段 顺序控制字段顺序控制字段微命令操作信号微命令操作信号逻辑程序入口逻辑程序入口微指令微指令一条微指令的有效持续时间为一个系统基本周期一条微指令的有效持续时间为一个系统基本周期微程序编码微程序编码00000101000100000000010100000000000110000010020000101000000000001103000001000010000011110400100010000000000000050000000000010000000006000000101000010000000700000010100000100000080000000000011000010009010000010000000001011000000000000110000110110000000000011000011112000000000001100100001310000010000000000000 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 40Load-PCACC-busLoad-ACCPC-busLoad-IRLoad-MARMDR-busLoad-MDRALU-ACCINC-PCAddr-busCSR- NWALU-sub下址下址ALU-add微地微地0=00010100010000000001,1=00000000000110000010,2=00001010000000000011,3=00000100001000001111,4=00100010000000000000,5=00000000000100000000,6=00000010100001000000,7=00000010100000100000,8=00000000000110000100,-LOAD9=01000001000000000101,-STORE10=00000000000110000110,-ADD11=00000000000110000111,-12=00000000000110010000,13=10000010000000000000,14=00000000000000000000); 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 40Load-PCACC-busLoad-ACCPC-busLoad-IRLoad-MARMDR-busLoad-MDRALU-ACCINC-PCAddr-busCSR- NWALU-sub下址下址ALU-add取指取指Addr_busLoad_MAR控制存储器设计控制存储器设计微地址微地址0303的下地址位的下地址位0111101111,说明应该是根据指令操作码来形,说明应该是根据指令操作码来形成。即下地址的低成。即下地址的低3 3位是指令操作码位是指令操作码 。高。高2 2位为位为0101因此因此LOADLOAD指指令的开始的微地址是令的开始的微地址是0101000000(也可以用其他形成方式也可以用其他形成方式)Load Load 01000store store 0101 001 001Add Add 0101 010 010Sub Sub 0101 011 011BneBne 0101 100 100地址地址1212的下地址,也要根据运算器的结果是否位的下地址,也要根据运算器的结果是否位“0 0”来判断,来判断,所以其下地址设为所以其下地址设为1000010000,以决定下地址是,以决定下地址是1313还是还是1414至于控制信号何时为至于控制信号何时为“1 1”-CPU 头文件头文件 cpu_defs LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE cpu_defs IS -定义程序包,包头,包体定义程序包,包头,包体TYPE opcode IS (load, store, add, sub, bne);-定义用定义用std_logic等不方便定义等不方便定义的类型,一般将第一个枚举量(最左边)编码为的类型,一般将第一个枚举量(最左边)编码为0CONSTANT word_w: NATURAL :=8;CONSTANT op_w: NATURAL :=3;CONSTANT rfill: STD_LOGIC_VECTOR(op_w-1 downto 0):=(others =0);-FUNCTIOn slv2op(slv:IN STD_LOGIC_VECTOR) RETURN opcode;FUNCTION op2slv(op:in opcode) RETURN STD_LOGIC_VECTOR;END PACKAGE cpu_defs;PACKAGE BODY cpu_defs ISTYPE optable IS ARRAY(opcode) OF STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);-数组有数组有5个元素,其他均个元素,其他均0CONSTANT trans_table:optable :=(000, 001, 010, 011, 100);FUNCTION op2slv(op:IN opcode) RETURN STD_LOGIC_VECTOR ISBEGINRETURN trans_table(op);END FUNCTION op2slv;END PACKAGE BODY cpu_defs;-实验实验 7-8 7-8 微程序控制器实验微程序控制器实验 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL,IEEE.NUMERIC_STD.ALL;USE WORK.CPU_DEFS.ALL;-使用自己定义的程序程序包ENTITY CPU ISPORT( clock : IN STD_LOGIC;-时钟 reset : IN STD_LOGIC;-复位 mode : IN STD_LOGIC_VECTOR(2 DOWNTO 0); -查看用 mem_addr : IN UNSIGNED(word_w-op_w-1 DOWNTO 0);-地址 output : OUT STD_LOGIC_VECTOR(word_w-1 DOWNTO 0); data_r_out : OUT STD_LOGIC_VECTOR(19 DOWNTO 0);-微指令Rop_out : OUT STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);-操作码add_r_out : OUT UNSIGNED(4 DOWNTO 0) -微地址R ); END ENTITY;ARCHITECTURE rtl OF CPU ISTYPE mem_array IS ARRAY (0 TO 2*(word_w-op_w)-1) OF STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);-定义RAMSIGNAL mem : mem_array;CONSTANT prog : mem_array:=(0= op2slv(load) & STD_LOGIC_VECTOR(TO_UNSIGNED(4,word_w-op_w),1= op2slv(add) & STD_LOGIC_VECTOR(TO_UNSIGNED(5,word_w-op_w),2= op2slv(store) & STD_LOGIC_VECTOR(TO_UNSIGNED(6,word_w-op_w),3= op2slv(bne) & STD_LOGIC_VECTOR(TO_UNSIGNED(7,word_w-op_w),-TO_UNSIGNED转换函数将4转换为5位“00100”4= STD_LOGIC_VECTOR(TO_UNSIGNED(2,word_w),5= STD_LOGIC_VECTOR(TO_UNSIGNED(3,word_w),OTHERS = (OTHERS =0);TYPE microcode_array IS ARRAY (0 TO 14) OF STD_LOGIC_VECTOR(19 DOWNTO 0);CONSTANT code : microcode_array:=(-控制存储器0= 00010100010000000001,1= 00000000000110000010,2= 00001010000000000011,3= 00000100001000001111,4= 00100010000000000000,5= 00000000000100000000,6= 00000010100001000000,7= 00000010100000100000,8= 00000000000110000100,-LOAD9= 01000001000000000101,-STORE 10= 00000000000110000110,-ADD 11= 00000000000110000111,- 12= 00000000000110010000, 13= 10000010000000000000, 14= 00000000000000000000); SIGNAL count : UNSIGNED(word_w-op_w-1 DOWNTO 0);SIGNAL op : STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);SIGNAL z_flag : STD_LOGIC; SIGNAL mdr_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0); SIGNAL mar_out : UNSIGNED(word_w-op_w-1 DOWNTO 0); SIGNAL IR_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0); SIGNAL acc_out : UNSIGNED(word_w-1 DOWNTO 0); SIGNAL sysbus_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0); EGINPROCESS(reset,clock)VARIABLE instr_reg : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE acc : UNSIGNED(word_w-1 DOWNTO 0);CONSTANT zero : UNSIGNED(word_w-1 DOWNTO 0):=(OTHERS =0)VARIABLE mdr : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE mar : UNSIGNED(word_w-op_w-1 DOWNTO 0);VARIABLE sysbus : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE microcode : microcode_array;VARIABLE add_r : UNSIGNED(4 DOWNTO 0); VARIABLE data_r : STD_LOGIC_VECTOR(19 DOWNTO 0);VARIABLE temp : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGIN-内部信号传递内部信号传递IF reset=0 THENadd_r:=(OTHERS =0); count 0);instr_reg := (OTHERS =0);acc := (OTHERS =0);mdr := (OTHERS =0);mar := (OTHERS =0);z_flag =0;mem 0);ELSIF RISING_EDGE(clock) THEN-microprogram controllerdata_r := code(TO_INTEGER(add_r);IF data_r(4 DOWNTO 0)=01111 THEN -判断下地址 temp:=01 & op(2 DOWNTO 0);add_r := UNSIGNED(temp);ELSIF data_r(4 DOWNTO 0)=10000 THENIF z_flag=1 THENadd_r:=01110;ELSEadd_r :=01101;END IF;ELSEadd_r := UNSIGNED(data_r(4 DOWNTO 0);END IF;data_r_out =data_r;add_r_out = add_r; -PCIF data_r(16)=1 THEN -PC_bus=1sysbus := rfill & STD_LOGIC_VECTOR(count);END IF;IF data_r(19)=1 THEN -load_PC=1count = UNSIGNED(mdr(word_w-op_w-1 DOWNTO 0);ELSIF data_r(10)=1 THEN -INC_PC=1count = count+1;ELSE count = count;END IF;-IRIF data_r(15)=1 THEN -load_IRinstr_reg := mdr;END IF;IF data_r(9)=1 THEN -Addr_bus=1sysbus := rfill & instr_reg(word_w-op_w-1 DOWNTO 0);END IF;op = instr_reg(word_w-1 DOWNTO word_w-op_w);IR_out = instr_reg;op_out =op;-ALUIF data_r(17)=1 THEN -load_ACC=1acc:=UNSIGNED(mdr);END IF;IF data_r(11)=1 THEN -ALU_ACC=1IF data_r(6)=1 THEN -ALU_add=1acc := acc + UNSIGNED(mdr);ELSIF data_r(5)=1 THEN -ALU_sub=1 acc := acc - UNSIGNED(mdr);END IF;END IF;IF data_r(18)=1 THEN -ACC_bus=1sysbus := STD_LOGIC_VECTOR(acc);END IF;IF acc=zero THENz_flag =1;ELSEz_flag =0;END IF;acc_out= acc;-RAMIF data_r(14)=1 THEN -load_MAR=1mar := UNSIGNED(sysbus(word_w-op_w-1 DOWNTO 0);ELSIF data_r(12)=1 THEN -load_MDR=1mdr := sysbus;ELSIF data_r(8)=1 THEN -CS=1IF data_r(7)=1 THEN -R_NW=1mdr := mem(TO_INTEGER(mar);ELSEmem(TO_INTEGER(mar)=mdr;END IF;END IF;IF data_r(13)=1 THEN -MDR_bus=1sysbus:=mdr;END IF;mdr_out = mdr;mar_out = mar;END IF;sysbus_out sysbus -mode=1 - PC-mode=2 - result of ALU-mode=3 - IR-mode=4 - MAR-mode=5 - MDR-mode=6 - mem output 0);CASE mode is WHEN 000 = -查看总线内容output -查看PC output(word_w-op_w-1 DOWNTO 0) -查看ALUoutput -查看IRoutput -查看MARoutput(word_w-op_w-1 DOWNTO 0) -查看MDRoutput -查看MEMoutput output Z);END CASE; END PROCESS;END ARCHITECTURE;实验二在实验内容一的基础上增加寄存器寻址寄存器的个数自己定,如增加一个寄存器见下图增加与AND和空操作NOP指令修改实验内容一的程序,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号