数字系统的设计

二、实验目的及要求

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文件,进行仿真并下载到实验系统中,完成单步硬件调试。

  1. 拟改变指令的操作码则参照上述步骤,改写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

六、实验结果测试

改写前:

改写后:

相关推荐
一口一口吃成大V2 小时前
FPGA随记——FPGA时序优化小经验
fpga开发
贾saisai3 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发
redcocal7 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
辰哥单片机设计11 小时前
门磁模块详解(防盗感应开关 STM32)
stm32·单片机·嵌入式硬件·传感器
夜间去看海11 小时前
基于51单片机的自动清洗系统(自动洗衣机)
嵌入式硬件·51单片机·proteus·洗衣机
yrx02030711 小时前
stm32 IIC总线busy解决方法
stm32·单片机·嵌入式硬件
Archie_IT14 小时前
【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载
arm开发·stm32·单片机·嵌入式硬件
辰哥单片机设计14 小时前
1×4矩阵键盘详解(STM32)
stm32·单片机·嵌入式硬件·矩阵·传感器
wmkswd14 小时前
CAN总线-STM32上CAN外设
stm32·单片机·嵌入式硬件