内蒙古大学
《计算机组成原理》
实验设计报告
设计题目:组合逻辑控制器设计
班级:13软件二班
小组组长:张曦(0131124497)
小组成员:李聪、高浪、沈冲、王佳煜
、罗旭亮
指导老师:刘彩霞
一、实验设计目的:
设计一个指令格式如下图的组合逻辑控制器。
二、实验设计原理及思路: 1、cup 数据通路图如下:
ALU
AC
MM ADD
AR DR
IR
PC SB
IB
GR (R0,R1)
操作码
8
9
7 0
0:CLA
寻址方式
寄存器编号
直接寻址地址
0:寄存器直接
0:R0 1:R1
1
2、指令微流程图如下:
T0:PC-SB,SB-AR,RD
T1:DR-SB,SB-IR
T2:PC+1
IR(9)=0(CLA)IR(9)=1(ADD) T0:0-AC
IR(8)=1 (存储器直接寻址)
T0:(IR(0))-SB,SB-ALU.R,AC-ALU.L T1:ADD,ALU.O-AC T0:IR(0-7)-SB,SB-AR,RD
T1:DR-SB,SB-ALU.R,AC-ALU.L T2:ADD,ALU.O-AC
IR(8)=0
(寄存器直接寻址)
其中微命令如下:
PC-SB
DR-SB
IR(0)-SB
IR(0-7)-SB
SB-AR
SB-IR
SB-ALU.R
0-AC
ALU.0-AC
AC-ALU.L
PC+1
RD
ADD
3、微命令编码设计
3 2 2 1 1 1 1
4、此地址部分设计:
NAC字段:2位
00:顺序;01:无条件跳转;10:指令跳转;11:add寻址方式跳转
NA字段:4位
共9跳微指令所以NA占4位
5、控制存储器存储空间分配:
三、实验代码(C++):
#include
#include
using namespace std;
int findchar(char ch,char str[],int n)
{
i nt i=0;
w hile(str[i]!=ch&&i i++; i f(i==n) {i=1;return 1;} r eturn 0; } void caozuo(int wcx[10][17],int zl[]) { i nt i=0; f or(i=0;i<17;i++) cout< c out< f or(i=0;i<17;i++) cout< c out< f or(i=0;i<17;i++) cout< c out< i f(zl[0]==1) { for(i=0;i<17;i++) cout< cout< if(zl[1]==1) { for(i=0;i<17;i++) cout< cout< for(i=0;i<17;i++) cout< cout< for(i=0;i<17;i++) cout< cout< return; } for(i=0;i<17;i++) cout< cout< for(i=0;i<17;i++) cout< cout< return; } f or(i=0;i<17;i++) cout< c out< r eturn; } void ADD_1(int R0[],int AC[]) { i nt i,cn=0; f or(i=0;i<8;i++) { cn=(R0[i]&AC[i+1])|((R0[i]^AC[i+1])&cn); } f or(i=0;i<8;i++) { AC[i+1]=R0[i]&AC[i+1]; } A C[0]=cn; r eturn; } void ADD_2(int AC[],int R0[],int n=0) { i nt i; f or(i=0;i<8;i++) { R0[i]=AC[i+1]; } r eturn; } main() { i nt wcx[10][17]= { 0,0,1,0,1,0,0,0,0,1,0,0,0,-1,-1,-1,-1, 0,1,0,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1, 0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0, //取指 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0, //CLR 0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1, //ADD寻址 0,1,1,1,1,0,0,1,0,0,0,0,0,-1,-1,-1,-1,//ADD寄存器 0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0, 1,0,0,0,1,0,0,0,0,1,0,0,1,0,1,1,1,//ADD存储器 0,1,0,1,1,0,0,1,0,0,0,0,1,1,0,0,0, 0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0 }; c har ch[1000]; c har s[3][1000]; c onst char * d = " ,"; c har *p; w hile(1) { int i=0,n=0; int R0[8]={0},R1[8]={0},AC[9]={0}; int x[100],e; int zl[10]={0}; int zl2[10]={0}; cout<<"请输入命令:"< gets(ch); if(ch[0]=='1') break; if(strcmp(ch,"CLR")==0||strcmp(ch,"clr")==0) { zl[0]=0; zl2[0]=0; cout<<"指令:"; for(i=0;i<10;i++) { cout< } cout< caozuo(wcx,zl); } else { if(findchar(' ',ch,strlen(ch))!=0) n=1; if(findchar(',',ch,strlen(ch))!=0) n=2; else n=3; p = strtok(ch,d); for(i=0;i { strcpy(s[i],p); p=strtok(NULL,d); } e=n; /////////////////////////////////////////////////////////////// while(1) { if(strcmp(s[0],"ADD")==0||strcmp(s[0],"add")==0) { zl[0]=1; zl2[0]=1; } if(e==1) break; if(e==2) { if(strcmp(s[1],"r0")==0||strcmp(s[1],"R0")==0) { zl[1]=0; zl[9]=0; ADD_1(R0,AC); } else if(strcmp(s[1],"r1")==0||strcmp(s[1],"R1")==0) { zl[1]=0; zl[9]=1; ADD_1(R1,AC); } else { zl[1]=1; for(i=0;i { x[i]=int(s[1][i])-48; for(int j=2;j<10;j++) zl[j]=1; } } break; } if(e==3) { if(strcmp(s[2],"r0")==0||strcmp(s[2],"R0")==0) { zl2[1]=0; zl2[9]=0; } else if(strcmp(s[2],"r1")==0||strcmp(s[2],"R1")==0) { zl2[1]=0; zl2[9]=1; } else { zl2[1]=1; for(i=0;i { x[i]=int(s[1][i])-48; for(int j=2;j<10;j++) zl2[j]=1; } } e--; } } cout<<"指令:"; for(i=0;i<10;i++) { cout< } cout< if(n==3) { cout<<"指令:"; for(i=0;i<10;i++) cout< cout< } caozuo(wcx,zl); if(n==3) { cout<<"操作二:"< caozuo(wcx,zl2); } if(n==2) { cout< for(i=0;i<8;i++) { cout< } cout< cout< } if(n==3) { ADD_1(R0,AC); ADD_1(R1,AC); ADD_2(AC,R0,0); cout< for(i=0;i<8;i++) { cout< } cout< cout<<"R1:"; for(i=0;i<8;i++) { cout< } cout< cout< } } } return 0; } 三、实验结果图如下: 五、实验总结: 组合逻辑控制器是将控制部件做成产生专门固定时序控制信号的逻辑电路,产生各种控制信号,这种逻辑电路以使用最少元件和取得最高操作速度为设计目标,因为该 逻辑电路是由门电路和触发器构成的复杂树型网络。