实验六微程序控制单元实验

合集下载

2021年微程序控制器实验报告

2021年微程序控制器实验报告

组成原理No.4实验---欧阳光明(2021.03.07)微程序控制器实验组员:组号:21号时间:周二5、6节【实验目的】(1)掌握时序发生器的组成原理。

(2)掌握微程序控制器的组成原理。

(3)掌握微程序的编制、写入、观察微程序的运行情况【实验设备】TDNCM,【实验原理】图中,微指令格式如下:【实验步骤】将全部微程序指令格式变成二进制代码,可得到如下图所示的二进制代码表。

(一)连接电路图:按照下图所示连接实验电路图。

(3)观察时序信号观察方波信号源的输出端H23,调节电位器W1,使输出波形的频率最慢。

将时序电路中的“STOP”开关置为“RUN”,“STEP”开关置为“EXEC”。

按动START键,测量TS1~TS4各点的波形,比较他们的相互关系,画出波形,并标注测量所得的脉冲宽度,见下图:注:其中TS2~TS4的高电平宽度所测结果与TS1的相同,在图中未标注。

(四)实际操作①编程:将编程开关置为PROM(编程状态)。

将“STATE UNIT”单元中的STEP开关置为“STEP”,STOP开关置为“RUN”状态。

用二进制模拟开关置微地址UA5~UA0。

在MK24~MK1开关上置微代码,置0显示灯亮,置1灭。

按动START键,则将微代码写入到对应的地址单元中。

重复后三步操作,将需要的微代码写入到芯片中。

②校验:将编程开关READ(校验)状态。

将“STATE UNIT”单元中的STEP开关置为“STEP”,STOP开关置为“RUN”状态。

用二进制开关置好微地址UA5~UA0。

按动START键,读出微代码,观察显示灯的状态是否与写入的相同。

若不同,则编写错误,重新编程。

③单步运行:将编程开关置于“RUN(运行)”状态。

将“STATE UNIT”单元中的STEP开关置为“STEP”,STOP开关置为“RUN”状态。

使CLR开关从1→0→1,此时微地址寄存器MA5-MA0清“0”,从而给出运行微指令的入口地址为000000(二进制)。

微程序控制器组与微程序设计实验报告

微程序控制器组与微程序设计实验报告

微程序控制器组与微程序设计实验报告实验目的:1.了解微程序控制器组的组成和工作原理;2.掌握微程序设计的基本方法;3.学习使用微程序设计语言进行微程序编写;4.验证微程序的功能和正确性。

实验仪器:1.微程序控制器组;2.计算机。

实验原理:实验步骤:1.设计微指令集:根据实验要求,设计微指令的功能,并确定每个微指令的格式和编码方式。

2.设计微程序地址译码器:根据微指令的编码方式,设计地址译码器,将微指令的编码转化为实际的地址。

3.设计微程序存储器:根据微指令的格式和编码方式,设计存储器,存储微指令。

可以选择使用只读存储器或者随机存储器。

4.设计微指令执行器:根据微指令的格式和编码方式,设计执行器,执行微指令的功能操作。

可以使用组合逻辑电路或者微控制器实现。

5.进行微程序编写:使用微程序设计语言,根据微指令集的功能要求,编写微程序,并存储到微程序存储器中。

6.连接实验仪器:将微程序控制器组和计算机连接起来,确保数据传输的正确性。

7.运行实验程序:根据实验要求,执行微程序,并通过计算机输出结果。

实验结果:经过实验,微程序控制器组成功控制了计算机的各个部件的操作和数据流。

微程序设计也能够正确的控制计算机的运行,并输出了预期的结果。

实验总结:通过本次实验,我对微程序控制器组的组成和工作原理有了更深入的了解。

微程序设计是一种灵活、可扩展的指令级程序设计方法,可以根据需求设计出各种功能强大的微程序。

通过实验,我学会了使用微程序设计语言进行微程序编写,并验证了微程序的功能和正确性。

微程序控制器组的应用范围广泛,不仅可以用于计算机中,还可以应用于其他各种控制系统中。

本次实验让我对计算机控制系统的理论和实践有了更深入的了解,提高了我在计算机控制领域的专业技能。

微程序控制器_实验报告

微程序控制器_实验报告

微程序控制器_实验报告本次实验使用的是微程序控制器,主要涵盖了微程序控制器的概念、微指令的设计、微指令的执行以及测试和调试方法等。

首先,我们需要了解什么是微程序控制器。

微程序控制器是一种专门用于控制计算机操作的控制器,其中的微指令由微程序控制器产生。

微程序控制器的主要优点是提高了计算机系统的可控性和可编程性,可避免在操作过程中出现复杂的电路切换。

在实验中,我们主要是操作微指令的设计和执行。

微指令需要根据指令的类型以及相应的操作码进行设计,确保计算机能够正确地执行指令。

在设计微指令过程中,我们要考虑到指令执行时需要进行的操作、信号的传递以及各个部分之间的协调。

在微指令设计完成后,需要进行微指令的执行。

微指令执行的过程也是十分关键的,这需要对微指令的执行顺序进行精密设计以保证整个计算机发挥最大的性能。

实验中我们了解了基本的微指令执行步骤,包括状态存储器、微指令计数器、微指令发生器以及微指令存储器等。

除了微指令设计和执行外,测试和调试也是实验中比较重要的步骤。

这一步骤旨在确保整个计算机系统能够正常运行,同时也可以在测试过程中发现和纠正存在的错误。

在测试过程中,我们需要编写测试程序,通过输入不同的指令类型和操作码来测试微指令是否能够正确地执行。

在调试过程中,我们需要通过检查微指令执行的每个步骤,找到代码中存在的错误并进行修正,以保证计算机的正常运行。

在实验中,学习了微程序控制器的基本知识,包括微指令的设计和执行以及测试和调试方法。

这些知识对于计算机专业的学生非常重要,可以帮助他们深入了解计算机系统的运行原理及其基本结构。

同时也可以为今后的工作和研究提供基础知识和经验。

微程序控制器实验报告

微程序控制器实验报告

一、实验目的1、通过实验,进一步理解微程序控制器的组成结构。

理解微程序控制器的控制原理2、加深理解微程序控制器的工作原理。

掌握指令流程与功能3、理解掌握微程序控制器的设计思路与方法二、实验内容与步骤1、微程序控制器的组成原理控制存储器:实现整个指令系统的所有微程序,一般指令系统是规定的由高速半导体存储器构成,容量视机器指令系统而定,取决于微程序的个数,其长度就是微指令字的长度。

微指令寄存器:存放从控存读出的当前微指令。

微操作控制字段将操作控制信号送到控制信号线上,微地址字段指出下一条微地址的形成。

微地址寄存器:存放将要访问的下一条微指令地址地址转移逻辑:形成将要执行的微指令地址,形成方式:取指令公操作所对应的微程序一般从控存的0地址开始,所以微程序的人口地址0是由硬件控制的。

当出现分支时,通过判别测试字段、微地址字段、和执行部件的反馈信息形成后即微地址。

Cpu设计步骤:1.拟定指令系统2.确定总体结构(数据通路)3.安排时序4.拟定指令流程。

根据指令系统,写出对应所有机器指令的全部微操作机器节拍安排,然后列出操作时间表5.确定微指令的控制方式、下地址形成方式、微指令格式及微指令字长,编写全部的微指令的代码,最后将编写的微指令放入控制存储器中。

微程序控制器的设计步骤(1)设计微程序确定微程序流程图,也就是控制算法流程图。

(2)确定微指令格式微指令格式中的操作控制字段取决于执行部件的子系统需要多少微指令。

假定采用直接控制方式,执行部件需要10个微命令,则操作控制字段需要10位。

测试判别字段取决于微程序流程图中有多少处分支转移。

假定有3处分支,则测试判别字段需要3位。

下址字段取决于微程序流程图的规模。

假定微程序共用50条微指令,则下址字段至少需要6位。

这是因为ROM地址译码时,26=64,6位地址可容纳64条微指令。

(3)将微程序编译成二进制代码(4)微程序写入控制存储器(5)设计硬件电路三、实验现象--CPU 头文件cpu_defsLIBRARY 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 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 : INUNSIGNED(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-1DOWNTO 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",9=> "01000001000000000101",10=> "00000000000110000110",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);BEGINIF reset='0' THENadd_r:=(OTHERS =>'0');count <= (OTHERS =>'0');instr_reg := (OTHERS =>'0');acc := (OTHERS =>'0');mdr := (OTHERS =>'0');mar := (OTHERS =>'0');z_flag <='0';mem <= prog;sysbus :=(OTHERS =>'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='1'sysbus := rfill & STD_LOGIC_VECTOR(count);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;ELSEcount <= count;END IF;--IRIF data_r(15)='1' THEN --load_IRinstr_reg := mdr;END IF;IF data_r(9)='1' THEN --Addr_bus='1'sysbus := 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='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 THENz_flag <='1';ELSEz_flag <='0';END IF;acc_out<= acc;--RAMIF 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));ELSEmem(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;END PROCESS;PROCESS(mode,mem_addr)BEGIN--mode=0 -> sysbus--mode=1 -> PC--mode=2 -> result of ALU--mode=3 -> IR--mode=4 -> MAR--mode=5 -> MDR--mode=6 -> memoutput <= (OTHERS =>'0');CASE mode isWHEN "000" =>output<=sysbus_out;WHEN "001" =>output(word_w-op_w-1 DOWNTO 0)<= STD_LOGIC_VECTOR(count);WHEN "010" =>output <= STD_LOGIC_VECTOR(acc_out);WHEN "011" =>output <= IR_out;WHEN "100" =>output(word_w-op_w-1 DOWNTO 0) <= STD_LOGIC_VECTOR(mar_out);WHEN "101" =>output <= mdr_out;WHEN "110" =>output <= mem(TO_INTEGER(mem_addr));WHEN others =>output <= (OTHERS =>'Z');END CASE;END PROCESS;END ARCHITECTURE;现象结果:四、实验体会原本对于控制器的设计还是一片空白,通过实验初步理解微程序控制器的组成结构。

微程序控制实验报告要求

微程序控制实验报告要求

高金山、刘万成老师班微程序控制器实验综合作业安排:(2014年5月)作业内容:1、设计一条新的机器指令,该指令的功能是把一个通用寄存器的内容传送到一个内存单元ADR中,STRA [ ADR ] ,SR即:[ADR] SR注意:《1》、操作码选用要求:按实验课分组组号选择,不同组选用不同的操作码,见后面各组分配表;《2》、微地址选用要求:也是不同组选用不同的首地址,见后面各组分配表;2、实验指导书59页思考题以及60页表格内容(空表格见后面);实验报告总体要求以及作业内容1的具体要求如下:1、对于作业内容1要求写出:(1)你实验课的分组组号;(2)你组要求使用的操作码和微程序首地址;(3)新指令的指令格式;(4)指令功能;(5)每一个执行步骤的说明;(6)完整的微程序;(7)以及每一条微指令控制信号和下地址的解释说明;2、对于作业内容1要在模拟程序上实现扩展和调试验证。

给出进行扩展指令和验证调试过程的贴图;(注意:实验课不同分组的操作码和微程序首地址不同)3、完成作业内容2即59页思考题和60页填表;4、实验体会及总结;5、每个同学要独立完成一份电子版实验报告;6、实验报告命名为:学号--姓名—高老师班—微程序控制实验7、最后一次实验课(中断实验)上课之前,将电子版实验报告交到刘万成老师的邮箱1792742986@附1:作业内容1中,新指令的操作码与实验课对应的组号:附2:实验指导书59页思考题和60页设计型实验表格,见下页。

思考题:1、在进行56页到59页的实验时,你可能已经发现不同指令在执行的过程中都会经过相同的微地址,也就是说,不同指令的微程序也有公用部分。

请你找出这些公共的微指令,说明它们所做的工作。

2、总结机器指令和微程序之间的关系。

3、总结指令的一般流程。

二、设计型实验1.设计几条指令的功能、格式和执行流程,设计每条微指令各字段的具体编码值,包括控制码的各字段、下地址字段、形成下址用到的条件码。

微程序控制器实验2008-05

微程序控制器实验2008-05

8
2009-11-30
3.1 学习编写微代码(书中实验内容1) (12周任务)
将图 12-5 所示的全部微程序按微指令格式变换成二进制代码 将图12-5 12-5所示的全部微程序按微指令格式变换成二进制代码 第1步例:理解机器指令功能 机器指令 LDA STA OUT 20H R5 <- (X) 40H (10) <- R5 60H Bus <- (10) R5 <- (X) and R5
18
2009-11-30
3.2 电路训练及仿真训练(13周任务)
理解实验原理,指令码,IR[7..5],微程序入口地址之间的关系
– IR7,IR6,IR5对应指令码高三位 – 微程序入口地址: 0,1,IR7,IR6,IR5
指令码 二进制 Ir7,ir6,ir5 入口地址 机器指令
20 H 20H H 40 40H H 60 60H H 80 80H A0H C0H E0H
取指令
分析指令
10
2009-11-30
3.1 学习编写微代码(书中实验内容1) (12周任务)
1-22, 确定各微命令初始状态 (二进制代码 ) 第3步例:依据微指令格式编号 依据微指令格式编号1-22, 1-22,确定各微命令初始状态 确定各微命令初始状态( 二进制代码)
11
2009-11-30
3 2009-11-30
实验原理
2 基本概念 •计算机分控制部件和执行部件.控制器就是控制部件,执行部 件包括运算器、存储器、外围设备. •微命令:控制器通过控制线向执行部件发出的各种控制命令. •微操作:执行部件接受微命令后所进行的操作.
(微命令是微操作的控制信号,微操作是微命令的执行过程)

微程序控制器实验

微程序控制器实验

评语: 课中检查完成的题号及题数:课后完成的题号与题数:成绩: 自评成绩:实验报告实验名称:微程序控制器实验日期:班级:学号:姓名:一、实验目的:1.掌握微程序控制器的组成原理。

2.掌握微程序的编制、写入,观察微程序的运行过程。

二、实验内容:1.了解如何将微码加载到微控存中,了解指令并运行。

2.通过微程序控制器实验能得简单运算结果。

3.设计并修改电路,编写用微程序实现存储器中两个单字节十六进制数的加法运算,结果输出至OUT单元。

三、项目要求及分析:要求:操作数由IN单元输入至MEM,在由MEM中读出操作数并在ALU中运算。

四、具体实现:1. 按图1-3-10 所示连接实验线路,仔细查线无误后接通电源。

如果有‘滴’报警声,说明总线有竞争现象,应关闭电源,检查接线,直到错误排除。

图1-3-10 实验接线图2. 对微控器进行读写操作,分两种情况:手动读写和联机读写。

1) 手动读写进行手动读或是写,都需要手动给出地址,系统专门安排了一个ADDR 单元,做为地址输入。

ADDR 单元原理如图1-3-11 所示,可以看出本单元实为一个加减计数器。

当开关为‘加1’档时,在T2 的下沿计数器进行加1 计数,当开关为‘减1’档时,在T2 的下沿计数器进行减1计数,当开关置为‘置数’档时,计数器置初值,其作用相当于直通,SA7…SA0 的输出值就是二进制开关组的值。

在实验中选择什么档位,取决于写入数据的地址是否连续,如果是连续地址,选择‘加1’或是‘减1’档会方便一些。

如果是离散地址,选择‘置数’档会方便一些。

图1-3-11 ADDR 单元原理图(1) 手动对微控器进行编程(写)①按图1-3-12 接好线(部分实验接线被改变,手动读写微控器完成后应予恢复)。

②将MC 单元编程开关置为‘编程’档,时序单元状态开关置为‘单步’档,ADDR单元状态开关置为‘置数’档。

③使用ADDR 单元的低6 位SA5…SA0 给出微地址MA5…MA0,微地址可以通过MC 单元的MA5…MA0 微地址灯显示。

微程序控制器实验

微程序控制器实验

计算机科学与技术系实验报告专业名称计算机科学与技术课程名称计算机组成原理项目名称微程序控制器实验班级学号姓名同组人员实验日期一、实验目的与要求实验目的(1)掌握微程序控制器的组成原理(2)掌握微程序控制器的编制、写入,观察微程序的运行过程实验要求(1)实验之前,应认真准备,写出实验步骤和具体设计内容,否则实验效率会很低,一次实验时间根本无法完成实验任务,即使基本做对了,也很难说懂得了些什么重要教学内容;(2)应在实验前掌握所有控制信号的作用,写出实验预习报告并带入实验室; (3)实验过程中,应认真进行实验操作,既不要因为粗心造成短路等事故而损坏设备,又要仔细思考实验有关内容,把自己想不明白的问题通过实验理解清楚; (4)实验之后,应认真思考总结,写出实验报告,包括实验步骤和具体实验结果,遇到的问题和分析与解决思路。

还应写出自己的心得体会,也可以对教学实验提出新的建议等。

实验报告要交给教师评阅后并给出实验成绩;二、实验逻辑原理图与分析画实验逻辑原理图逻辑原理图分析地址转移逻辑微地址寄存器控制存储器地址译码P 字段控制字段状态条... ...微命令信号指令寄存器IROP微程序控制器的基本任务是完成当前指令的翻译个执行,即将当前指令的功能转换成可以控制的硬件逻辑部件工作的微命令序列,完成数据传送和各种处理操作。

它的执行方法就是将控制各部件动作的微命令的集合进行编码,即将微命令的集合仿照机器指令一样,用数字代码的形式表示,这种表示成为微指令。

这样就可以用一个微指令序列表示一条机器指令,这种微指令序列称为微程序。

微程序存储在一种专用的存储器中,称为控制存储器。

三、数据通路图及分析(画出数据通路图并作出分析)(1)连接实验线路,检查无误后接通电源。

如果有警报声响起,说明有总线竞争现象,应关闭电源,检查连线,直至错误排除。

(2)对微控制器进行读写操作,分两种情况:手动读写和联机读写。

1、手动读写手动对微控制器进行编程(写)1.将时序与操作台单元的开关KK1置为“停止”档,KK3置为“编程”档,KK4置为“控存”档,KK5置为“置数”档2.使用CON单元的SD05——SD00给出微地址,IN单元给出低8位应写入的数据,连续两次按动时序与操作台单元的ST,将IN单元的数据写到该单元的低8位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六 微程序控制单元实验
一、实验目的
1. 熟悉微程序控制器的工作原理。
2. 掌握微程序编制及微指令格式。

二、实验要求
按照实验步骤完成实验项目,熟悉微程序的编制、写入、观察运行状态。

三、实验原理
⒈ 微程序控制电路
微程序控制器的组成见图6-1,其中控制存储器采用4片6116静态存储器 ,微命令
寄存器32位,用三片8D触发器(273)和一片4D(175)触发器组成。微地址寄存器6位,
用三片正沿触发的双D触发器(74)组成,它们带有清零端和置位端。在不判别测试的情况
下,T2时刻打入微地址寄存器的内容即为下一条微指令地址。当T4时刻进行测试判别时,
转移逻辑满足条件后输出的负脉冲通过置位端将某一触发器输出端置为“1”状态,完成地
址修改。

⒉ 微指令格式
表6-1
M25 M24 M23 M22 M21 M20 M19 M18
C B A AR 未用 P(3) A9 A8
M17 M16 M15 M14 M13 M12 M11 M10
CE LOAD CN M S0 S1 S2 S3
M9 M8 M7 M6 M5 M4 M3 M2
P(2)
LDAR LDPC LDIR LDDR2 LDDR1 LDR0 WE

8 7 6 5 4 3 M1 M0
UA0 UA1 UA2 UA3 UA4 UA5 P(1) SW-B

A字段 B字段

C B A 选择
0 0 0 禁止
0 0 1 PC-B
0 1 0 ALU-B
0 1 1 299-B
1 0 0 Rs-B
1 0 1 Rd-B
1 1 0 保留位
1 1 1 保留位
其中UA5~UA0为6位的后续微地址,A、B二译码字段,分别由6个控制位译码
输出多位。B段中的PX3、PX2、PX1 三个测试字位。其功能是根据机器指令及相应微代
码进行译码,使微程序转入相应的微地址入口,从而实现微程序的顺序、分支、循环运行。

M20 M9 M1 选择 测试字_
PX3 PX2 PX1
0 0 0 关闭测试
0 0 1 P(1) 识别操作码
0 1 0 P(2) 判寻址方式
0 1 1 P(Z) Z标志测试
1 0 0 P(I) 中断响应
1 0 1 P(D) 中断服务
1 1 0 P(C) C标志测试
1 1 1 保留位
⒊ 微程序流程与代码
图6-2为几条机器指令对应的参考微程序流程图,将全部微程序按微指令格式变成二
进制代码,可得到模型机(一)所例举的8位指令代码。

图6-2 微程序流程图
四、实验内容
(一)微程序的编写
为了解决微程序的编写,本装置设有微程序读写命令键,学生可根据微地址和微指令
格式将微指令代码以快捷方式写入到微程序控制单元。具体的操作方法是按动位于本实验装
置右中则的红色复位按钮使系统进入初始待令状态。再按动【增址】命令键使工作方式提示
位显示“H”。
微程序存贮器读写的状态标志是:显示器上显示8个数字,左边1、2位显示实验装
置的当前状态,左边3、4位显示区域号(区域的分配见表7-2),左边5、6位数字是微
存贮单元地址,硬件定义的微地址线是ua0~ua5共6根,因此它的可寻址范围为
00H~3FH;右边2位数字是该单元的微程序,光标在第7位与第8位之间,表示等待修

改单元内容。


表6-2

区域号 微程序区对应位空间 对应位控制功能
0 31··············24 C B A AR 保留 PX3 A9 A8
1 23··············16 CE LOAD CN M S0 S1 S2 S3
2 15···············08 PX2 LDAR LDPC LDIR LDR2 LDR1 LDR0 WE
3 07···············00 UA0 UA1 UA2 UA3 UA4 UA5 PX1 SW-B

用【读】命令键可以对微程序存贮器进行检查(读出)或更改(写入)。对微程序存
贮器读写,一般应先按MON,使实验系统进入初始待命状态。然后输入所要访问的微程序
区域地址,再按【读】命令键,实验系统便以该区域的00H作为起始地址,进入微程序存
贮器读写状态。
下面举例说明操作规程:

按键 8位LED显示 说 明

返回】
D Y _ H P. 返回初始待命状态


读】
D Y _ H P. 初始待命状态,按【读】键无效

0 D Y _ H 0 按数字键0,从0区域0地址开始

读】
C n 0 0 0 0 X X 按【读】命令键,进入微程序读状态,左边第3位

起显示00(区域号)、00(微地址)、XX(该微

序单元的内容),光标闪动移至第7位
55 C n 0 0 0 0 5 5 按55键,将内容写入00区域00H单元

增址】
C n 0 0 0 1 X X 按【增址】命令键,读出00区域下一个单元

01H,光标重新移至第7位
AA C n 0 0 0 1 A A 按AA键,将内容写入00区域01H单元

返回】
D Y _ H P. 返回初始待命状态

1 D Y _ H 1 再按数字键1,从1区域0地址开始

读】
C n 0 1 0 0 X X 按【读】命令键,进入微程序读状态,左边第3位

起显示01(区域号)、00(微地址)、XX(该微

序单元的内容),光标闪动移至第7位
55 C n 0 1 0 0 5 5 按55键,将内容写入01区域00H单元

增址】
C n 0 1 0 1 X X 按【增址】命令键,读出01区域下一个单元

01H,光标重新移至第7位
AA C n 0 1 0 1 A A 按AA键,将内容写入01区域01H单元

返回】
D Y _ H P. 按【返回】退出存储操作返回初始状态


按以上所说明的操作规程,通过键盘在微地址00H单元所对应的四个区域地址分别输
入55H,在微地址01H单元所对应的四个区域地址分别输入0AAH。

(二)手动方式下的微地址打入操作
微程序控制器的组成见图6-1,其中微命令寄存器32位,用三片8D触发器(273)和
一片4D(175)触发器组成。它们的清零端由CLR来控制微控制器的清零。它们的触发端
CK接T2,在时序节拍的T2时刻将微程序的内容打入微控制寄存器(含下一条微指令地址)。
⑴ 微地址控制原理

图6-3 微地址控制原理图

⑵ 微地址控制单元的实验连接

图6-4 实验连线示意图
按图6-5所示,连接实验电路:

① 总线接口连接:用8芯扁平线连接图6-4
中所有标明“”或“”图案
的总线接口。
② 时钟信号“”连接:用双头实验导线连接图7-4中所有标明“”图案的插

(注:Dais-CMH的时钟信号已作内部连接)。

⑶ 微地址的打入操作
在“L”状态下,首先令SW-B=0,然后向数据开关置数,再按【单步】键,在机器
周期的T2时刻把数据开关的内容打入微地址锁存器。实验步骤如下:
注:【单步】键的功能是启动时序电路产生T1~T4四拍单周期脉冲
⑷ 微地址的修改与转移
按图6-3所示,微地址锁存器的置位端R受CE5~CE0控制,当测试信号CE5~CE0
输出负脉冲时,通过锁存器置位端R将某一锁存器的输出端强行置“1”,实现微地址的修
改与转移。
按微程序流程图6-2所示的微控制流程,对指令译码寄存器IR分别打入微控制流程
定义的操作码20H、40H、60H、80H、0A0H,然后打入流程图定义的基地址08H,按
【单步】键,在机器周期T4节拍按微控制流程对IR指令寄存器的内容进行测试和判别,
使后续微地址转向与操作码相对应的微程序入口地址。举例操作如下:

① 当IR寄存器为20H、微地址为08H,按【单步】键后微地址为09H。

② 当IR寄存器为60H、微地址为08H,按【单步】键后微地址为0BH。
注:【单步】键的功能是启动时序电路产生T1~T4四拍单周期脉冲

五、实验思考题

思考题6.1:本次实验采用的控制存储器芯片属于何种类型的存储器?控制存储器的
单元数与字长分别为多少?本机采用的微指令格式如何?IN,ADD,STA,OUT,JMP
指令对应的微程序的长度分别是多少?

相关文档
最新文档