This repository is 32-bit CPU(microprogram) in Proteus.
微程序流程图:https://www.processon.com/diagraming/5a4f89e3e4b01acda58c3d8b
微指令表:https://shimo.im/sheet/hZ38w8z0aB0NJl4N
内容 | 状态 | 分配 |
---|---|---|
ALU | 已完成 | CL封装 |
RAM/ROM | 已完成 | CL |
I/O | 已完成 | LSY |
REGISTER | 已完成 | LSY |
PC | 已完成 | DY |
PSW | 已完成 | DY |
CLOCK | 已完成 | CL |
CONTROLLER | 已完成 | ALL |
计组大作业
软件版本:Proteus 8.4 SP0
总线:16位数据,16位地址
结构:待定
寄存器:四个通用寄存器,其中包括累加寄存器AC
指令集:
序号 | 指令 | 功能 | 备注 | 二进制形式(16进制) | 微程序首地址 |
---|---|---|---|---|---|
1 | STO (XXXX), R_i | R_i -> 存储器 | 01 0@ $$ $$ | 000001 | |
2 | LAD R_i, (XXXX) | 存储器 -> R_i | 02 0@ $$ $$ | 001000 | |
3 | RRMOV R_i, R_j | R_j -> R_i | 03 @@ | 000111 | |
4 | IRMOV R_i, XXXX | XXXX -> R_i | 04 0@ $$ $$ | 001000 | |
5 | ADD R_i, R_j | R_i + R_j -> R_i | 05 @@ | 110000 | |
6 | SUB R_i, R_j | R_i - R_i -> R_i | 06 @@ | 110100 | |
7 | AND R_i, R_j | R_i & R_j -> R_i | 07 @@ | 111000 | |
8 | XOR R_i, R_j | R_i ^ R_j -> R_i | 08 @@ | 111100 | |
9 | CLA | AC <- 0000H | 09 00 | 001111 | |
10 | JMP FLAG | PC <- PC+offset | 64KB | 0A 00 $$ $$ | 001010 |
11 | JL FLAG | if R_i < R_j, PC <- PC+offset | 64KB | 0B 00 $$ $$ | 100010 |
12 | IRET | 中断返回 | 恢复现场 | 0C 00 | 011001 |
13 | PUSH R_i | SP <- SP-1, (SP) <- R_i | 写一个机器字 | 0D 0@ | 010000 |
14 | POP R_i | R_i <- (SP), SP <- SP+1 | 0E 0@ | 010101 |
@:寄存器指示符(0<=@<=3)
$:立即数
先一起设计好每个元件的接口,
分开做每个元件,放在单独的文件夹里并测试,总目录/component
测试无误后编译并生成元件,放在/build下
最后一起合并
ALU_BUS 低有效,ALU运算结果到BUS的出口开关
ALU_M, ALU_CN, ALU_S0, ALU_S1... 运算控制
ZREG1_EN,ZREG2_EN 高有效,暂存器1,2的使能端
16位数据到ZREG1,ZREG2
16位运算结果到BUS
MEM_CE 高有效 存储器的片选信号
MEM_WE CE有效情况下,1为写,0为读
AR_LD 同步 AR置数信号
总线输入 16位地址
CLK 全局时钟信号
16位数据到BUS
将原始的clk信号分为T1, T2信号交替产生
RESET 置0后输入一个CLK信号, 再将其置1即可
交替的T1, T2信号
四个16位寄存器 AC R1, R2, R3
自带四选一
REG_BUS_IN[0..15] 接总线
REG_CLK 时钟信号 上升沿
REG_IN_EN 选择信号在输入有效
REG_OUT_EN 选择信号在输出有效
REG_AC_CLR 累加器AC清零
REG_BUS_OUT[0..15] 输出到总线
逻辑门输入,七段显示输出(七段显示接通用寄存器)
输入寄存器RI,长期有效
INPUT_EN 输入寄存器到总线的使能端,高有效
INPUT_BUS[0..15] 输入的数据,接总线
DBUS[0..15]:数据总线,输入端
PC[0..15]:数据总线,输出端
CLR:同步清零,高有效
W/R:读/写使能,1为写有效,0为读有效
PCINC:PC值+1,高有效
LPC:同步置数,高有效
CLK:时钟信号,上升沿
CLK > CLR > W/R > PCINC, LPC (全部为同步操作)
PCINC与LPC不可同时为1
W/R为写有效时,DBUS做输入;读有效时,DBUS做输出
CLR:同步清零,高有效
EN:使能信号,高有效
IC:溢出(进位)信号,高有效
CLK:时钟脉冲,上升沿
CLK > CLR > EN > IC
T1把当前微程序存到微程序寄存器里,T2把微程序寄存器后六位,也就是下一个微程序地址存到一排寄存器里,同时这个步骤可以用p字段进行跳转
连接时钟信号, 将RESET先置0后置1即可, 可通过各个数码管观察到数据变化状态、流程状态