题 目: RCLN R0与RCRN R0 扩展指令设计
目录
1、数据通路分析
AM2901是一个四位数的算术逻辑单元(ALU),它由以下关键组件构成:算术逻辑单元本身,负责执行基本的算术和逻辑运算;输入多路选择器,用于从多个来源选择数据输入;输出选择器,决定如何将结果数据输出到其他部分;一组寄存器,用于存储中间数据;以及一个移位器,允许数据在寄存器之间或内部进行位移操作。
图1 AM2901芯片的内部组成结构
图2 36位微型开关的控制功能分配
1)算术逻辑ALU
具体参见表1-1。ALU的Cn为最低位进位输入信号,减法运算要求Cn=1,其余的运算Cn=0。ALU另输出4个状态标志位,其中“F=0000”为零标志,为1时表明ALU运算结果F为0;Cn+4为最高位进位输出信号;F3为最高数据位,当数据用补码表示时该位指示数据的符号,即0表示正数,1表示负数;OVR为运算溢出标志位,1表示补码运算溢出,结果错误。
2)通用寄存器组
AM2901拥有一组通用寄存器,这组寄存器由16个独立的4位寄存器构成,它们被编号为R0至R15,地址范围从0000至1111。这组寄存器可以通过两个端口进行访问:A端口和B端口。A端口仅具备输出功能,这意味着数据只能从A端口读取,而不能写入。B端口则具备输入和输出的双重功能,既可以从B端口读取数据,也可以向其中写入数据。当通过A端口或B端口进行数据访问时,需要通过特定的地址编码来指定要访问的寄存器。输入信号中的A端口地址编码决定了A端口输出的寄存器地址,而B端口地址编码则决定了B端口用于输出和写入操作的寄存器地址。数据可以通过A端口和B端口被读取出来,但如果需要向寄存器写入数据,则必须通过B端口,并且这一写入操作受到写入信号/WE的控制。只有当/WE信号有效时,数据才能被写入到指定的寄存器中。为了确保ALU的R和S端的数据在B端口写入操作时不受影响,A端口和B端口输出的数据分别被A锁存器和B锁存器所锁存,这样可以稳定数据输出,防止数据在写入过程中发生意外变动。简而言之,AM2901的寄存器组设计允许灵活的数据访问和保护,确保了数据处理的稳定性和可靠性。
3)Q寄存器
Q寄存器为4位,其主要用途是为乘、除运算提供存放乘数或商的寄存器,也可用于临时存放其他数据。Q寄存器具备对其数据进行左移1位或右移1位的操作功能。
4)ALU输入选择器
AM2901使用了两个多路选择器为ALU提供两个操作数R和S的来源。R可选择来自数据总线的数据D(来自运算其外部,如控制器、主存储器或I/O设备)或寄存器组端口A的数据;S可从寄存器组端口A、B和Q寄存器3个来源选取数据。两个操作数来源的组合由控制信号I2I1I0的编码确定。
5)移位器(由三选一实现)
4位,用于对ALU的输出实现直送、左移1位或右移1位处理,以扩展ALU的处理功能。
6)输出选择器
AM2901输出数据Y有两个来源:一是ALU的运算结果F,二是寄存器组端口A的输出。输出Y的选择,以及ALU的运算结果F如何传送给寄存器组端口B或Q寄存器,由控制信号I8I7I6的编码确定。
7)Am2901的时钟信号
Am2091使用一个时钟信号CLK作为内部通用寄存器组、A/B锁存器和Q寄存器的打入信号,如图1-2所示。CLK为高电平时,A、B锁存器输入端的数据直通输出端,CLK的下降沿将输入的数据锁存。CLK为低电平时通用寄存器从B口接收数据,CLK的上升沿将输入的数据锁存,Q寄存器在CLK上升沿时刻接收数据。
图3 16位机微程序入口地址映射表
2、微程序控制器分析
1)微指令格式
根据机器指令功能、格式和数据通路所需的控制信号,采用如图2-1所示的微指令格式。微指令字长39位,顺序字段11位(判别字段P4~P0,后继微地址NμA5~NμA0),控制字段29位,微命令直接控制。
2)微程序流程图
根据TEC-8模型计算机的指令系统和控制台功能以及数据通路,TEC-8模型计算机的微程序流程图见下图。在图10.17中,为了简洁,将许多以“A-”为前缀的信号,省略了前缀。需要说明的是,图中没有包括运算器组成实验、双端口存储器实验和数据通路3部分。
图4 TEC-8模型计算机微程序流程图
3)微程序控制器电路
根据TEC-8模型计算机的指令系统、控制台功能、微指令格式和微程序流程图,TEC-8模型计算机微程序控制器电路如图10.18所示。图10.18中,以短粗线标志的信号都有接线孔。信号R4-I、R5-I、R6-I、IR7-I、CI和ZI的实际意义分别等同于R4、R5、R6、R7、C和Z。NT信号是时序发生器接到中断请求脉冲PULSE(高电平有效)后产生的中断信号。
①控制存储器
控制存储器由5片58C65组成,在图10.18中表示为CM0~CM4。其中CM0存储微指令最低的8位微代码,CM5存储微指令最高的8位(实际使用7位)微代码。控制存储器的微代码必须与微指令格式一致。58C65是一种8K×8位的E2PROM器件,地址输入A12~A0。由于TEC-8模型计算机只使用其中64B作为控制存储器,因此将A12~A6接地,A5~A0接微地址uA5~μA0。在正常工作方式下,5片E'PROM处于只读状态;在修改控制存储器内容时,5片E2PROM处于读、写状态。
②微地址寄存器
微地址寄存器μAR由1片74174组成,74174是一个6D触发器。当按下复位按钮CLR时,产生的信号CLR#(负脉冲)使微地址寄存器复位,A5~A0为O0H,供读出第一条微指令使用。在一条微指令结束时,用T,的下降沿将微地址转移逻辑产生的下条微指令NuA5 NuA4~NuA0写入微地址寄存器。
3、指令系统分析
1)TEC-XP+计算机的指令分类
TEC-2000指令系统按指令的功能和执行步骤可划分为A、B、C、D四组:
A组:主要完成通用寄存器之间的数据传送或运算,以及少数特殊操作,在取指后一步完成。
基本指令:ADD,SUB,AND,OR,XOR,CMP,TEST,MVRR,INC,DEC,SHR,SHL,JR,JRC,JRNC,JRZ,JRNZ
扩展指令:ADC,SBB,NOT,RCL,RCR,ASR,STC,CLC,EI,DI,JRS,JRNS,JMPR
B组:需完成一次主存读/写操作,或IO读/写操作,在取指后两步完成。第一步向地址寄存器送入16位(或8位的I/O端口)地址,第二步完成读、写操作。
基本指令:LDRR,STRR,PUSH,POP,PSHF,POPF,MVRD,IN,OUT,JMPA,RET
C组:完成两次主存读/写操作(间址操作),在取指令后三步完成。第一次读出的数据是操作数的地址,读出后直接(或经过一次加法运算)将其送入地址寄存器,省掉第二次内存读/写操作的地址传送步骤。CALR指令先用第2步保存PC内容到堆栈,第3步把寄存器中的子程序入口地址传送到程序计数器PC中。
扩展指令:CALR,LDRA,STRA,LDRX,STRX
D组:完成两次内存的读、写操作,在取指之后四步完成。
基本指令:CALA
扩展指令:TRET
8位指令操作码(记作“IR15–IR8”)的特殊含义:
① IR15–IR14用于区分指令组,0X表示A组,10表示B组,11表示C、D组;
② IR11用于区分C、D组,IR11=0为C组,IR11=1为D组;
③ IR13用于区分基本指令和扩展指令,基本指令为0,扩展指令为1。
④ IR12用于简化控制器实现,暂定为0。
⑤ IR10–IR8用于区分同一指令组的不同指令。
TEC-XP+的基本指令已全部实现,扩展指令只完成了指令格式和执行流程的设计,控制信号的逻辑尚未实现,可由用户扩展实现。
图5 基本指令汇总表
2)TEC-XP+计算机的指令执行流程
TEC-2000计算机指令的执行流程由节拍发生器(即时序产生器)控制,节拍(即机器周期或CPU周期)用T4T3T2T1T0来编码,其中,在组合逻辑控制器中T4恒为0(T4=0)。下图为TEC-XP+的指令执行流程图,方框表示1个节拍(即机器周期),左上角为节拍的编码(用T3T2T1T0表示)。
图6 TEC-XP+指令执行流程图
1)分析基本指令流程
如图4-1所示,DBUS代表数据总线,ABUS(D)代表数存地址总线,ABUS(I)代表指存地址总线,RD代表数存读命令,WE代表数存写命令,RD代表指存读命令。
图7 RCLN R0指令周期
图8 RCRN R0指令周期
2)取指周期
程序计数器PC里存放指令在内存中的地址,并将这个地址取出来放到数据地址寄存器AR中;数据地址寄存器AR保存当前CPU所访问数据的内存单元地址,接下来根据AR中的地址,找到内存中的指令,然后将其放到数据缓冲寄存器DR中;数据缓冲寄存器DR用来暂时存放ALU的运算结果,由数据存储器读出的一个数据字,暂时存放CPU与外界传送的数据;指令寄存器IR保存当前正在执行的一条指令,操作码字段OP的输出就是指令译码器的输入,操作码一经译码后,即可向操作控制器发出具体操作的特定信号。第二条指令同理可得。
3)执行周期
从寄存器R0中取出数据,放到ALU的操作数缓冲区中,并在ALU中完成对应的左移一位数据的操作;同时记录是否有进位,将进位结果存放在CF中,并做带进位的加法操作;从寄存器R0中取出数据在ALU中完成减一操作;最后取R0地址并对其数值进行判断,不为0时跳转至程序开始,为0执行公操作,流程图结束。
图9 RCLN R0指令周期流程图
图10 RCRN R0指令周期流程图
5、微指令编码
本小组主要负责RCLN R0(R0循环左移,按 R0的值N为移动位数)与RCRN R0(RO循环右移,按RO的值N为移动位数)的 扩展指令设计
- RCLN R0该扩展指令中用到了如下五条基本指令:
MVRR R1, R0 ;将寄存器R0中的值移动到寄存器R1中
SHL R0 ;DR,C←DR*2,左移一位,相当于乘以2
ADD DR,SR ;R←DR+SR,将DR和SR的值相加,并存回DR
DEC DR ;DR←DR-1,将寄存器DR的值减1
JRNZ ADR ;Z=0 时跳转
图11 RCLN RO扩展指令微程序编码表
(2)RCRN R0该扩展指令中用到了如下八条基本指令:
90 MVRR R1,R0 ;将R0寄存器的值复制到R1寄存器
91 SHR R0 ;将R0寄存器的值右移一位
92 ADD R6,R6 ;将R6寄存器的值加到自身上,相当于R6 = R6 * 2
93 CMP R13,R6 ; 比较R13寄存器和R6寄存器的值
94 JRZ 96 ;z=1,即c为1,则不跳转,为0反之
95 ADD R0,R15 ;将R15寄存器的值加到R0上
96 DEC R1 ;将R1寄存器的值减1
97 JRNZ 91 ;如果R1寄存器的值不为零,则跳转回91继续执行循环
微地址 | 下址 | CI3~CI0 | SCC | MRW | I2~I0 | I8~I6 | I5~I3 | B 口 | A 口 | SST | SSH SCI | DC2 | DC1 |
90 | 00110000 | 0110 | 0000 | 010 | 100 | 011 | 000 | 0001 | 0000 | 000 | 000 | 000 | 000 |
91 | 00110000 | 1110 | 0000 | 100 | 011 | 111 | 000 | 0001 | 0000 | 110 | 000 | 000 | 000 |
92 | 00110000 | 1110 | 0000 | 100 | 011 | 111 | 000 | 0000 | 0000 | 001 | 010 | 000 | 000 |
93 | 00110000 | 1110 | 0000 | 100 | 011 | 110 | 001 | 0001 | 0000 | 001 | 000 | 000 | 000 |
94 | 10010001 | 1110 | 0100 | 100 | 000 | 000 | 000 | 0000 | 0000 | 000 | 000 | 000 | 000 |
95 | 00110000 | 0011 | 0000 | 000 | 000 | 000 | 000 | 0000 | 0000 | 000 | 000 | 000 | 000 |
96 | 00000000 | 0000 | 0000 | 000 | 000 | 000 | 000 | 0000 | 0000 | 000 | 000 | 000 | 000 |
图12 RCRN R0扩展指令微程序编码表
其中DR数据寄存器在微指令编码时设置为R0,用于存放左移的数值;R0存放循环次数。在跳转指令实现循环中,假定指令存放在指存中,数据a已经存放在寄存器R0寄存器中。并将R0赋值给另一个寄存器执行周期先进行左移R0一位的操作,同时判断结果有无进位,并存放在CF标志寄存器中;然后执行带进位的加法,将进位结果与寄存器R0相加,实现将左移的一位数据循环至最右位;将代表循环次数的寄存器R1减一;最后判断是否跳转执行,当R1=0时结束指令跳转“公操作”,当R1≠0跳转至程序开始,循环执行上述操作。
对于MVRR R1,R0赋值操作,CI3~0为1110设置为顺序执行;由于R0值是在执行先赋值进寄存器的,执行过程中对寄存器无写入操作,所以这里MRW设置为无读写;由于将R0的值赋值给R1,所以B口改为0001,A口改为0001。
对于左移操作SHL R0,CI3~0为1110设置为顺序执行;由于R0值是在执行先赋值进寄存器的,执行过程中对寄存器无写入操作,所以这里MRW设置为无读写;由于左移一位数据的操作等于对数据乘以2,即将两个相同代表数值相加,故I5~3为设置为加法功能;这里I2~0设置为011,选择输入组合为B口对应寄存器的地址;输入从A口、B口对内部寄存器组的寄存器进行读写操作的地址均为0000,DC2、DC1分别为传递NC、开关到内部总线;逻辑运算Cin为0,即SSHCSI为000;左移操作,ZVS不变,SST为110.
对于带进位的加法操作ADD R0,Cy,顺序执行,无读写操作;将左移操作的进位标志位加入到寄存器R0中,所以I5~3设置位加法操作000;由于是带进位的加法,所以SSHSCI位010;接收ALU标志位输出的值,SST为001。
对于减一操作DEC R1。顺序执行;无读写操作;将寄存器R1的值减一,做减法操作,故I5~3设置为减法001;由于是对寄存器R1的操作,故将B口改为0001;逻辑运算,SSHCSI为001;接收ALU标志位输出的值,SST为000。
ST R1,下址为90,即R0不等于0时跳转循环执行,R0等于时顺序执行;无读写操作;逻辑运算SSHCSI为000;CZVS的值保持不变,SST为000;SCC为0100,即当R0不等于0时条件不成立则跳转。
6、测试程序和运行结果
图13 RCLN RO运行结果图
(1)运行结果取决于原始R0的值。先输入R0值,那么在执行DEC指令后,DR的值将减少1。如果这个新的值不为0,程序将跳转到ADR执行;如果为0,程序将不会跳转,而是继续顺序执行后面的指令。
图14 RCRN RO运行结果图
(2)R1寄存器的值被设置为与R0相同,R6的值被初始化为某个初始值。R0的值会被右移一位,R6的值会翻倍,这是将R6加上它自己的值。R6的值与R13的值进行比较。如果R6的值等于R13,则不执行跳转,继续执行循环的下一步;如果R6的值小于R13,则跳转到标签96。如果R6的值小于R13,R0的值会加上R15的值。无论是否执行了条件加法,R1的值都会减1。最后,如果R1的值不为零,循环会跳回到91继续执行;如果R1的值为零,则循环结束。
标签:R0,计算机,0000,端口,000,指令,寄存器,原理,组成 From: https://blog.csdn.net/ZYS7078/article/details/144569276