实验八微程序控制器设计

上传人:zuime****idai 文档编号:243321538 上传时间:2024-09-20 格式:PPT 页数:49 大小:645KB
返回 下载 相关 举报
实验八微程序控制器设计_第1页
第1页 / 共49页
实验八微程序控制器设计_第2页
第2页 / 共49页
实验八微程序控制器设计_第3页
第3页 / 共49页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,实验八微程序控制器设计,一、实验目的:,1,、,进一步理解,微程序控制器,的组成结构。理解微程序控制器的控制原理,掌握微指令格式和各字段功能。,2,、,加深理解,微程序控制器,的工作原理。掌握指令流程与功能,3,、理解掌握微程序控制器的设计思路与方法,掌握微程序的编制、写入、观察微程序的运行,学习基本指令的执行流程。,二、实验原理,1,、微程序控制器的组成原理,控制存储器,:,实现整个指令系统的所有微程序,一般指令系统是规定的由高速半导体存储器构成,容量视机器指令系统而定,取决于微程序的个数,其长度就是微指令字的长度。,微指令寄存器:存放从控存读出的当前微指令。微操作控制字段将操作控制信号送到控制信号线上,微地址字段指出下一条微地址的形成。,微地址寄存器,:,存放将要访问的下一条微指令地址,地址转移逻辑:形成将要执行的微指令地址,形成方式:,取指令公操作所对应的微程序一般从控存的,0,地址开始,所以微程序的人口地址,0,是由硬件控制的。当出现分支时,通过判别测试字段、微地址字段、和执行部件的反馈信息形成后即微地址。,Cpu,设计步骤:,拟定指令系统,确定总体结构(数据通路),安排时序,拟定指令流程。根据指令系统,写出对应所有机器指令的全部微操作,然后列出操作时间表,确定微指令的控制方式、,下地址形成方式,、微指令格式及微指令字长,编写全部的微指令的代码,最后将编写的微指令放入控制存储器中。,指令系统是设计计算机的依据,拟定指令系统将涉及基本字长、指令格式、指令类型、寻址方式等内容。根据内存的字长,可定基本字长,8,位,,指令格式:单字长,(双字长指令,在双字长指令格式中,第二个字节一般定义为操作数或操作数地址。),总体结构:根据要求设计数据通路,1,、定义指令系统,字长,8,位,采用一地址指令,指令格式 操作码,3,位,地址码,5,位,操作码,000 LOAD,001 STORE,010 ADD,011 SUB,BNE,其中(,101,,,110,,,111,为今后扩展指令留用,),寻址方式:直接寻址 ,为了简单指令采用,一地址指令 如下面程序,Load 4,将内存,4,地址的操作数送,ACC,累加器,Add 5,将内存,5,地址的操作数取出与,ACC,相加,Stare 6,将,ACC,的内容存入内存,6,号地址,Bne,7,判断,结果,Z_flag,不为,0,,跳转到内存,7,地址所指的地址执行指令,操作码对应的编码,LOAD 000,,,STORE 001,,,ADD010,,,SUB011,,,BNE100,内存中储存的机器指令,内存地址,指令,描述,0,Load 4,从,mem(4),取数到,ACC,1,Add 5,从,mem(5),取数到总线,与,ACC,中的数加,2,Store 6,结果存储在,MEM,(,6,),3,Bne 7,结果不为,0,,跳到,7,4,2,数据,2,5,3,数据,3,其它,0,全为,0,参考设计,指令,编码,Load 4,000 00100,Add 5,010 00101,Store 6,001 00110,Bne 7,100 00111,机器指令的编码(机器语言),指令执行的基本过程,取指令,执行指令,取操作数,操作数在内存,无操作数或操作数在,CPU,3,、方案选择,8,位模型机设计,单总线,采用微程序控制方式。寻址方式:直接,(寄存器,寄存器间接和变址寻址),微程序控制方式由微指令译码器产生,一条机器指令分成若干步执行,每一步需要若干个微命令及微指令,若干条微指令组成一段微程序。放入控制存储器。,微程序执行过程:,(,1,)从存储器中逐条取出,从控制存储器中逐条取出“取指微指令”执行取指令公操作。,(,2,)、根据指令操作码,经过微地址形成部件,得到该机器指令微程序入口地址,并送入微地址寄存器,,(,3,)、从控制存储器逐条读出对应的微指令并执行,(,4,)、执行完一条机器指令对应的微程序后又回到取指微程序的入口微地址,继续第一步(,1,),(,5,)、采用微程序的控制,设计微指令的格式 、 操作字段,15,位,下地址字段,5,位,(,6,) 操作控制字段:采用直接控制方法,位数与设计的微命令的个数一致,,3,、确定数据通路,含有那些部件,部件功能,之间的连接、指令信息,地址信息,数据信息传递的路径,从而得到所需要的位命令 (,15,个),寄存器部件,ACC, MDR, MAR, IR, PC,,均为,8,位,8,位,运算器部件,ALU RAM,微程序控制逻辑部件 :,微地址形成部件,控制存储器,微指令寄存器,微地址寄存器,译码器,IR,PSW,PC,微地址形成,电路,微地址,寄存器,AR,译码器,。,微指令寄存器,控制存储器,CM,微命令序列,微命令字段,微地址字段,指令代码,运行状态,微程序控制基本框图,。,数据通路设计 单总线结构,8,位,主要包括:,确定总体结构。,cs,片选,用,MAR,的内容设置存储器地址,R_nw,读,不可写,当,R_N,无效且,CS,有效时,,MDR,的内容写入存储器中,Alu+add,ALU,中执行加,Alu_sub,ALU,中执行减,Acc_bus,ACC,总线,Load_acc,总线,ACC,Pc_bus,P,总线,Z,Load_IR,总线,IR,Load_MAR,总线,MDR,MDR_bus,MDR,总线,Load_MDR,将总线的数据装入,MDR,ALU_ACC,ALU,的结果送,ACC,INC_PC,PC+1=PC,ADDR_bus,用,IR,中指令的操作码部分驱动总线,4,、拟定指令系统。,3,位,5,位,操作码,地址码,指令格式,寻址方式,直接寻址,指令中给出操作数的地址,指令系统设计:,load, store, add, sub, bne,格式、寻址方式、指令类型设置,操作码,3,位,最多定义,8,条机器指令,数据传输范围,RR, RS SR,寻址方式,操作码,操作数,0,7,5,4,机器指令格式,为了简单,指令均为一地址指令,指令字长,8,位,编码,000 001 010 011 100 101 110 111,设计微命令,微操作控制信号产生,在微程序控制器中,微操作控制信号由微指令产生,并且可以重复使用。,控制存储器用来实现整个指令系统的所有微程序,一般指令系统是固定的,所以实现指令系统的微程序也是固定的,因此控制存储器程序也是固定的。一般采用高速半导体存储器。其容量视机器指令系统而定。即取决于微程序的数量,其字长等于微指令的长度。,微程序控制器的设计步骤,IR,PSW,PC,微地址形成,电路,微地址,寄存器,AR,译码器,。,微指令寄存器,控制存储器,CM,微命令序列,微命令字段,微地址字段,指令代码,运行状态,微程序控制基本框图,。,可根据需要扩展,19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4,0,Load-PC,ACC-bus,Load-ACC,PC-bus,Load-IR,Load-MAR,MDR-bus,Load-MDR,ALU-ACC,INC-PC,Addr-bus,CS,R- NW,ALU-sub,下址,ALU-add,根据微命令表,设计微指令:,微指令设计,采用直接控制 水平微指令,微命令的位置安排任意,基本格式如下:,微指令的编码,操作控制字段,下地址字段,采用直接控制方法,15,个控制信号,,5,位下地址,微指令格式,(,1,)设计微程序,确定微程序流程图,也就是控制算法流程图。,(,2,)确定微指令格式微指令格式中的操作控制字段取决于执行部件的子系统需要多少微指令。假定采用直接控制方式,执行部件需要,15,个微命令,则操作控制字段需要,15,位。,测试判别字段取决于微程序流程图中有多少处分支转移。假定有,3,处分支,则测试判别字段需要,3,位。,下址字段取决于微程序流程图的规模。假定微程序共用,50,条微指令,则下址字段至少需要,6,位。这是因为,ROM,地址译码时,,2,6,=64,,,6,位地址可容纳,64,条微指令。,(,3,)将微程序编译成二进制代码,(,4,)微程序写入控制存储器,(,5,)设计硬件电路,微程序控制器的设计步骤,在系统的一个基本周期,(,又称机器周期,一般由几个时钟周期组成,),中,一组实现一定操作功能的微命令的组合,构成一条微指令。,强调两点:,第一,一条微指令的有效持续时间为一个系统基本周期,它表示从,CM,中读出微指令与执行这条微指令的时间总和。当从,ROM,中读出下一条微指令后,当前的这条微指令即失效。,第二,一条微指令中包含若干个微命令,它们分头并行地控制执行部件进行相应的微操作。,微指令除给出微命令信息外,还应给出测试判别信息。一旦出现此信息,执行这条微指令时要对系统的有关,“,状态标志,”,进行测试,从而实现控制算法流程图的条件分支。微指令中还包含一个下址字段,该字段将指明,ROM,中下一条微指令的地址。,微程序控制器的结构与微指令的格式密切相关。,上图是微程序控制器的结构框图。它由控制存储器、微地址寄存器、微命令寄存器和地址转移逻辑几部分组成。微地址寄存器和微命令寄存器两者的总长度即为一条微指令的长度,二者合在一起称为微指令寄存器。,地址转移逻辑:,用来形成要执行的微指令的地址,形成方式一般有以下几种:,取指令公操作所对应的微程序一般安排在控制存储器的,0,号单元,所以微程序的入口地址,0,是由硬件强制规定的。,当微程序出现分支时通过判断测试字段,微地址字段和执行部件的反馈信息形成微地址,包括根据操作码转移情况。,微程序控制器执行过程描述,1,、从,CM,逐条取出“取机器指令的微指令,执行取指令公操作,执行完后,从主存取出的机器指令就已经存入指令寄存器,IR,2,、根据,IR,中的操作码,经过地址形成部件,得到这条指令对应的微程序入口地址。并送入微地址寄存器。,3,、从,CM,中逐条取出对应的微指令并执行,4,、执行完一条机器指令的一段微程序后,又回到取指微程序的人口地址,继续第,1,步,4,、绘微程序的流程图,5,、依据微程序的流程图给出微程序编码,常用下地址生成方法:,计数器方法、,真量方式与断定方式结合方法,多路转移方法,每条机器指令的操作码如何与其微程序人口地址对应,通过编码方法将指令码的状态分成不同的几个,在用微地址进行编码,实验内容:单总线,采用微程序控制,寻址方式:采用直接( ,寄存器,寄存器间接,变址)。,微程序控制器控制方式由微指令译码产生,取指令,PCMAR,,,PC,1 PC,MMDRIR,执行,addrMAR,寻址方式,直接寻址,指令中给出操作数的地址,MMDRACC,Load,地址码,主存中的数据读入,ACC,拟定指令流程和微命令序列。,拟定指令流程,拟定指令流程和微命令序列。,微命令序列。,取指令,PCMAR,,,PC,1 PC,CS R_NW MMDRIR,执行,addrMAR,MMDRALU,(,ACC,),取指,取操作数,拟定指令流程和微命令序列。,Load:,把主存内容读入,ACC,Store:,把,ACC,内容存入主存,Add:,主存内容与,ACC,相加,Sub:,主存内容与,ACC,相减,Bne:,转移,形成控制逻辑。,00001,19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4,0,Load-PC,ACC-bus,Load-ACC,PC-bus,Load-IR,Load-MAR,MDR-bus,Load-MDR,ALU-ACC,INC-PC,Addr-bus,CS,R- NW,ALU-sub,下址,ALU-add,1100 00010,1,、地址转移逻辑:,用来形成要执行的微指令的地址,形成方式一般有以下几种:,取指令公操作所对应的微程序一般安排在控制存储器的,0,号单元,所以微程序的入口地址,0,是由硬件强制规定的。,当微程序出现分支时通过判断测试字段,微地址字段和执行部件的反馈信息形成微地址,包括根据操作码转移情况。,微程序控制器执行过程描述,(,1,)、从,CM,逐条取出,“,取机器指令的微指令,执行取指令公操,执行完后,从主存取出的机器指令就已经存入指令寄存器,IR,(,2,)、根据,IR,中的操作码,经过地址形成部件,得到这条指令对应的微程序入口地址。并送入微地址寄存器。,(,3,)、从,CM,中逐条取出对应的微指令并执行,(,4,)、执行完一条机器指令的一段微程序后,又回到取指微程序的人口地址,继续第,1,步,如果下地址为,01111,时,下条微指令的地址为:,下地地址的高,2,位与操作码组合即,01 OP,的编码;如,LOAD,指令,开始的下地址为:,01000,如果下地址为:,10000,时,依据,ZF,标志位产生分支。下一条微指令地址为:,其他下一条微指令的地址为就是微指令中提供的下地址。,WHDL,编写,1,、定义存储器,存放验证的指令及其操作数,2,、定义控制存储器,存放微程序,3,、定义进程,进程中完成的操作为:如果,RESET=0,,包含,PC=0,,微地址为,0,,否则在时钟的上升沿时取出微指令,或的下地址,依据有效的微命令,执行相应的微操作。,2,、下地址的形成,Load,微程序人口地址,01000 8,Store 010019,Add 0101010,Sub 0101111,Bne 0110012,2,、微程序控制器执行过程,A),从控存中逐条读出,“,取机器指令,”,用的微指令,并执行取指令公操作,执行完后,从主存读出的机器指令放入,IR.,B),根据,IR,中的操作码,经过地址形成部件得到该机器指令对应的微程序入口地址,并送入微地址寄存器。,C),从控存中逐条取出对应的微指令并执行。,D,)执行完对应的的一条机器指令的一段微程序后又回到取指微程序的入口微。,地址。继续,A),3,微指令编码法,直接控制法:就是在微指令的操作控制字段中,每一个微命令都用一位信息表示,只要将控制字段中表示该命令的相应位置,1,或置,0,就可以打开或关闭某个控制门。微命令的产生不必经过译码,,【,控制简单,直观、操作并行性好,缺点:微指令太长,】, ,上图中标明了一个基本机器周期中的控制时序信号。例如用上一周期的,T4,时间按微地址寄存器内容从,ROM,中读一条微指令,经过一段时间后被读出,用当前周期的,T1,时间打入到微指令寄存器。,T2,、,T3,时间用来控制执行部件进行操作。,T4,时间修改微地址寄存器内容并读出下一条微指令。,PC,AR,IR,时,公共操作,LOAD,add,store,sub,bne,and,T0,PC_B,LDAR,LDPC,T1,CE,OE,T2,MDR_B,LDIR,T3,Addr_B,LDAR,T4,CE,OE,CE,OE,ACC_B,LDDR,CE,OE,CE,OE,CE,OE,T5,MDR_B,LDAC,MDR_B,ALU_ACC,ALU_ADD,CE,MDR_B,ALU_ACC,ALU_SUB,MDR_B,LDPC,DR_B,ALU_ACC,ALU_AND1,安排指令时间表,微指令编码,操作码 地址码,地址转移逻辑,IR,微地址寄存器,地址译码,控制存储器,操作控制字段,顺序控制字段,微命令操作信号,逻辑程序入口,微指令,一条微指令的有效持续时间为一个系统基本周期,微程序编码,00,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,00001,01,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,00010,02,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,00011,03,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,01111,04,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,00000,05,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,00000,06,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,00000,07,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,00000,08,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,00100,09,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,00101,10,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,00110,11,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,00111,12,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,10000,13,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,00000,19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4,0,Load-PC,ACC-bus,Load-ACC,PC-bus,Load-IR,Load-MAR,MDR-bus,Load-MDR,ALU-ACC,INC-PC,Addr-bus,CS,R- NW,ALU-sub,下址,ALU-add,微地,1= 110000010,2= 000010100011,4= 001000100000,5= 100000000,8= 110000100,-LOAD,10= 110000110,-ADD,11= 110000111,-,12= 110010000,13= 100000000,14= 000000000);,19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4,0,Load-PC,ACC-bus,Load-ACC,PC-bus,Load-IR,Load-MAR,MDR-bus,Load-MDR,ALU-ACC,INC-PC,Addr-bus,CS,R- NW,ALU-sub,下址,ALU-add,取指,Addr_bus,Load_MAR,控制存储器设计,微地址,03,的下地址位,01111,,说明应该是根据指令操作码来形成。即下地址的低,3,位是指令操作码 。高,2,位为,01,因此,LOAD,指令的开始的微地址是,01000,(也可以用其他形成方式),Load,01 000,store 01 001,Add 01 010,Sub 01 011,Bne 01 100,地址,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,等不方便定义的类型,一般将第一个枚举量(最左边)编码为,0,CONSTANT 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 IS,TYPE optable IS ARRAY(opcode) OF STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);-,数组有,5,个元素,其他均,0,CONSTANT trans_table:optable :=(000, 001, 010, 011, 100);,FUNCTION op2slv(op:IN opcode) RETURN STD_LOGIC_VECTOR IS,BEGIN,RETURN 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 IS,PORT( 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);-,微指令,R,op_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 IS,TYPE mem_array IS ARRAY (0 TO 2*(word_w-op_w)-1) OF STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);-,定义,RAM,SIGNAL 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,-LOAD,9= 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);,EGIN,PROCESS(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 THEN,add_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 controller,data_r := code(TO_INTEGER(add_r);,IF data_r(4 DOWNTO 0)=01111 THEN -,判断下地址,temp:=01 ,add_r := UNSIGNED(temp);,ELSIF data_r(4 DOWNTO 0)=10000 THEN,IF z_flag=1 THEN,add_r:=01110;,ELSE,add_r :=01101;,END IF;,ELSE,add_r := UNSIGNED(data_r(4 DOWNTO 0);,END IF;,data_r_out =data_r;,add_r_out = add_r;,-PC,IF data_r(16)=1 THEN -PC_bus=1,sysbus := rfill ,END IF;,IF data_r(19)=1 THEN -load_PC=1,count = UNSIGNED(mdr(word_w-op_w-1 DOWNTO 0);,ELSIF data_r(10)=1 THEN -INC_PC=1,count = count+1;,ELSE,count = count;,END IF;,-IR,IF data_r(15)=1 THEN -load_IR,instr_reg := mdr;,END IF;,IF data_r(9)=1 THEN -Addr_bus=1,sysbus := rfill ,END IF;,op = instr_reg(word_w-1 DOWNTO word_w-op_w);,IR_out = instr_reg;,op_out =op;,-ALU,IF data_r(17)=1 THEN -load_ACC=1,acc:=UNSIGNED(mdr);,END IF;,IF data_r(11)=1 THEN -ALU_ACC=1,IF data_r(6)=1 THEN -ALU_add=1,acc := 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=1,sysbus := STD_LOGIC_VECTOR(acc);,END IF;,IF acc=zero THEN,z_flag =1;,ELSE,z_flag =0;,END IF;,acc_out= acc;,-RAM,IF data_r(14)=1 THEN -load_MAR=1,mar := UNSIGNED(sysbus(word_w-op_w-1 DOWNTO 0);,ELSIF data_r(12)=1 THEN -load_MDR=1,mdr := sysbus;,ELSIF data_r(8)=1 THEN -CS=1,IF data_r(7)=1 THEN -R_NW=1,mdr := mem(TO_INTEGER(mar);,ELSE,mem(TO_INTEGER(mar)=mdr;,END IF;,END IF;,IF data_r(13)=1 THEN -MDR_bus=1,sysbus:=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) -,查看,ALU,output -,查看,IR,output -,查看,MAR,output(word_w-op_w-1 DOWNTO 0) -,查看,MDR,output -,查看,MEM,output ,output Z);,END CASE;,END PROCESS;,END ARCHITECTURE;,实验二,在实验内容一的基础上增加寄存器寻址,寄存器的个数自己定,如增加一个寄存器见下图,增加与,AND,和空操作,NOP,指令,修改实验内容一的程序,,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!