搜档网
当前位置:搜档网 › 微程序控制器实验报告

微程序控制器实验报告

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

微程序控制器实验

预习报告

1.微程序控制器的组成和工作原理。微程序控制器主要由控制存储器、微指令寄存器和地址转移逻辑三大部分组成。其工作原理分为:一、将程序和数据通过输入设备送入存储器;二、启动运行后,从存储器中取出程序指令送到控制器去识别,分析该指令要求什么事;三、控制器根据指令的含义发出相应的命令(如加法、减法),将存储单元中存放的操作数据取出送往运算器进行运算,再把运算结果送回存储器指定的单元中;四、运算任务完成后,就可以根据指令将结果通过输出设备输出

2.微程序、微指令、微命令之间的关系。一系列微指令的有序集合称为微程序。

在微程序控制方式之下,从控制存储器中取出,完成一个或几个微操作的命令称为微指令。

控制部件通过控制线向执行部件发出各种控制命令, 通常把这种控制命令叫做微命令。

所以总的来说:微程序包含微指令,而每条微指令包含的微命令控制。

3. 微指令、微程序的设计及调试。

在微程序流程图中,根据每个状态的微指令,将其进行编码,设计出所需硬件及执行效率较高的微程序控制电路,然后进行调试。

思考题:

1. 举例说明实验中出现的基本概念:微命令、微操作、微指令、微程序?

微命令:控制器发出的每个控制信号,如对运算单元的控制m cn s3 s2 s1

s0 发出的010101 等。

微操作:由微命令控制实现的最基本的操作称为微操作。如发出运算器加运算的微命令后,运算器进行加法计算,就称为微操作。微指令:完成一个或几个微操作的指令。如控制器进行存数据的命令后,需要有we信号有效,pc 保持,来控制这些的指令即为微指令。微程序:微程序包含微指令。如微程序流程中包括很多微指令控制,进行一些加减运算,存储数据,地址自加一等等。

2.解释并比较微程序控制器的几种设计方法?微序列控制器通过吧控制信号存储在一个查找Rom,(1) 用水平编码生成微操作(2) 用垂直编码生成微操作(3) 从微代码直接产生控制信号。

3.微程序控制器的控制对象、手段及方法?控制器如何取指令?微程序

控制器控制对象分为硬件方面和软件方面,硬件方面为数据通路的控制信号,软件方面为测试程序的控制信号。

控制器根据状态机的不同状态进行指令读取,在不同状态下取得的指令也不同。

4.控制器的功能?如何取指令、分析指令、执行指令?通过下址取得指

令,根据控制信号进行不同信号的开启或关闭也就是分析指令,然后再在控制信号的作用下执行指令。

5.下址的产生方法?常用的有哪些,实验中用到了哪些?A:计数器方

式――在顺序执行微指令时,后续微指令地址由现行微指令加上一个增量来产生;在非顺序执行微指令时,必须在执行现行微指令后,转去执行指定后续微指令地址的下一条微指令。

B:增量方式与断定方式的结合――微指令的顺序控制字段分成两部

分:条件选择字段与转移地址字段. 由这两个字段结合,当转移条件满足时,将转移地址字段作下一个微地址;若无转移要求,则直接从微程序计数器中取得下一条微指令. 一般用于微指令执行时,需要外部判断条件的场合。

C:多路转移方式――当微程序不产生分支时,后续微地址直接由微指令的顺序控制字段给出;否则有若干个后续地址可以选择,此时必须由顺序控制字段的"判别测试"和"状态条件"信息来选择其中一个微地

址一般用于有多个转移且可以使用组合逻辑设计转移地址逻辑的场合。

实验中用到了多路转移方式。

6.每条机器指令的指令码如何与其入口微地址对应?微程序分支如何处理?

通过编码方式,将指令码的状态分成不同的几个,再运用微地址进行编

码,对不同的指令码编程不同的地质,一一对应。

在不同分支出现时利用临时寄存器IR 对几个分支进行编码,映射为不

同状态。

7.如何简化微程序流程图,使其ADD、AND指令在部分微指令中合并?(如AR→RAM、RAM→DR2、R5→DR1)

只对ALU 部分的下址进行区分,其他部分用同样的下址即可,这样可以省去一个IR 的编码状态。

8.电路设计过程中如果出现多个状态机怎么办?将不同状态机的控制信号进行区分,在不同控制信号作用下进行多个状态机的控制。

实验日志

11月10日

对微指令的复习和理解,明白了下址的控制方法但是对电路中P1 的意义不太理解。

经过看微程序流程图,发现P1 在ldir 需要进行下载时有效,所以P1即为控制临时存储器IR 的控制信号,该控制信号由流程图中第四步中有效,来控制IR 的下址是否有效。

11月12日

编写ROM时发现P1 具体为1 的状态不同会出现不能强读强写,所以将P1 为1 改为当RAM数据传到IR 时令其有效,得到正确波形。

11月18日

仿真时发现ar 的第一个地址不正确,应该为00H 但是却是个不是个确定的值。经分析发现第一个ar 值应该为sw输入到总线上,而总线的值没有

k 输入,所以将k 的输入设定为00H,得到的仿真结果正确。

实验报告ROM部分代码(只显示编码部

分):Sw r4b r5b alu pcbus dr1 dr2 r4l r5l m cn s3 s2 s1 s0 we rd pclr pcld pcen ldar ldir p1 下址五位"0111100000000000010100000001" when address="00000" ELSE--SW-->PC "1111000000000000011110000010" when address="00001" ELSE--PC-->AR PC=PC+1 "1111100000000000110001101000" when address="00010" ELSE--RAM-->IR "1111000000000000011110010101" when address="01001" ELSE--LDA1:PC-->AR PC=PC+1 "1111100000000000110010010110" when address="10101" ELSE--LDA2: RAM--> AR "1111100010000000110000000001" when address="10110" ELSE--LDA3:RAM-->R5 "1111000000000000011110010111" when address="01010" ELSE--STA1: PC-->AR PC=PC+1 "1111100000000000110010011000" when address="10111" ELSE--STA2:RAM --> AR "1101100000000001010000000001" when address="11000" ELSE--STA3:R5-->RAM "1111000000000000011110011001" when address="01011" ELSE--OUT1: PC-->AR PC=PC+1 "1111100000000000110010011010" when address="11001" ELSE--OUT2: RAM --> AR "1111100000000000110000000001" when address="11010" ELSE--OUT3:RAM-->BUS "1101110000000000010000011011" when address="01100" ELSE--COM1 :R5-->DR1 "1110100011000000010000000001" when address="11011" ELSE--COM2:/ALU-->R5 "1111000000000000011110011100" when address="01101" ELSE--JMP1:PC-->AR PC=PC+1 "1111100000000000110100000001" when address="11100" ELSE--JMP2:RAM-->PC "1111000000000000011110000011" when address="01110" ELSE--ADD1:PC-->AR PC=PC+1 "1111100000000000110010000100" when address="00011" ELSE--ADD2:RAM-->AR "1111101000000000110000000101" when address="00100" ELSE--ADD3:RAM-->DR2 "1101110000000000010000000110" when address="00101" ELSE--ADD4:R5-->DR1 "1110100010110010010000000001" when address="00110" ELSE--ADD5:ALU--R5 加"1111000000000000011110011101" when address="01111" ELSE--AND1:PC-->AR PC=PC+1 "1111100000000000110010011110" when address="11101" ELSE--AND2:RAM-->AR "1111101000000000110000011111" when address="11110" ELSE--AND3:RAM-->DR2 "1101110000000000010000000111" when address="11111" ELSE--AND4:R5-->DR1 "1110100011010110010000000001" when address="00111" ELSE--AND5:ALU--R5 101011and "0111100000000000010100010001" when address="10000" ELSE--KWE1:SW-->PC "1111000000000000011110010010" when address="10001" ELSE--KWE2:PC-->AR PC=PC+1 "0111100000000001010000010001" when address="10010" ELSE--KWE3:SW-->RAM "0111100000000000010100010011" when address="01000" ELSE--KWE1:SW-->PC "1111000000000000011110010100" when address="10011" ELSE--KWE2:PC-->AR PC=PC+1 "1111100000000000110000010011" when address="10100" ELSE--KWE3:RAM-->BUS "1111100000000000100010000000";

没有加数据通路部分时的仿真波形:

波形分析:

将状态机定为单步运行状态,dp 为1,qd 每次进行启动。

CLR由1->0->1 ,清零作用使微地址A4~0为00000。执行第一个单拍,执行将输入值传给pc,得到下址00001 执行第二个单拍,执行微地址为00001的微指令,PC->AR,pc自加一,地址计数加1 变为01H,得到下址00010。

执行第三个单拍,将00 地址的值读出来赋给IR,在T3 时序信号到来时,执行将RAM中存放的数据(指令)送到IR(指令寄存器),此处运用手动输入的方法,同时给出判别信号P及下一条微指令的地址01000,在T4有效时,P1 为1,IR7,IR6,IR5 可以手动输入010 将微地址改为01010,产生下条微指令的地址。然后即可进入STA指令操作。

然后下址为10111,开始执行RAM〉- AR操作。从其他输出信号看产生的输出也是正确的。

下一个操作进行强读信号的执行。在之前将CLR信号置为0,进行清零才行,得到00000地址。然后将KRD信号从1到0再到1,使得a[3]强置数为1,可以将地址从00000变为01000,该地址产生下址10011,即为强读控制信号。

加入数据通路部分进行仿真:说明:数据通路加上后应该修改部分控制信号,以满足状态机在不同

状态下控制ar ,alu ,pc 等的正确执行。修改如下:

T2 时刻由于要将RAM的数据送出,同时dr1 或者dr2 得到数据,然后进行逻辑或算术运算,故RAMclk应该有效,lddr 及lddr2 有效。

T3时刻将地址送入ar 或将dr1 及dr2 的运算结果存入R4或R5,故lddr4 和lddr5 有效,ar 的clk 有效。

波形如下:

波形分析:(125 为显示电路时钟信号,a|g 为七段译码器各管,Eq为四

个驱动灯控制信号,此处不做讨论)

1、初始状态clr 为0,将a[4..0] 清零,然后将qd从1变为0再到1,dp定为

1,使状态机进入单步运行状态(或者qd 一直为1,为连续循环运行

状态)。可以看出t 的变化从0000到1000循环。

2、随着一个单步周期a从00001到00010变化。200ns到300ns,pc变为

101 置数状态,将sw-->pc 执行。

3、地址a 为00001,执行pc-->AR ,pc 变为111,ar 为00H,使得RAM得到00H的地址为下一指令输出该地址的数据做准备,进行加计数得到

总线数据位01H,同时产生下址00010。

4、地址为00010 时,执行RAM-->IR指令,总线上显示00H,同时产生下址01000 且令p1 为1,使得IR 在下一周期得到总线上高三位的地址。(不再采用单步运行仿真,令qd=1 连续运行)

5、地址为01000 时,总线数据位00H单元的数据20H,其二进制高三位为

001,由于P1为1,使得1.2us 到1.3us 时t4 有效将ir 送入a 的低三位产生新的地址01001,开始进行LDA指令操作,往后依次类

推。

6、地址为01001时进行PC-->AR ,PC=PC+1操作,产生的下址为10101,

总线显示为01H后,ar 得到01H 单元数据0D作为新的地址,然后

送入RA(MRAM --> AR ),pc 的值为100及111 也符合状态。

7、地址为10101 产生的下址为10110,执行RAM-->R5,此时ar 地址已

经为0DH (见上一步骤产生原因)

8、在该单步运行周期结束后,下一周期t1 变为1 后送到数据通路部分进

行执行,在数据总线显示55H 后,再有一个时钟将总线数据打入

R5,R5 显示正确。10110产生下址00001。

9、地址为00001时,pc加计数从02H变为03H,同时得到下址02H送到

ar 产生下址00010。

10、地址为00010 时,第三个节拍,ar 得到02H地址,在下一单步运行

周期的第二节拍将02H地址的数据送出到总线,总线显示C0H,产生下址01000。

11、Pc保持100,此时p1为1,同时LDIR有效,取得总线数据高三位

110作为a 的后三位。产生下址01110,进入ADD操作环节。

总结一下:此时R5 存储55H,R4,R2,R1都没有值。下一步将要从RAM

中取得数据直接送入R2,再将R5的送入R1,运用ALU部分进行加运算

12、地址为00011前,数据通路部分执行上个周期的指令PC-->AR

PC=PC+。1 总线上03H变为04H,与上次执行相同的指令,将03H地

址给ar 。同时产下下址00100。

13、地址为00100 时,数据通路部分执行上个周期的指令,得到03H单元

的数据0EH作为地址,送入ar 中,产生下址00101。

14、地址为00101 时,数据通路部分执行上个周期的指令,得到0EH单元数据

8AH,总线显示出了该单元的数据即为8AH。产生下址00110。

15、地址为00110时,执行上个周期指令,将8AH送入R2寄存器。R2寄

存器显示数据位8AH,正确。同时产生下址00001。

16、 地址为 00001 时,执行上一周期操作,将 R5的数据送入到 R1,看

到 R1

显示数据可以得知该显示为正确的。 然后进行 ALU 加运算,得到加的结果

为 DFH ,送入到 R5。总线显示计算结果正确,同时 R5 得到数据

DFH 。产 生下址 00010

17、

地址为 00010 时再次重复之前操作,此处不再分析。

18、 在地址为 01000时,与之前一样,但是此时 pc 加计数并且送到 ar 使其地

址为 04H ,然后得到 04H 单元数据 40H ,其二进制高 三位为下址低

三位。 所以得到下址为 01010,进入 STA 指令操作。

19、 地址为 10111时,执行上条指令的操作 PC-->AR PC=PC+,1 将地址

05H送入ar ,pc 自加一变为06H,显示在总线上。然后下址为11000。

20、地址为11000 时,操作上一步指令,将05H单元数据10H送入AR,作为

新的地址,产生下址00001。

21、地址为00001时,上一步操作将R5数据存入地址为10H的Ram中,总线

显示数据位DFH,操作正确,同时产生下址00010。

同样的经过几个节拍脉冲,将地址a 到01000 状态,此时总线高三位是

011,在p1 为1,ldir 有效时得到下址01011。进入OUT操作分

支。

接下来的操作与之前相同,不再赘述。

23、

22

24、与STA操作相同,只是在最后a 地址为11010时产生下址00001。同

时执行RAM到AR的操作,此时RAM的07H 单元数据位10H,将该数据继续作为AR,显示RAM10H地址的数据。

25、地址为00001时执行上步操作,将Ram的0H地址的数据显示出来为DFH,

可见数据写入成功。

余下的将进行如下操作:

将R5 的数据DFH与Ram中0FH单元数据F0H进行相与运算得到D0H,送

至R5,再对其取反的2FH。最后无条件返回00H单元地址。不再进行波形

分析。下载验证时引脚分配如下:

K的输入可以直接置为低电平,不再分配。

最后为模拟机部分:

运算公式为(A+B)'andC',其中ABC分别为01H ,02H,03H。模拟机修改内存值如下图:

程序运行步骤为:

先进行取A 的值,到R5,然后加上12 单元内部数据( B的值),存入R5,再运用com 指令进行取反,得到的值存入R5及RAM14H单元。然后取得13H 单元数据到R5,进行取反运算后存到R5,再将14H单元数据存到

R2,R5到R1,进行and 运算,最后结果存入R5及15H 单元,用JMP指令跳回至00H单元。单步运行结果如下:

1、14H单元存入的数据应该为FFFC,即A+B取反的结果,从图中可以看出

是正

确的

2、15H 单元数据位14H单元与03H取反后相与的结果,即FCH and FCH,结果仍为FCH。是正确的。

总结:

相关主题