资源预览内容
第1页 / 共49页
第2页 / 共49页
第3页 / 共49页
第4页 / 共49页
第5页 / 共49页
第6页 / 共49页
第7页 / 共49页
第8页 / 共49页
第9页 / 共49页
第10页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验八微程序控制器设计一、一、实验目的:目的:1、,进一步理解一步理解微程序控制器微程序控制器的的组成成结构。理解微程序控制器的控构。理解微程序控制器的控制原理制原理,掌握微指令格式和各字段功能。掌握微指令格式和各字段功能。2、加深理解加深理解微程序控制器微程序控制器的工作原理。掌握指令流程与功能的工作原理。掌握指令流程与功能3、理解掌握微程序控制器的设计思路与方法,掌握微程序的掌握微程序的编制、制、写入、写入、观察微程序的运行,学察微程序的运行,学习基本指令的基本指令的执行流程。行流程。 二、二、实验原理原理1、微程序控制器的、微程序控制器的组成原理成原理控制存控制存储器器:实现整个指令系整个指令系统的所有微程序,一般指令系的所有微程序,一般指令系统是是规定的由高速半定的由高速半导体存体存储器构成,容量器构成,容量视机器指令系机器指令系统而定,取决而定,取决于微程序的个数,其于微程序的个数,其长度就是微指令字的度就是微指令字的长度。度。微指令寄存器:存放从控存微指令寄存器:存放从控存读出的当前微指令。微操作控制字段出的当前微指令。微操作控制字段将操作控制信号送到控制信号将操作控制信号送到控制信号线上,微地址字段指出下一条微地址上,微地址字段指出下一条微地址的形成。的形成。微地址寄存器微地址寄存器:存放将要存放将要访问的下一条微指令地址的下一条微指令地址地址地址转移移逻辑:形成将要:形成将要执行的微指令地址,形成方式:行的微指令地址,形成方式:取指令公操作所取指令公操作所对应的微程序一般从控存的的微程序一般从控存的0地址开始,所以地址开始,所以微程序的人口地址微程序的人口地址0是由硬件控制的。当出是由硬件控制的。当出现分支分支时,通,通过判判别测试字段、微地址字段、和字段、微地址字段、和执行部件的反行部件的反馈信息形成后即微地址。信息形成后即微地址。Cpu设计步步骤:1.拟定指令系定指令系统2.确定确定总体体结构(数据通路)构(数据通路)3.安排安排时序序4.拟定指令流程。根据指令系定指令流程。根据指令系统,写出,写出对应所有机器指所有机器指令的全部微操作,然后列出操作令的全部微操作,然后列出操作时间表表5.确定微指令的控制方式、确定微指令的控制方式、下地址形成方式下地址形成方式、微指令格、微指令格式及微指令字式及微指令字长,编写全部的微指令的代写全部的微指令的代码,最后将,最后将编写的微指令放入控制存写的微指令放入控制存储器中。器中。指令系指令系统是是设计计算机的依据,算机的依据,拟定指令系定指令系统将涉及基本字将涉及基本字长、指令格式、指令指令格式、指令类型、型、寻址方式等内容。根据内存的字址方式等内容。根据内存的字长,可定,可定基本字基本字长8位,位,指令格式:指令格式:单字字长,(双字,(双字长指令,在双字指令,在双字长指令格式中,第二指令格式中,第二个字个字节一般定一般定义为操作数或操作数地址。)操作数或操作数地址。)总体体结构:根据要求构:根据要求设计数据通路数据通路1 1、定、定、定、定义义指令系指令系指令系指令系统统字字长8位,采用一地址指令位,采用一地址指令指令格式指令格式操作操作码3位,地址位,地址码5位位操作操作码000LOAD001STORE010ADD011SUB100BNE其中(其中(101,110,111为今后今后扩展指令留用展指令留用)寻址方式:直接址方式:直接寻址址,为了了简单指令采用指令采用一地址指令一地址指令如如下面程序下面程序Load4将内存将内存4地址的操作数送地址的操作数送ACC累加器累加器Add5将内存将内存5地址的操作数取出与地址的操作数取出与ACC相加相加Stare6将将ACC的内容存入内存的内容存入内存6号地址号地址Bne7判断,判断,结果果Z_flag不不为0,跳,跳转到内存到内存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,PC,均,均为8位位8位位运算器部件运算器部件 ALU RAM 微程序控制微程序控制逻辑部件部件:1.微地址形成部件微地址形成部件2.控制存控制存储器器3.微指令寄存器微指令寄存器4.微地址寄存器微地址寄存器5.译码器器IRPSWPC微地址形成微地址形成电路路微地址微地址寄存器寄存器AR译码器器。微指令寄存器微指令寄存器控制存控制存储器器CM微命令序列微命令序列微命令字段微命令字段微地址字段微地址字段指令代指令代码运行状运行状态微程序控制基本框微程序控制基本框图。数据通路数据通路设计单总线结构构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位,最多定位,最多定义8条机条机器指令器指令数据数据传输范范围 RR,RSSR寻址方式址方式操作操作码操作数操作数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)设计微程序微程序确定微程序流程确定微程序流程图,也就是控制算法流程,也就是控制算法流程图。(2)确定微指令格式)确定微指令格式微指令格式中的操作控制字段取决于微指令格式中的操作控制字段取决于执行部件的子系行部件的子系统需要多少微指令。假定采用直接控制方式,需要多少微指令。假定采用直接控制方式,执行部行部件需要件需要15个微命令,个微命令,则操作控制字段需要操作控制字段需要15位。位。 测试判判别字段取决于微程序流程字段取决于微程序流程图中有多少中有多少处分支分支转移。假定有移。假定有3处分支,分支,则测试判判别字段需要字段需要3位。位。下址字段取决于微程序流程下址字段取决于微程序流程图的的规模。假定微程序共模。假定微程序共用用50条微指令,条微指令,则下址字段至少需要下址字段至少需要6位。位。这是因是因为ROM地址地址译码时,26=64,6位地址可容位地址可容纳64条微指条微指令。令。(3)将微程序)将微程序编译成二成二进制代制代码(4)微程序写入控制存)微程序写入控制存储器器(5)设计硬件硬件电路路 微程序控制器的微程序控制器的设计步步骤在系在系统的一个基本周期的一个基本周期(又称机器周期,一般由几个又称机器周期,一般由几个时钟周期周期组成成)中,一中,一组实现一定操作功能的微命令的一定操作功能的微命令的组合,构成一条微指令。合,构成一条微指令。 强调两点:两点:第一,一条微指令的有效持第一,一条微指令的有效持续时间为一个系一个系统基本周期,基本周期,它表示从它表示从CM中中读出微指令与出微指令与执行行这条微指令的条微指令的时间总和。当从和。当从ROM中中读出下一条微指令后,当前的出下一条微指令后,当前的这条微条微指令即失效。指令即失效。 第二,一条微指令中包含若干个微命令,它第二,一条微指令中包含若干个微命令,它们分分头并行并行地控制地控制执行部件行部件进行相行相应的微操作。的微操作。 微指令除微指令除给出微命令信息外,出微命令信息外,还应给出出测试判判别信息。信息。一旦出一旦出现此信息,此信息,执行行这条微指令条微指令时要要对系系统的有关的有关“状状态标志志”进行行测试,从而,从而实现控制算法流程控制算法流程图的条件的条件分支。微指令中分支。微指令中还包含一个下址字段,包含一个下址字段,该字段将指明字段将指明ROM中下一条微指令的地址。中下一条微指令的地址。 微程序控制器的微程序控制器的结构与微指令的格式密切相关。构与微指令的格式密切相关。上上图是微程序控制器的是微程序控制器的结构框构框图。它由控制存。它由控制存储器、器、微地址寄存器、微命令寄存器和地址微地址寄存器、微命令寄存器和地址转移移逻辑几部几部分分组成。微地址寄存器和微命令寄存器两者的成。微地址寄存器和微命令寄存器两者的总长度即度即为一条微指令的一条微指令的长度,二者合在一起称度,二者合在一起称为微指微指令寄存器。令寄存器。地址地址转移移逻辑:用来形成要用来形成要执行的微指令的地址,形成方式一般有以下几种:行的微指令的地址,形成方式一般有以下几种:取指令公操作所取指令公操作所对应的微程序一般安排在控制存的微程序一般安排在控制存储器的器的0号号单元,所以微程序的入口地址元,所以微程序的入口地址0是由硬件是由硬件强制制规定的。定的。当微程序出当微程序出现分支分支时通通过判断判断测试字段字段微地址字段和微地址字段和执行部行部件的反件的反馈信息形成微地址,包括根据操作信息形成微地址,包括根据操作码转移情况。移情况。微程序控制器微程序控制器执行行过程描述程描述1、从、从CM逐条取出逐条取出“取机器指令的微指令,取机器指令的微指令,执行取指令公操行取指令公操作,作,执行完后,从主存取出的机器指令就已行完后,从主存取出的机器指令就已经存入指令寄存器存入指令寄存器IR2、根据、根据IR中的操作中的操作码,经过地址形成部件,得到地址形成部件,得到这条指令条指令对应的微程序入口地址。并送入微地址寄存器。的微程序入口地址。并送入微地址寄存器。3、从、从CM中逐条取出中逐条取出对应的微指令并的微指令并执行行4、执行完一条机器指令的一段微程序后,又回到取指微程序行完一条机器指令的一段微程序后,又回到取指微程序的人口地址,的人口地址,继续第第1步步4、绘微程序的流程微程序的流程图5、依据微程序的流程、依据微程序的流程图给出微程序出微程序编码常用下地址生成方法:常用下地址生成方法:计数器方法、数器方法、真量方式与断定方式真量方式与断定方式结合方法合方法多路多路转移方法移方法每条机器指令的操作每条机器指令的操作码如何与其微程序人口地址如何与其微程序人口地址对应,通,通过编码方法将指令方法将指令码的状的状态分成不同的几个,在用微地址分成不同的几个,在用微地址进行行编码实验内容:内容:单总线,采用微程序控制,采用微程序控制,寻址方式:采用直接址方式:采用直接(,寄存器,寄存器,寄存器,寄存器间接,接,变址)。址)。微程序控制器控制方式由微指令微程序控制器控制方式由微指令译码产生生取指令取指令PCMAR,PC1 PCMMDRIR执行行addrMAR寻址方式址方式直接直接寻址址指令中指令中给出操作数的地址出操作数的地址MMDRACCLoad地址地址码主存中的数据主存中的数据读入入ACC拟定指令流程和微命令序列。定指令流程和微命令序列。 拟定指令流程定指令流程拟定指令流程和微命令序列。定指令流程和微命令序列。 微命令序列。微命令序列。取指令取指令PCMAR,PC1 PC CS R_NW MMDRIR执行行addrMARMMDRALU(ACC)取指取指取操取操作数作数拟定指令流程和微命令序列。定指令流程和微命令序列。Load:把主存内容把主存内容读入入ACCStore:把把ACC内容存入主存内容存入主存Add:主存内容与主存内容与ACC相加相加Sub:主存内容与主存内容与ACC相减相减Bne:转移移形成控制形成控制逻辑。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-add1100 000101、地址、地址转移移逻辑:用来形成要用来形成要执行的微指令的地址,形成方式一般有以下几行的微指令的地址,形成方式一般有以下几种:种:取指令公操作所取指令公操作所对应的微程序一般安排在控制存的微程序一般安排在控制存储器的器的0号号单元,所以微程序的入口地址元,所以微程序的入口地址0是由硬件是由硬件强制制规定的。定的。当微程序出当微程序出现分支分支时通通过判断判断测试字段字段微地址字段和微地址字段和执行部行部件的反件的反馈信息形成微地址,包括根据操作信息形成微地址,包括根据操作码转移情况。移情况。微程序控制器微程序控制器执行行过程描述程描述(1)、从)、从CM逐条取出逐条取出“取机器指令的微指令,取机器指令的微指令,执行取指令公行取指令公操,操,执行完后,从主存取出的机器指令就已行完后,从主存取出的机器指令就已经存入指令寄存器存入指令寄存器IR(2)、根据)、根据IR中的操作中的操作码,经过地址形成部件,得到地址形成部件,得到这条指条指令令对应的微程序入口地址。并送入微地址寄存器。的微程序入口地址。并送入微地址寄存器。(3)、从)、从CM中逐条取出中逐条取出对应的微指令并的微指令并执行行(4)、)、执行完一条机器指令的一段微程序后,又回到取指微行完一条机器指令的一段微程序后,又回到取指微程序的人口地址,程序的人口地址,继续第第1步步如果下地址如果下地址为01111时,下条微指令的地址,下条微指令的地址为:下地地址的高下地地址的高2位与操作位与操作码组合即合即01OP的的编码;如;如LOAD指令,开始的下地址指令,开始的下地址为:01000如果下地址如果下地址为:10000时,依据,依据ZF标志位志位产生分支。生分支。下一条微指令地址下一条微指令地址为:其他下一条微指令的地址其他下一条微指令的地址为就是微指令中提供的下地就是微指令中提供的下地址。址。WHDL编写写1、定、定义存存储器,存放器,存放验证的指令及其操作数的指令及其操作数2、定、定义控制存控制存储器,存放微程序器,存放微程序3、定、定义进程程进程中完成的操作程中完成的操作为:如果:如果RESET=0,包含,包含PC=0,微地址微地址为0,否,否则在在时钟的上升沿的上升沿时取出微指令,或的取出微指令,或的下地址,依据有效的微命令,下地址,依据有效的微命令,执行相行相应的微操作。的微操作。2、下地址的形成、下地址的形成Load微程序人口地址微程序人口地址01000 8Store010019Add0101010Sub0101111Bne01100122、微程序控制器、微程序控制器执行行过程程A)从控存中逐条从控存中逐条读出出“取机器指令取机器指令”用的微指令,并用的微指令,并执行行取指令公操作,取指令公操作,执行完后,从主存行完后,从主存读出的机器指令放入出的机器指令放入IR.B)根据根据IR中的操作中的操作码,经过地址形成部件得到地址形成部件得到该机器指令机器指令对应的微程序入口地址,并送入微地址寄存器。的微程序入口地址,并送入微地址寄存器。C)从控存中逐条取出从控存中逐条取出对应的微指令并的微指令并执行。行。D)执行完行完对应的的一条机器指令的一段微程序后又回到取的的一条机器指令的一段微程序后又回到取指微程序的入口微。指微程序的入口微。地址。地址。继续A)3微指令微指令编码法法 直接控制法:就是在微指令的操作控制字段中,每一个微命直接控制法:就是在微指令的操作控制字段中,每一个微命令都用一位信息表示,只要将控制字段中表示令都用一位信息表示,只要将控制字段中表示该命令的相命令的相应位位置置1或置或置0就可以打开或关就可以打开或关闭某个控制某个控制门。微命令的。微命令的产生不必生不必经过译码,【控制控制简单,直,直观、操作并行性好,缺点:微指令太、操作并行性好,缺点:微指令太长】上上图中中标明了一个基本机器周期中的控制明了一个基本机器周期中的控制时序信号。例如用上序信号。例如用上一周期的一周期的T4时间按微地址寄存器内容从按微地址寄存器内容从ROM中中读一条微指令,一条微指令,经过一段一段时间后被后被读出,用当前周期的出,用当前周期的T1时间打入到微指令寄打入到微指令寄存器。存器。T2、T3时间用来控制用来控制执行部件行部件进行操作。行操作。T4时间修改微修改微地址寄存器内容并地址寄存器内容并读出下一条微指令。出下一条微指令。 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微地微地1=110000010,2=000010100011,4=001000100000,5=100000000,8=110000100,-LOAD10=110000110,-ADD11=110000111,-12=110010000,13=100000000,14=000000000); 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控制存控制存储器器设计微地址微地址03的下地址位的下地址位01111,说明明应该是根据指令操作是根据指令操作码来形来形成。即下地址的低成。即下地址的低3位是指令操作位是指令操作码 。高。高2位位为01因此因此LOAD指令的开始的微地址是指令的开始的微地址是01000(也可以用其他形成方式)(也可以用其他形成方式)Load01000store01001Add01010Sub01011Bne01100地址地址12的下地址,也要根据运算器的的下地址,也要根据运算器的结果是否位果是否位“0”来判断,来判断,所以其下地址所以其下地址设为10000,以决定下地址是,以决定下地址是13还是是14至于控制信号何至于控制信号何时为“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微程序控制器微程序控制器实验 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= 000000001,1= 110000010,2= 000000011,3= 000001111,4= 000000000,5= 100000000,6= 001000000,7= 000100000,8= 110000100,-LOAD9= 000000101,-STORE 10= 110000110,-ADD 11= 110000111,- 12= 110010000, 13= 100000000, 14= 000000000); 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号