计算机组成原理课程
设计报告
实验名称:硬布线控制器的设计
学院:计算机学院 班级:2010211301 组员:张宇明,郭逊,谌惠民,廉鸿一
北京邮电大学课程设计报告 课 程 设 计 名 称 班 级 计算机组成原 理课程设计 学 院 学 号 计 算 机 学生姓名 指导教师 张杰 班内序号 成 绩 课 程 设 计 内 容 教学目的: 1)融会贯通计算机组成原理课程各章的教学内容,通过知识的综合运用,加深对CPU各模块工作原理和相互联系的认识。2)掌握硬连线控制器的设计方法。3)学习运用大容量可编程器件的开发技术,掌握设计和调试的基本步骤和方法,体会ISP技术的优点。4)培养科学研究能力,取得设计与调试的实践经验。 基本内容: 1)按给定的数据格式和指令系统,利用大容量ISP可编程器件,设计一台硬连线控制器组成的处理机。2)根据设计,在TEC-5实验系统中进行调试。3)在调试成功的基础上,整理出设计图纸和其他文件,包括:总框图,硬连线控制器逻辑模块图,硬连线控制器指令周期流程图,控制器模块的VHDL语言源程序,设计说明说,调试总结。 实验方法: 分工合作,理论与实践相结合。首先,在草稿纸上设计出硬布线控制器,根据每个微操作控制信号S是一系列输入量的逻辑函数,写出控制信号表达式并用卡诺图进行化简,据此写出VHDL源程序。再把源程序下载到isp1032器件中,进行不断的调试操作,直至程序能够正确运行得出正确结果为止。 团队分工: 郭逊 VHDL语言的编写 实验调试 实验报告书写 张宇明 实验总体设计 VHDL语言的测试 实验台连接和调试 廉鸿一 控制信号译码与分析 器材调试 谌惠民 控制信号译码与分析 VHDL语言的调试 实验报告书写 学 生 具体见附页~ 课程设计 报 告 (附 页) 课 程 设 计 成 绩 评 定 评语: 成绩: 指导教师签名: 年 月 日 注:评语要体现每个学生的工作情况,可以加页。
目录
本报告包括以下内容:
1. 数据通路图及其说明.............................P4 2. 硬布线控制器逻辑模块图及设计...................P5 3. 硬布线控制器指令周期流程图及设计...............P8 4. 控制模块VHDL语言源程序/原理图(包含说明和注释) ..................................................P9 5. 测试波形图(以WRM为例)........................P15 6. 控制模块原理图.................................P16 7. 设计说明书.....................................P17 8. 设计与调试小结.................................P20 8. 本组成员实验心得...............................P21
数据通路图
说明:数据通路是将双端口存储器模块和双端口通用寄存器模块连接在一起形成的。
双端口通用寄存器(RF)由一个ispLSI1016实现,功能相当于四个八位通用寄存器,用于保存参与运算的数据,运算后的结果也要送到RF中保存。双端口寄存器堆模块的控制信号中,RS1、RS0用于选择从右端口读出的通用寄存器,RD1、RD0用于选择从左端口读出的通用寄存器。而WR1、WR0用于选择写入的通用寄存器。LDRi是写入控制信号,当LDRi=1时,数据总线DBUS上的数据在T3写入由WR1、WR0指定的通用寄存器。左右端口分别与操作数暂存器DR1和DR2相连,RF的右端口通过三态门连接到数据总线DBUS上,因而RF中的数据可以直接通过右端口送到DBUS上。
DR1和DR2各由一片74LS273构成,用于暂存参与运算的数据。ALU由两片74LS181构成,ALU的输出通过一个三态门发送到数据通路DBUS上。
双端口寄存器使用一片IDT7132(2048×8位),两个端口的地址输入A8-A10引脚接地,因此实际使用的存储容量为256字节。左端口的数据输出端接在数据总线DBUS,右端口的数据输出接指令总线IBUS。CEL#、LR/W#、OEL#控制左端口读写操作;CER#、RR/W#、OER#控制右端口读写操作。CEL#为左端口片选信号,低电平有效;当CEL#=1时,禁止对左端口的读写操作;当LR/W#=0时,左端口进行读写。OEL#的作用等同于三态门,当OEL#=0时,允许左端口读出的数据送到数据总线DBUS上;当OEL#=1时,禁止左端口的数据放到DBUS上。因此将OEL#写作RAM-BUS#。右端口控制信号与左端口完全类似。左端口负责所有数据和指令的写入,右端口作为指令端口,不需要进行数据写入,将右端口处理为只读端口,RR/W#固定接高电平,OER#固定接地。
存储器左端口的地址寄存器AR和右端口的地址寄存器PC都是2片74LS163,具有地址递增功能。同时,PC也起到程序计数器的功能。
指令由双端口寄存器的右端口送到指令总线IBUS,再送入指令寄存器IR,再通过操作控制器产生各控制信号从而实现程序运行,本次实验编写的控制器是硬布线控制器。
硬布线控制器逻辑模块图
硬布线控制器逻辑模块图
据书本硬布线控制器结构框图可知:
每一微操作控制信号 C是指令操作码译码器输出Im、时序信号(节拍电位Mi,节拍脉冲Tk)和状态条件信号 Bj的函数,即
C=f(Im,Mi,Tk,Bj)
其中,逻辑网络的输入信号来源有三个: (1)来自指令操作码译码器的输出 Im; (2)来自执行部件的反馈信息Bj;
(3)来自时序产生器的时序信号,包括节拍电位信号 M和节拍脉冲信号T.其中节拍电位信号即机器周期 (CPU周期)信号,节拍脉冲信号是时钟周期信号。
这个控制信号是用门电路、触发器等许多器件采用组合逻辑设计方法来实现的.当机器加电工作时,某一操作控制信号 C在某条特定指令和状态条件下,在某一序号的特定节拍电位和节拍脉冲时间间隔中起作用 , 从而激活这条控制信号线,对执行部件实施控制。 所以我们可以:
1.根据硬连线指令流程图列出译码表,再设计出译码逻辑电路图。
下面给出本组的组合逻辑译码表:
说明:水平方向表示一个信号,纵向为某一状态或指令,单元格中的内容表示该控制信号在该指令中有效的条件,根据译码表可以写出每个控制信号的逻辑表达式。
2.按照上面的组合逻辑译码表写出各信号的逻辑表达式:
LDDR1=ADD*W2+SUB*W2+AND*W2+STA*W2 LDDR2= ADD*W2+SUB*W2+AND*W2
CEL#=STA*W3+LDA*W3+RRF2*W1+WRF2*W1+RRM2*W1+WRM2*W1 CER#=RP2*W1+RRF2*W2+WRF2*W2
LDAR#=STA*W2+LDA*W2+RRF*W3+WRF*W3+RRM*W3+WRM*W3 AR+1=RRM2*W3+WRM2*W3
LDPC#=JC*W3*C+RRF*W3+WRF*W3+RP*W3
PC+1=(ADD+SUB+AND+STA+LDA+STP+OUT)*W3+JC*W2 LDRi=ADD*W3+SUB*W3+AND*W3+LDA*W3+ WRF2*W3
LR/W#=STA*W3#+LDA*W3+RRF2*W1#+WRF2*W1#+RRM2*W1+WRM2*W1# LDIR=RP2*W1+RRF2*W2+WRF2*W2
SW-BUS#=RRF*W3+RRF2*W1+WRF*W3+WRF2*(W1+W3)+RRM*W3+WRM*W3+WRM2
*W1+RP*W3
RS-BUS#=STA*W2+LDA*W2+JC*W3*C+OUT*W3+RRF2*W3 RAM-BUS#=LDA*W3+RRM2*W1
ALU-BUS#=ADD*W3+SUB*W3+AND*W3+STA*W3
TJ=STP*W3+OUT*W3+RRF*W3+RRF2*W3+WRF*W3+WRF2*(W2+W3)+RRM2*W1+WR
M*W3+WRM2*W3
SKIP=RRF*W1+WRF*W1+RRM*W1+WRM*W1+RP*W1 S3=ADD*W3+SUB*W3#+AND*W3+STA*W3 S2=ADD*W3#+SUB*W3+AND*W3+STA*W3 S1= ADD*W3#+SUB*W3+AND*W3+STA*W3 S0=ADD*W3+SUB*W3#+AND*W3#+STA*W3 M=ADD*W3#+SUB*W3#+AND*W3+STA*W3 Cn#=SUB*W3#
其中,以上各式右侧所用变量展开成输入信号的对应关系如下: RRF0 ((NOT STO) AND SWC AND (NOT SWB) AND (NOT SWA)) RRF1 (STO AND SWC AND (NOT SWB) AND (NOT SWA)) WRF0 ((NOT STO) AND (NOT SWC) AND SWB AND SWA) WRF1 (STO AND (NOT SWC) AND SWB AND SWA)
RRM0 ((NOT STO) AND (NOT SWC) AND SWB AND (NOT SWA)) RRM1 (STO AND (NOT SWC) AND SWB AND (NOT SWA))
WRM0 ((NOT STO) AND (NOT SWC) AND (NOT SWB) AND SWA) WRM1 (STO AND (NOT SWC) AND (NOT SWB) AND SWA)
RP0 ((NOT STO) AND (NOT SWC) AND (NOT SWB) AND (NOT SWA)) RP1 (STO AND (NOT SWC) AND (NOT SWB) AND (NOT SWA)) ADD ((NOT IR7) AND (NOT IR6) AND (NOT IR5) AND (NOT IR4)) SUB ((NOT IR7) AND (NOT IR6) AND (NOT IR5) AND IR4) AND ((NOT IR7) AND (NOT IR6) AND IR5 AND (NOT IR4)) STA ((NOT IR7) AND (NOT IR6) AND IR5 AND IR4)
LDA ((NOT IR7) AND IR6 AND (NOT IR5) AND (NOT IR4)) JC ((NOT IR7) AND IR6 AND (NOT IR5) AND IR4) STP ((NOT IR7) AND IR6 AND IR5 AND (NOT IR4)) OUT ((NOT IR7) AND IR6 AND IR5 AND IR4)
硬布线控制器指令周期流程图
说明:上图为PPT中给出的参考硬连线控制器的指令周期流程图。
在本次试验中,选用3个节拍电位对大多数指令就够用,所以节拍电位发生器产生3个点位信号(W1~W3)。
对于所需节拍电位时间较多的指令如何处理,这里采用的是将一条机器指令的执行化为占用两条(或者更多)机器指令的节拍,例如执行一条指令可以占用W1、W2、W3、W1、W2、W3六拍时间。为了区分一条指令的两个不同阶段,可用某些特殊的寄存器标志将其区分,例如,FLAG=0时,表示该指令执行第一个W1、W2、W3;FLAG=1时,表示该指令执行第二个W1、W2、W3。由于有些控制台指令只需要4拍,占用2条机器指令周期(6拍)则浪费了时间。为了减少浪费,在时序电路中加入了一个控制信号SKIP的输入,该信号的作用是使节拍发生器在任意状态下直接跳到最后1拍(W3)。这样,设计控制流程时,在所需节拍较少的指令流程适当的位置使SKIP控制信号有效,多余的节拍就可以跳过,从而提高了性能。
控制模块VHDL语言源程序(含注释)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cpu IS
port(SWC,SWB,SWA,W1,W2,W3,CLRJ,C:IN std_logic;
IR:IN std_logic_vector(7 downto 4);
SKIP,SW_BUSJ,LDPCJ,TJ,CELJ,LRWJ,CERJ,LDIR,RS_BUSJ,LDARJ,RAM_BUSJ,ARpp,LDDR1,LDDR2,ALU_BUSJ,LDRi,PCpp,S3,S2,S1,S0,M,CnJ: OUT std_logic;
qx:OUT std_logic_vector(0 TO 3));--调试时观察STO,SWC,SWB,SWA的信号
--固定管脚,使得以后编辑时无需重新拔插导线
attribute LOC:string;
--输入管脚
--反馈输入管脚
attribute LOC of C:signal is \"P76\";
--CLR#输入管脚,平时为1,按下为0
attribute LOC of CLRJ:signal is \"P81\";
--IR高4位输入管脚
attribute LOC of IR:signal is \"P60P15P57P69\";
--控制台输入管脚
attribute LOC of SWA:signal is \"P16\";
attribute LOC of SWB:signal is \"P9\";
attribute LOC of SWC:signal is \"P49\";
--节拍输入管脚
attribute LOC of W1:signal is \"P70\";
attribute LOC of W2:signal is \"P14\";
attribute LOC of W3:signal is \"P37\";
--输出管脚
--4个数据总线开关输出管脚
attribute LOC of ALU_BUSJ:signal is \"P10\";
attribute LOC of RAM_BUSJ:signal is \"P48\";
attribute LOC of RS_BUSJ:signal is \"P47\";
attribute LOC of SW_BUSJ:signal is \"P26\";
--四寄存器控制输出管脚
attribute LOC of LDRI:signal is \"P3\";
--ALU控制信号输出管脚
attribute LOC of S0:signal is \"P73\";
attribute LOC of S1:signal is \"P72\";
attribute LOC of S2:signal is \"P71\";
attribute LOC of S3:signal is \"P68\";
attribute LOC of M:signal is \"P6\";
attribute LOC of CNJ:signal is \"P5\";
--ALU运算锁存器控制输出管脚
attribute LOC of LDDR1:signal is \"P45\";
attribute LOC of LDDR2:signal is \"P46\";
--双端存储器控制输出管脚
attribute LOC of CELJ:signal is \"P56\";
attribute LOC of CERJ:signal is \"P55\";
attribute LOC of LRWJ:signal is \"P75\";
--存储器程序计数器和地址寄存器控制输出管脚
attribute LOC of LDARJ:signal is \"P29\";
attribute LOC of ARpp:signal is \"P59\";
attribute LOC of LDPCJ:signal is \"P27\";
attribute LOC of PCpp:signal is \"P4\";
--指令寄存器控制输出管脚
attribute LOC of LDIR:signal is \"P52\";
--时序节拍控制输出管脚
attribute LOC of SKIP:signal is \"P74\";
attribute LOC of TJ:signal is \"P28\";
END cpu;--(实体)接口部分结束
ARCHITECTURE inputoutput_signal of cpu IS --描述cpu功能 signal ssto: std_logic:='0';--sst0用来控制STO从0跳至1
signal sto: std_logic:='0';--STO为0标志在第1个W1W2W3,为1标志为在第2个W1W2W3 BEGIN
PROCESS(CLRJ,W3,W1,ssto) BEGIN
IF(CLRJ='0')THEN sto<='0';ssto<='0';
ELSIF(ssto='0' and W3'event and W3='1')THEN ssto<='1';
ELSIF(W1'event and W1='1' and ssto='1')THEN sto<='1'; END IF; END PROCESS;
--qx(0~3)输出管脚,用来查看STO,SWC,SWB,SWA,为便于调试。
qx(0)<=sto;
qx(1)<=SWC;
qx(2)<=SWB;
qx(3)<=SWA;
SKIP<=(not sto or (SWB xor SWA)) and W1;--SKIP有效时,跳至最后一拍,经卡诺图化简后的表达式
SW_BUSJ<=not( (W1 and sto and ( (SWC and not SWB and not SWA)or(not SWC and SWB and SWA) or(not SWC and not SWB and SWA) ) )or (W3 and not sto and((SWC and not SWB and not SWA)or(not SWC and SWB and SWA)or(not SWC and SWB and not SWA)or(not SWC and not SWB and SWA) or(not SWC and not SWB and not SWA)))or(W3 and sto and not SWC and SWB and SWA) );
--SW-BUS状态经过大致化简
LDARJ<=not((( (not sto and SWC and not SWB and not SWA) or (not sto and not SWC and SWB and SWA) or (not sto and not SWC and SWB and not SWA)or (not sto and not SWC and not SWB and SWA) ) and W3)or (sto and not SWC and not SWB and not SWA and not IR(7) and IR(6) and not IR(5) and not IR(4) and W2) or (sto and not SWC and not SWB and not SWA and not IR(7) and not IR(6) and IR(5) and IR(4) and W2));
LDPCJ<= not((( (not sto and SWC and not SWB and not SWA) or (not sto and not SWC and SWB and SWA) or (not sto and not SWC and not SWB and not SWA)) and W3)
or (sto and not SWC and not SWB and not SWA and not IR(7) and IR(6) and not IR(5) and IR(4) and C and W3));
TJ<= (W1 and sto and not SWC and SWB and not SWA) or(W2 and sto and not SWC and SWB and SWA)
or(W3 and not sto and SWC and not SWB and not SWA) or(W3 and sto and SWC and not SWB and not SWA) or(W3 and not sto and not SWC and SWB and SWA) or(W3 and sto and not SWC and SWB and SWA)
or(W3 and not sto and not SWC and not SWB and SWA) or(W3 and sto and not SWC and not SWB and SWA)
or(W3 and sto and not SWC and not SWB and not SWA and not IR(7) and IR(6) and IR(5));
CELJ<= not( (((sto and SWC and not SWB and not SWA) or (sto and not SWC and SWB and SWA) or (sto and not SWC and SWB and not SWA) or (sto and not SWC and not SWB and SWA))and W1) or (sto and not SWC and not SWB and not SWA and W3 and ( (not IR(7) and IR(6) and not IR(5) and not IR(4)) or(not IR(7) and not IR(6) and IR(5) and IR(4)) ) ) );
LRWJ<= (sto and not SWC and SWB and not SWA and W1)or (sto and not SWC and not SWB and not SWA and W3 and not IR(7) and IR(6) and not IR(5) and not IR(4));
CERJ<= not (( ( (sto and SWC and not SWB and not SWA) or(sto and not SWC and SWB and SWA) ) and W2) or(sto and not SWC and not SWB and not SWA and W1) );
LDRi <= (sto and not SWC and SWB and SWA and W3) or (sto and not SWC and not SWB and not SWA and W3 and ( (not IR(7) and not IR(6) and not IR(5) and not IR(4)) or (not IR(7) and not IR(6) and not IR(5) and IR(4))or (not IR(7) and not IR(6) and IR(5) and not IR(4)) or (not IR(7) and IR(6) and not IR(5) and not IR(4)) ));
LDIR<= (((sto and SWC and not SWB and not SWA) or(sto and not SWC and SWB and SWA) )and W2)or(sto and not SWC and not SWB and not SWA and W1);
RS_BUSJ<= not((sto and SWC and not SWB and not SWA and W3) or (sto and not SWC and not SWB and not SWA and ( (not IR(7) and not IR(6) and IR(5) and IR(4) and W2) or (not IR(7) and IR(6) and not IR(5) and not IR(4) and W2) or (W3 and C and not IR(7) and IR(6) and not IR(5) and IR(4)) or (not IR(7) and IR(6) and IR(5) and IR(4) and W3))));
RAM_BUSJ<=not((sto and not SWC and SWB and not SWA and W1) or (sto and not SWC and not SWB and not SWA and not IR(7) and IR(6) and not IR(5) and not IR(4) and W3));
ARpp <= W3 and sto and not SWC and (SWB xor SWA) ;
LDDR1 <=sto and not SWC and not SWB and not SWA and W2 and not IR(7) and not IR(6);
LDDR2 <=sto and not SWC and not SWB and not SWA and W2 and((not IR(7) and not IR(6) and not IR(5)) or(not IR(7) and not IR(6) and not IR(5) and IR(4)));
ALU_BUSJ <= not(sto and not SWC and not SWB and not SWA and W3 and not IR(7) and not IR(6));
PCpp <= sto and not SWC and not SWB and not SWA and( (not IR(7) and not IR(6) and W3) or (not IR(7) and IR(6) and IR(5) and W3) or (not IR(7) and IR(6) and not IR(5) and not IR(4) and W3) or (not IR(7) and IR(6) and not IR(5) and IR(4) and W2) );
S0 <= W3 and sto and not SWC and not SWB and not SWA and not IR(7) and not IR(6) and not IR(4) ;
S1 <= W3 and sto and not SWC and not SWB and not SWA and ( (not IR(7) and not IR(6) and not
IR(5) and IR(4)) or (not IR(7) and not IR(6) and IR(5) and not IR(4)) );
S2 <= W3 and sto and not SWC and not SWB and not SWA and not IR(7) and not IR(6) and not IR(5) and IR(4);
S3 <= W3 and sto and not SWC and not SWB and not SWA and not IR(7) and not IR(6) and not IR(4) ;
M <= W3 and sto and not SWC and not SWB and not SWA and not IR(7) and not IR(6) and IR(5) and not IR(4);
CnJ <=not(W3 and sto and not SWC and not SWB and not SWA and not IR(7) and not IR(6) and not IR(5) and IR(4));
END inputoutput_signal;
模拟向量测试方程/测试波形图/testbench
进行波形测试,以WRM(写存储器STO,SWC,SWB,SWA起始分别为0001)为例,结果如下:
W1: W2: W3: STO: CLR: SKIP: SW_BUS#: LDAR#: TJ: CEL#LR/W#: AR+1: 注意:W2时序由于SKIP的存在并没有真正利用,而是直接跳过,但图示中给出其应出现的电平信号
控制模块原理图
硬布线控制器的基本原理:
每个微操作控制信号都是一系列输入量的逻辑函数,即用组合逻辑电路来实现,S=f(Im,Mi,Tk,Bj)
其中Im是来自机器指令操作码译码器的输出信号,Mi是节拍点位信号,Tk是节拍脉冲信号,Bj是状态条件判断信号。
在TEC-5实验系统中,Tk(T1~T4)已经直接输送给数据通路,Im即为指令系统的IR7~IR4信号,Mi即为节拍点位信号(W1~W3),Bj信号包括:来自数据通路中运算器的仅为信号C;来自控制台的开关信号SWC,SWB,SWA;
每个控制信号都是上述输入信号的逻辑表达式,所以可用组合逻辑构造电路,对所有控制信号设计逻辑函数表达式即可。如
CEL#=STA*W3+LDA*W3+RRF2*W1+WRF2*W1+RRM2*W1+WRM2*W1 写成VHDL语句即为
CEL<=NOT(((((NOT IR7) AND (NOT IR6) AND IR5 AND IR4)AND W3)AND(STO AND (NOT SWC) AND (NOT SWB) AND (NOT SWA)))
OR((((NOT IR7) AND IR6 AND (NOT IR5) AND (NOT IR4))AND W3)AND(STO AND (NOT SWC) AND (NOT SWB) AND (NOT SWA)))
OR((STO AND SWC AND (NOT SWB) AND (NOT SWA))AND W1) OR((STO AND (NOT SWC) AND SWB AND SWA)AND W1)
OR((STO AND (NOT SWC) AND SWB AND (NOT SWA))AND W1) OR((STO AND (NOT SWC) AND (NOT SWB) AND SWA)AND W1));
控制程序总图
设计说明书
一、设计与调试任务:
设计并实现一台具有9条指令的模型计算机,其数据通路与TEC-5实验机的微程序控制器方案相同,但控制器要采用硬布线控制器。由于硬布线控制器大部分线路连线都在ispLSI1032芯片内部,因此设计方案的优劣主要取决于设计的思路和质量。
二、设计步骤:
1. 硬布线控制器的设计思路
硬布线控制器要实现指令的控制功能,关键在于它的组合逻辑译码电路。译码电路的任务是将一系列有关指令、时序等的输入信号,转换为一个个控制信号,输入到各执行部件中。
根据硬布线控制器的基本原理,针对每个信号S,可以列出它的译码函数 S = f(Im,Mi,Tk,Bj)
其中是机器指令Im机器指令操作译码的输出信号,Mi是节拍信号发生器的节拍电位信号,Tk是时序信号发生器的时序脉冲信号,Bj是状态条件判断信号。
在TEC-5计算机组成原理实验系统中,因为时序脉冲信号Tk(T1-T4)已经直接输送给数据通路,所以译码电路不需Tk作为输入。又因为指令系统比较简单,操作码只有4位,不需要专门的操作码译码器,因此Im直接就是操作码,即指令寄存器的IR4-IR7信号。Mi就是时序模块的节拍电位信号W1-W3。Bj包括:
①来自数据通路中的运算器ALU的进位信号C; ②来自控制台的开关信号SWC,SWB,SWA; ③其他信号。
每个控制信号的函数式都是上述输入信号的逻辑表达式,因此可以用各种组合逻辑构造电路网络,实现这些表达式的逻辑功能。理论上,只要所有控制信号都设计出译码函数,这个硬布线控制器的方案也就得到了。
2. 指令周期流程图
设计硬布线控制器的设计流程就是解决Im,Mi,Bj如何起作用的问题,可以使用流程图的方法。硬布线控制器以节拍为时间单位,一拍是从时序T1的上升沿到T4的下降沿的一段时间。在流程图中一个执行框就代表一拍。
但相较于微程序设计,还有一些需要考虑的因素。
⑴执行一条机器指令的节拍数
执行一条机器指令所需要的微指令数目在硬布线控制器中相当于机器指令所需的节拍数。决定执行一条指令需要的节拍数要根据所有指令而定,在本实验中,由于选用4拍对大多数指令就够了,所以节拍发生器产生3个节拍信号(W1-W3)。
对于需要节拍少的指令,在设计控制流程,对于所需节拍较少的指令流程的适当位置使SKIP控制信号有效,那么对于的节拍可以跳过,提高的性能。对于需要节拍多的指令,可以有两种方法,一是修改时序电路,采用变节拍的方式实现,二是将一条机器指令的执行化为占用两条或更多的机器指令节拍。
⑵控制台操作的问题
机器指令的执行流程设计出来后,还要有控制台操作。这部分属于机器指令系统,而又要完成机器指令那样以不超过3拍的时间来执行,以便与机器指令的执行方式统一起来。不同于微程序通过微程序地址记住处于控制台状态还是程序运行状态,在硬布线控制器中就要设置一个或几个标志来记录当前状态。根据这个标志可以区分控制台初始状态、控制台读内存、控制台写内存、程序运行状态。
3. 硬布线控制器
使用ISP技术,则控制器的电路设计完全是在开发软件上进行的,只要在计算机上面画出电路的原理图,编写好必要的程序,软件会自动完成控制器内部的联线控制,无需自己去接线。
设计出硬布线控制流程图后,就可以据此设计出译码逻辑电路。先根据流程图列出译码表,作为逻辑设计的依据。根据译码表可以写出每个控制信号的逻辑表达式,这个表达式就是它所在的行各乘积项相加。在编写译码表的过程中要注意综合和化简,可以考虑增加冗余项将相似信号合并为一个信号。
三、实验过程:
在准备好数据通路图和指令周期流程图后,做出组合逻辑译码表,接着在编程软件中根据译码表写出每个控制信号的逻辑表达式,本次试验比较重点的地方在于信号变量SST0的变化控制,当按下CLEAR时,此时要保证STO为0,而在程序连续运行的过程中,要保证在SST0控制下,STO可以在多于三拍的控制命令的后期变化为1。在解决了上述两个方面问题(即每个控制信号的逻辑表达式的写法和SST0控制部分)后,编译程序,下载程序到TEC-5系统中,按照管脚分配进行连线并开始测试,对出现的时序问题和错误管脚电平信号进行检查和修改,并再次编译下载程序直至调试过程无错误产生,保证全部控制流程图检查完毕并保证数据通路的执行部件功能正确。接着编写一段包括有全部指令系统的测试程序并将程序和有关数据写入TEC-5系统,分别用连续和DB方式运行,对出现的结果进行检查,以验证机器执行指令的正确性。最后编写一段表演程序,令机器执行并接受验收。在整个编写程序、下载调试、检查验收过程中,随时记
录出现的问题和存在的疑问并着手解决,最终写入相应文档中。 对应的操作指令系统如下:
操作流程为:
地址 指令 功能 R0 R1 R2 R3 60H 61H 83H 01001000 24H × 60H 61H 24H 83H × 01001101 24H 83H 60H 61H 24H 83H × 00000100 A7H 83H 60H 61H 24H 83H × 01011000 A7H 83H 60H 61H 24H 83H × 00100001 A7H 83H 60H 61H 24H 83H × 00011100 46H 83H 60H 61H 24H 83H × 00110100 46H 83H 60H 61H 24H 83H 46H 01110000 46H 83H 60H 61H 24H 83H 46H 01110100 46H 83H 60H 61H 24H 83H 46H 01100000 46H 83H 60H 61H 24H 83H 46H 机器代码 寄存器内容 内存单元 00H LDA R0,[R2] [R2]→R0 01H LDA R1,[R3] [R3]→R1 02H ADD R0,R1 03H JC R2 04H 05H 06H 07H 08H 09H R0+R1→R0 若C=1,则R3→PC AND R1,R0 R1&R0→R1 SUB R0,R3 R0-R3→R0 STA R0,[R1] R0→[R1] OUT R0 R0→DBUS OUT R1 R1→DBUS STP 暂停执行 实验结果:(R0)=46H, (R1)=83H, (R2)=60H, (R3)=61H, [83H]=46H。
四、实验结论和总结:
根据硬连线控制器的相关理论基础,通过将程序控制器流程图编写为相应的VHDL程序并下载到TEC-5系统中正确运行,实现了硬连线控制器的控制功能,完成了实验任务。证明了硬连线控制器理论的正确性,提高了动手操作能力和解决问题的能力,增加了相关实验经验。
设计与调试小结
设计硬布线控制器,先根据设计好的硬布线控制器的指令周期流程图,分别列出每条控制信号的逻辑表达式,这部分设计主要是和时序中的W1-W3有关。
在列写逻辑表达式及编程下载调试过程的出现的问题:
1. 在JC跳转指令中,需要通过C进位来判断下一条指令是跳转还是顺序执行,这个C应
该如何编写?
解决方案:C是ALU的运算进位信号,在编码时候要考虑进去,就像时序W一样与在逻辑表达式中,就和IR7-4和SW3-0一样是多路选择的条件。
2. 在ALU功能表中没有A-B运算,应该如何处理?
解决方案:ALU的逻辑功能表中算术运算部分又分为两行,一行是Cn#=0,另一行是Cn#=1,Cn#是一个强制进位,低电平有效,当Cn#=1时,产生强制进位,则运算出的A-B-1再加上末位的强制进位之后正好输出的就是A-B,而在编写其他功能比如A+B时,则还是让Cn#=0不产生强制进位。即Cn#也是一控制信号,需要编写到程序当中。
3. 对于像LR/W#之类的信号,高低电平代表不同的意思时怎么编逻辑表达式?
解决方案:还是只看为1有效的情况,为0的情况不用写入逻辑表达式的或中,否则会出现只有在全部都为0有效时结果才会为0,而这种情况是不可能出现的,导致LR/W#会一直为1。相同的情况也出现在S0-S3和M的编写上。
4. 如何编写STO以使得控制台可以自动转化?
解决方案:当CLR信号有效时, SST0和STO置0。当W3上升沿时,将SST0置1。在之后一个W1节拍上升沿,并且SSTO为1时,STO置1。由此STO,SWC,SWB,SWA即确定了此刻控制器进入的控制台,实现自动跳转的功能。
5. 如何进行最后的程序运行?
解决方案:按照要求将所需程序和数据存入寄存器和内存中,确认数据均正确存入后,选择DB(单步)或者DP(单拍)或者连续方式运行程序,检查所有可能输出及相关管脚电平变化情况,无误后结束。
6. SKIP值的调试与sto和ssto信号的正确控制:
解决方案:我们加入qx向量,在调试时便于观察STO,SWC,SWB,SWA的信号
7. 有关搭线
解决方案:因为,我们有时候会在调试硬件的时候发现程序的错误,然后更改程序后就必须再重新烧制,而烧制的时候管脚信息是随机重新分配的,所以如果不规定好每一个管教的分布,就会使得每一次程序的更改都需要重新打一次线,这无疑是一个非常巨大的劳动量,所以我们组直接在程序中规定好了每个管脚的信息,保证了只需要搭一次线。
本组各成员实验心得体会
郭逊:
这次计组的课程设计使我深刻的理解了计算机的工作过程,让我收获很多。
第一:对数据通路的再一次熟悉。其实在做微程序控制器实验时,我们已经在老师的指导下熟悉了数据通路全过程。这次做课程设计,由于需要指令的译码和分析,我又反复根据指令熟悉了数据通路,对于寄存器堆,存储器,几大总线,各控制信号几乎烂熟于胸,并从熟悉数据通路的过程中,认识到计算机执行的准确性和精密性。在我看来,计算机其实很傻,必须我们告诉它在什么时刻执行什么代码,正确性必须又程序员来控制。计算机又是执行力很强的,它可以高效的执行我们给的指令。所以要完成一项工作,必须操作人员充分了解计算机性能,并利用它的优点来解决问题。
第二:提高了VHDL编写能力。在数字逻辑课中,我们接触了VHDL语言,在本次计组课程设计中,我们自己编写了VHDL语言,完成了控制器的设计。在编写过程中,时序是一个难点,怎样STO由0变1,由1变0是我们重点考虑的。另外ALU的末端进位cn非的值在ADD时为0,在SUB中是1也是我们反复调试才发现的。各个指令的译码由于有同学的合作,在编程中只需要适当的化简即可,没有什么难度。总之,VHDL语言将硬件软件化,减少了编写人员的难度,提高了开发的速度,是一个值得研究的语言。
第三:团队合作的重要性。我们团队的人都很给力,由于每个人负责的事情可以准确的完成,这使我们不同人之间的衔接很顺利。正是由于每个人做好了分内的事,总体的事情也就水到渠成了。我们在调试和修改程序上的时间用的很少,也正是由于流程图转化成译码图正确,译码图转化成VHDL语言也正确,这为我们减少了很多时间。
总之,本次课程设计我们顺利完成了,相信有了本次课程设计的学习和积累,我们在学习以后的硬件相关课程时会更有兴趣,更有信心。
张宇明:
关于VHDL代码: 果然看懂别人的代码是件痛苦的事,所以我们果断决定还是自己写吧。
关于连线: 都说程序员是现存最大的手工艺人群体,连线真心是个细致活。若是一个不小心连错了某根线,将来排查起来,就是一件大工程。不过随着对系统的越加熟悉,线接得多了,也便能轻易找出某接口的位置;根据程序运行的情况,也能方便的找出究竟是哪个部分(寄存器/RAM/总线/ALU)出的问题。
关于指令以及数据的录入: 由于是自己设计的硬布线,并不像实验四那样可以通过微程序地址灯查看当前的程序运行情况。不过也可通过输出STO/SST0的信号来查看程序是在第一个W1-3还是第二个W1-3。熟练之后,可以不看书上的流程图,随意执行读行寄存器、RAM等各种操作,代价就是手指上的皮掉了一层——呵呵 >.<
谌惠民:
我觉得这个实验和微程序控制器的实验是各有各的特点:微程序控制器的控制器是写好了的,我们只需要连线和将程序写进去然后执行看结果就可以了,而且每一步的结果和下一
步的指令都在指令灯上显示得非常明白。而这次的硬布线控制器控制程序是自己写的,特别是时序那一块我觉得有点难理解。还有就是各个微指令的控制信号的逻辑表达式的化简以及各管脚的分配,真的要很细心。开始我们有一个管脚连接错误了,找了很久。相对比设计这一块,反而是连线简单了许多。只要细心,后来的程序执行起来还是很顺利的。不管怎么说,这次的课程设计大大提升了我对现实的认识,只是不只是停留在理论阶段。对实际的设计有了更深的了解,也觉得对计算机更加感兴趣了。
廉鸿一:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务