二、实验目的及要求
1.掌握微程序控制器的工作原理和组成结构;
2.构造一台模型机并完成调试,掌握整机概念。
三、实验环境
PC计算机,数字逻辑实验板
四、实验内容及方案设计
(1)在实验1、实验2、实验3和实验4的基础上,构造一台模型机并完成调试,掌握整机概念。8位模型机CPU的电路原理图,如图5.1所示。
图 5.1 8位模型机CPU的顶层设计电路原理图
(2)微地址形成电路参考设计
微地址分支转移控制电路为控制存储器提供地址信号。微地址控制电路根据来自指令寄存器IR的控制指令操作码IR[7..4]、控制台的控制信号SWA和SWB、分支转移条件控制标志P[4..1]和状态标志FC与FZ,生成下一个微地址的控制信号uA[5..0],控制微程序按正常顺序执行微指令或者实现分支转移。微地址形成电路,如图5.2所示。
图5.2 分支转移控制电路原理图
P0、P1、P2和P3的作用如下表所示:
表5-1 微地址转移控制表
|-----|--------------------------------------------------|
| 测试位 | 功能 |
| P0 | =1时,根据后继微地址NµA5~NµA0和模式开关SWC、SWB、SWA确定下一条微指令的地址。 |
| P1 | =1时,根据后继微地址NµA5~NµA0和指令操作码IR7~IR4确定下一条微指令的地址。 |
| P2 | =1时,根据后继微地址NµA5~NµA0和进位标志C确定下一条微指令的地址。 |
| P3 | =1时,根据后继微地址NµA5~NµA0和结果为0标志Z确定下一条微指令的地址。 |
M5-M0:是后继微地址NuA5-NuA0。
(2)指令编码设计参考设计
如LDI、 ADD、HALT指令操作码分别取001,1001,1111,三指令编码如表5-2
表5-2 指令编码表
|----|-----------|------|------------------------------------|----------|--------------------|
| 地址 | 汇编语言 | 指令格式 || 16进制 机器码 | 功能 |
| 地址 | 汇编语言 | 操作码 | 地址码 Op rd,rs **** ** | 16进制 机器码 | 功能 |
| 00 | LDI R1,31 | 0001 | 0100 0011 0001 | 14 31 | 31→R1:R1=31 |
| 02 | LDI R0,55 | 0001 | 0000 0101 0101 | 10 55 | 55→R0 :R0=55 |
| 04 | ADD R1,R0 | 0101 | 0100 | 54 | (R1)+(R0)→R1:R1=86 |
| 05 | HALT | 1111 | 0000 | F0 | 停机 |
表5-3 微指令编码表
|-------------|--------------|---------------|--------------------------------------------------|-------------------------------|-------------------|-------|
| 指令 | 功能 | 指令码 | 微操作 | 微命令 | 微指令码 | 微地址 |
| 取指周期 | | | (1)PC→MUX→AR,PC+1→PC (2)RAM→BUS,BUS→IR,P1 | M23,M21,M20,M5-M0 M19,M13,M7, | 00B0003f 00082080 | 00 3f |
| LDI Rd,data | data→Rd | 0001Rdxx data | (1)PC→MUX→AR,PC+1→PC (2)RAM→BUS,BUS→Rd | M23,M21,M20,M4,M1 M17,M13 | 00B00012 00022000 | 01 12 |
| ADD Rd,Rs | (Rd)加(Rs)→Rd | 0101RdRs | (1)M=0,S3S2S1S0=1001,CN=0("+") (2)ALU→BUS,BUS→Rd | M31, M30,M27,M24, M17,M12 | ++8C++9021000 | 05 |
| HALT | 停机 | 1111xxxx | STOP | M18 | 00040000 | 0F |
根据表5-2、表5-3,写出微操作、微命令、微指令编码和微地址。将微指令码写入到控制存储器的初始化文件ROM_5.mif中。将指令编码写入到存储器的初始化文件RAM_2.mif中。编译、仿真,仿真正确后,锁定引脚,再编译,下载到实验系统中,完成单步硬件调试。在调试过程中,注意观察指令所对应微程序的微指令编码的正确性。
4、硬件调试
(1)引脚锁定
参照实验1的锁定引脚步骤。
(2)所有端口分配完成后,再次编译
(3)编译通过后,下载运行调试4、硬件调试
5、
(1)拟改变指令的操作数则参照上述步骤,改写ROM_5.mif、RAM_2.mif文件,进行仿真并下载到实验系统中,完成单步硬件调试。
- 拟改变指令的操作码则参照上述步骤,改写ROM_5.mif、RAM_2.mif文件,进行仿真并下载到实验系统中,完成单步硬件调试。
在调试过程中,注意观察微指令编码的正确性,并记录实验数据及仿真波形,验证指令执行的准确性。 (本实验可以仅做仿真)
五、实验代码
原理图
ALU代码:
module ALU181a (S, A, B, F, M, CN, CO, FZ);
input[3:0] S; input[7:0] A,B; input M, CN;
output[7:0] F; output CO, FZ;
//wire[7:0] F; wire CO;
wire[8:0] A9, B9; reg FZ; reg[8:0] F9; reg [7:0] F; reg CO;
assign A9 = {1'b0, A} ; assign B9 = {1'b0, B} ;
always @(M or CN or A9 or B9 or S) begin
case (S)
4'b0000 : if (M==0) F9<=A9+CN ; else F9<=~A9 ;
4'b0001 : if (M==0) F9 <= (A9 |B9) + CN ; else F9<=~(A9 | B9) ;
4'b0010 : if (M==0) F9 <= (A9 |((~B9)&9'b011111111))+ CN; else F9<=(~A9) & B9 ;
4'b0011 : if (M==0) F9 <= 9'b000000000-CN; else F9<=9'b000000000;
4'b0100 : if (M==0) F9 <=A9+(A9 & ((~B9)&9'b011111111))+CN; else F9<=~(A9 & B9) ;
4'b0101 : if (M==0) F9<=(A9|B9)+(A9& ((~B9)&9'b011111111))+CN; else F9<= ~B9 ;
4'b0110 : if (M==0) F9 <= A9 - B9 - CN ; else F9<= A9 ^ B9 ;
4'b0111 : if (M==0) F9 <= (A9 & (((~B9)&9'b011111111))) - CN ; else F9<= A9 & (~B9) ;
4'b1000 : if (M==0) F9 <= A9 + (A9 & B9)+CN ; else F9<= (~A9) | B9 ;
4'b1001 : if (M==0) F9 <= A9 + B9 + CN ; else F9<= ~(A9 ^ B9) ;
4'b1010 : if (M==0) F9<=(A9|(((~B9)&9'b011111111)))+(A9&B9)+CN; else F9<= B9 ;
4'b1011 : if (M==0) F9 <= (A9 & B9) - CN ; else F9<=A9 & B9 ;
4'b1100 : if (M==0) F9 <= A9 + A9 + CN ; else F9<=9'b000000001 ;
4'b1101 : if (M==0) F9 <= (A9 | B9)+A9+CN; else F9<= A9 | (~B9) ;
4'b1110 : if (M==0) F9 <= (A9 | (((~B9)&9'b011111111)))+A9+CN; else F9<= A9 | B9 ;
4'b1111 : if (M==0) F9 <= A9 - CN ; else F9<= A9 ;
default : F9 <= 9'b000000000 ;
endcase
//if (A9 == B9) FZ <= 1'b0 ; else FZ <= 1'b1 ;
F <= F9[7:0] ;
if(F==8'b00000000) FZ <= 1'b1 ; else FZ <= 1'b0 ;
if(M==0) CO <= F9[8];
end
endmodule
六、实验结果测试
改写前:
改写后: