计算机组成系统实验
课程设计报告
题 目 嵌入式CISC模型计算机设计(B类) 院 (系): 研究生学院 专 业: 计算机应用技术 学生姓名: 周 洁 学 号: 102031129 指导教师: 陈智勇 职 称: 副教授
2011年05月22日
目 录
1.1 实验题目 .............................................................. 1
1.1.1 实验的题目 ..................................................................................................................... 1 1.2 实验的具体步骤 ......................................................... 1
1.2.1 CISC模型机数据通路框图 ............................................................................................ 1 1.2.2 操作控制器的逻辑结构框图 ....................................................................................... 1 1.2.3机器指令格式和指令系统 .............................................................................................. 2 1.2.4时序产生器电路 .............................................................................................................. 2 1.2.5微程序流程图 .................................................................................................................. 2 1.2.6操作控制器单元(即微程序控制器) .......................................................................... 3 1.2.7嵌入式CISC模型计算机的顶层电路图 ....................................................................... 5 1.2.8汇编语言源程序 .............................................................................................................. 5 1.2.9 机器语言源程序 ............................................................................................................. 5 1.2.10机器语言源程序的功能仿真波形图及结果分析 ........................................................ 6 1.2.11故障现象和故障分析 .................................................................................................... 6 1.2.12 心得体会 ....................................................................................................................... 7 1.2.13 软件清单 ....................................................................................................................... 7
1.1 实验题目
1.1.1 实验的题目
设计一台嵌入式CISC模型计算机(采用定长CPU周期),并运行能完成一定功能的机器语言程序进行验证,程序功能为:输入包含10个整数(8位二进制补码表示)的数组M(不采用RAM),输出最小负数。(要求采用p3测试)
1.2 实验的具体步骤
1.2.1 CISC模型机数据通路框图
说明:范例中设计时,外部时钟信号上边沿有效。
1.2.2 操作控制器的逻辑结构框图
说明:在T4内形成微指令的微地址,并访问控制存储器,在T2的上边沿到来时,将读出的微指令打入微指令寄存器,即图中的微命令寄存器和微地址寄存器。
- 1 -
1.2.3机器指令格式和指令系统
由此可见,本模型机中的指令系统有基本指令,下表列出了每条指令的格式、汇编符号和指令功能。
助记符号 IN1 Rd 指令格式 1 0 0 0 ×× 1 1 1 1 功 能 Rd ×× Rd Rd Rd 将数据存到Rd寄存器 (Rs)→LED (Rs)-(Rd),锁存CY和ZI,SF (Rd)+1→Rd data→Rd OUT1 Rs CMP Rs,Rd Rs Rs 1 0 1 0 INC Rd MOV Rd,data 1 1 0 1 ×× 1 0 0 1 ×× data JMP addr 1 1 1 0 ×××× addr addr→PC JB addr 1 0 1 1 ×××× addr 若小于,则addr→PC Mov1 Rs,Rd 说明:①对Rs和Rd的规定: 1 1 0 0 Rs Rd (Rs)→Rd Rs或Rd 0 0 0 1 1 0 1 1 7 符号位 选定的寄存器 R0 R1 R2 R3 ②模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下:
6 5 4 3 2 1 0 尾数 1.2.4时序产生器电路
T1、T2、T3、T4与CLR、Q之间的关系图如下图所示:
CLR Q T1 T2 T3 T4
一个CPU周期 图一
1.2.5微程序流程图
微程序控制器的设计过程为:
(1)根据指令格式和指令系统设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地
- 2 -
址;
(2)设计微指令格式和微指令代码表; (3)设计地址转移逻辑电路;
(4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器; (5)设计微程序控制器的顶层电路(由多个模块组成)。 00 PC→AR PC+1 02 RD M BUS→IR 08 P(1) IN1 08 SW→BUS BUS→Rd PC→AR PC+1 03 00 ROM→BUS BUS→Rd MOV1 09 CMP 0A Rs→BUS BUS→AC 04 Rd→BUS BUS→DR 05 00 AC-DR 锁存FC和FZ FS=1 00 15 ROM→BUS BUS→PC 30 FS=0 P(3) JB 0B PC→AR PC+1 15 MOV2 00 OC 0D Rd→BUS BUS→AC 12 AC+1→BUS BUS→Rd 07 00 00 0E PC→AR PC+1 13 ROM→BUS BUS→PC 00 0F Rs→LED INC JMP OUT1 Rs→BUS BUS→RD 06 00 00 图二 CISC模型机中所有机器指令的微程序流程图
1.2.6操作控制器单元(即微程序控制器)
(1)设计微指令格式和微指令代码表
CISC模型机系统使用的微指令采用全水平型微指令,字长为25位,其中微命令字段为17位,P字段为2位,后继微地址为6位,其格式如下:
24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
LOAD LDPC LDAR LDIR LDRi RD_B RS_B S1 S0 ALU_B LDAC LDDR WR CS SW_B LED_B LDFR P1 P2 后继微地址
由微指令格式和微程序流程图编写的微指令代码表如下所示,在微指令的代码表中微命令字段从左边到右代表的微命令信号依次为:LOAD、LDPC、LDAR、LDIR、LDRi、RD_B、RS_B、S1、S0、ALU_B、LDAC、LDDR、WR、CS、SW_B、LED_B、LDFR。
- 3 -
微地址 微命令字段 P1 P2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 P3 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 后继微地址 000010 001000 000000 000101 000000 000000 000011 000100 001111 000000 010010 010011 000000 000000 000000 000000 000000 000000 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 000010 1 0 0 1 0 1 1 0 0 1 0 0 1 0 1 1 0 000011 1 0 0 0 1 1 1 0 0 1 0 0 1 0 1 1 0 000100 1 0 0 0 0 0 1 0 0 1 0 1 1 1 1 1 0 000101 1 0 0 0 0 1 1 0 1 1 0 0 1 1 1 1 1 001000 1 0 0 0 1 1 1 0 0 1 0 0 1 1 0 1 0 001001 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 001010 1 0 0 0 0 1 0 0 0 1 1 0 1 1 1 1 0 001011 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 001100 1 0 0 0 1 1 0 0 0 1 0 0 1 1 1 1 0 001101 1 0 0 0 0 0 1 0 0 1 1 0 1 1 1 1 0 001110 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 001111 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 010010 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 010011 0 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 0 001111 0 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 0 100011 1 0 0 0 0 1 1 0 0 1 0 0 1 1 1 1 0 (2)设计地址转移逻辑电路
地址转移逻辑电路是根据微程序流程图3-2中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。
由于微地址寄存器中的触发器异步置“1”端低电平有效,与µA4~µA0对应的异步置“1”控制信号SE5~SE1的逻辑表达式为:(µA5的异步置“1”端SE6实际未使用)
SE6= FS·P(3)·T4 SE5=(FC+FZ)·P(2)·T4 SE4=I7·P(1)·T4 SE3=I6·P(1)·T4 SE2=I5·P(1)·T4 SE1=I4·P(1)·T4
- 4 -
1.2.7嵌入式CISC模型计算机的顶层电路图
图三
1.2.8汇编语言源程序
由给出的题目和设计的指令系统编写相应的汇编语言源程序。算法思想为:采用R1寄存器存放从开关输入的任意一个整数,R3存放输入的最小负数,R0和R2用于控制循环,用一个循环程序实现如下: MOV1 R0,OOH 将0存入寄存器R0 MOV1 R1,OAH 将10存入寄存器R0 MOV1 R2,FFH 将-1存入寄存器R0 L1:IN1 R3 将输入的数存入R3 INC R0 R0中的数自加1 CMP R0,R1 比较R0和R1的大小 JB L2 若R0小于R1,跳转到L2 OUT R2 输出R2
L2:CMP R2,R3 比较R2和R3的大小 JB L3 若R2小于R3,跳转到L3 JMP L1 无条件跳转到L1
MOV2 R3,R2 将R3中的内容移到R2 JMP L1 无条件跳转到L1
1.2.9 机器语言源程序
根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去。与1.2.8中汇编语言源程序对应的机器语言源程序如下:
助记符 地址(十六进制) 机器代码 功能 MOV1 R0,OOH 00 10010000 00H →R0
- 5 -
01 00000000
MOV1 R1,OAH 02 10010001 0AH →R1
03 00001010
MOV1 R2,FFH 04 10010010 FFH →R2
05 11111111
L1:IN1 R3 06 10000011 (SW) →R3 INC R0 07 11010000 (R0)+1→R0 CMP R0,R1 08 10100001 (R0)-(R1)
JB L2 09 10110000 若小于,L2 →PC
0A 00001100
OUT R2 0B 11111000 (R2)→LED L2: CMP R2,R3 0C 10101011 (R2)-(R3) JB L3 0D 10110000 L3→PC
OE 00010001
JMP L1 0F 11100000 L1→PC 10 00000110
L3: MOV2 R3,R2 11 11001110 (R3) →(R3)
JMP L1 12 11100000 L1→PC 13 00000110
1.2.10机器语言源程序的功能仿真波形图及结果分析
图四
结果分析:输入的整数依次为81H,80H,34H,88H,99H,23H,12H,37H,65H,86H。 结果输出:80H。
计算结果与事实相符,程序正确执行。
1.2.11故障现象和故障分析
1.在编译仿真过程中,发现指令寄存器IR中的汇编指令执行步骤发生错误。由于顶层电路的设计并没有错误,所以分析应该是ROM里的指令跳转发生错误,后来发现:在ROM器件的VHDL编程发生错误,跳转指令JMP的跳转地址错误,导致了程序执行步骤的错误。
2.仿真时,输入几个十六进制整数补码,发现输出的执行结果并不是最小负数。后来根据观察仿真波形图中寄存器R3中存放的负数,可能是因为输入的整数时,并未经过数据总线传送并存放于寄存器R3中。最后分析得出故障原因是:每次输入的整数,需要对应IR中的输入指令81H,这样才能够成功输入整数,从而进行整数之间的比较大小。
- 6 -
1.2.12 心得体会
通过这次实验,我基本上了解了CISC模型机各个部件的具体工作原理,也对计算机组成原理有了进一步的理解掌握。在实验过程中,遇到了一些故障,主要还是对理论的认识不太深刻。在不断的发现问题和解决问题的过程中,我感觉这次实验不仅让我学到了许多理论知识,同时也让我明白了:不论做什么事,都要认认真真、踏踏实实的去做,终究会取得成功。
1.2.13 软件清单
1 ALU单元
ALU单元
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ALU IS PORT(
A:IN STD_LOGIC_VECTOR(7 DOWNTO 0); B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); S1,S0:IN STD_LOGIC;
BCDOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); CY,ZI,SF:OUT STD_LOGIC );
END ALU;
ARCHITECTURE A OF ALU IS
SIGNAL AA,BB,TEMP:STD_LOGIC_VECTOR(8 DOWNTO 0); BEGIN
PROCESS(S1,S0) BEGIN
IF(S1='0' AND S0='0')THEN AA<='0'&A; BB<='0'&B; TEMP<=AA+BB;
BCDOUT<=TEMP(7 DOWNTO 0); CY<=TEMP(8);
IF(TEMP=\"100000000\" OR TEMP=\"000000000\")THEN ZI<='1'; ELSE
ZI<='0'; END IF;
ELSIF(S1='0' AND S0='1')THEN
- 7 -
BCDOUT<=A-B;
IF((A(7)='0' AND B(7)='0') OR (A(7)='1' AND B(7)='1'))THEN IF(ACY<='0'; ZI<='0'; SF<='0'; END IF;
ELSIF((A(7)='0') AND (B(7)='1'))THEN CY<='1'; ZI<='0'; SF<='0';
ELSIF((A(7)='1') AND (B(7)='0'))THEN CY<='0'; ZI<='0'; SF<='1'; END IF;
ELSIF(S1='1' AND S0='0')THEN AA<='0'&A; TEMP<=AA+1;
BCDOUT<=TEMP(7 DOWNTO 0); CY<=TEMP(8);
IF(TEMP=\"100000000\")THEN ZI<='1';
ELSE
ZI<='0'; END IF; ELSE
BCDOUT<=\"00000000\"; CY<='0'; ZI<='0'; END IF; END PROCESS; END A;
2 状态条件寄存器单元
- 8 -
状态条件寄存器单元
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY LS74 IS PORT(
LDFR:IN STD_LOGIC; CY,ZI:IN STD_LOGIC; FS,FC,FZ:OUT STD_LOGIC );
END LS74;
ARCHITECTURE A OF LS74 IS BEGIN
PROCESS(LDFR) BEGIN
IF(LDFR'EVENT AND LDFR='1')THEN FC<=CY; FZ<=ZI; FS<=SF; END IF; END PROCESS; END A;
3 暂存寄存器单元
暂存寄存器单元
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY LS273 IS PORT(
D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC;
O:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
END LS273;
ARCHITECTURE A OF LS273 IS BEGIN
PROCESS(CLK)
- 9 -
BEGIN
IF(CLK'EVENT AND CLK='1')THEN O<=D; END IF; END PROCESS; END A;
4 3选1数据选择器
3选1数据选择器MUX3
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY MUX3 IS PORT(
ID:IN STD_LOGIC_VECTOR(7 DOWNTO 0); SW_B,CS:IN STD_LOGIC;
N1,N2:IN STD_LOGIC_VECTOR(7 DOWNTO 0); EW:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
END MUX3;
ARCHITECTURE A OF MUX3 IS BEGIN
PROCESS(SW_B,CS) BEGIN
IF(SW_B='0')THEN EW<=ID;
ELSIF(CS='0')THEN EW<=N2; ELSE
EW<=N1; END IF; END PROCESS; END A;
5 5选1数据选择器
- 10 -
5选1数据选择器MUX5
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY MUX5 IS PORT(
C,D,E,F,G:IN STD_LOGIC;
X1,X2,X3,X4,X5:IN STD_LOGIC_VECTOR(7 DOWNTO 0); W:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
END MUX5;
ARCHITECTURE A OF MUX5 IS
SIGNAL SEL:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
SEL<=F&E&D&C; PROCESS(SEL) BEGIN
IF(SEL=\"1110\") THEN W<=X1;
ELSIF(SEL=\"1101\") THEN W<=X2;
ELSIF(SEL=\"1011\") THEN W<=X3;
ELSIF(SEL=\"0111\") THEN W<=X4;
ELSIF(SEL=\"01111\") THEN W<=X5;
ELSE
NULL; END IF; END PROCESS; END A;
6 程序计数器单元
- 11 -
程序计数器单元PC
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PC IS PORT(
LOAD,LDPC,CLR:IN STD_LOGIC;
D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); O:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END PC;
ARCHITECTURE A OF PC IS
SIGNAL QOUT:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
PROCESS(LDPC,CLR,LOAD) BEGIN
IF(CLR='0')THEN
QOUT<=\"00000000\";
ELSIF(LDPC'EVENT AND LDPC='1') THEN IF(LOAD='0')THEN
QOUT<=D; --BUS->PC ELSE
QOUT<=QOUT+1; --PC+1 END IF; END IF; END PROCESS; O<=QOUT; END A;
7 地址寄存器单元
地址寄存器单元
8 主存储器单元
主存储器单元
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ROM16 IS PORT(
- 12 -
ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CS:IN STD_LOGIC;
DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
END ROM16;
ARCHITECTURE A OF ROM16 IS BEGIN
DOUT<=\"10010000\"WHEN ADDR=\"00000000\" AND CS='0' ELSE--MOV1 R0, 00H \"00000000\"WHEN ADDR=\"00000001\" AND CS='0' ELSE
\"10010001\"WHEN ADDR=\"00000010\" AND CS='0' ELSE--MOV1 R1, 0AH \"00001010\"WHEN ADDR=\"00000011\" AND CS='0' ELSE
\"10010010\"WHEN ADDR=\"00000100\" AND CS='0' ELSE--MOV1 R2, FFH \"11111111\"WHEN ADDR=\"00000101\" AND CS='0' ELSE
\"10000011\"WHEN ADDR=\"00000110\" AND CS='0' ELSE--IN1 R3 \"11010000\"WHEN ADDR=\"00000111\" AND CS='0' ELSE--INC R0 \"10100001\"WHEN ADDR=\"00001000\" AND CS='0' ELSE--CMP R0,R1 \"10110000\"WHEN ADDR=\"00001001\" AND CS='0' ELSE--JB L2 \"00001100\"WHEN ADDR=\"00001010\" AND CS='0' ELSE
\"11111000\"WHEN ADDR=\"00001011\" AND CS='0' ELSE--OUT R3 \"10101110\"WHEN ADDR=\"00001100\" AND CS='0' ELSE--CMP R3,R2 \"10110000\"WHEN ADDR=\"00001101\" AND CS='0' ELSE--JB L3 \"00010001\"WHEN ADDR=\"00001110\" AND CS='0' ELSE
\"11100000\"WHEN ADDR=\"00001111\" AND CS='0' ELSE--JB L1 \"00000110\"WHEN ADDR=\"00010000\" AND CS='0' ELSE
\"11001110\"WHEN ADDR=\"00010001\" AND CS='0' ELSE--MOV2 R3,R2 \"11100000\"WHEN ADDR=\"00010010\" AND CS='0' ELSE--JMP L1 \"00000110\"WHEN ADDR=\"00010011\" AND CS='0' ELSE \"00000000\"; END A;
9 指令寄存器单元
指令寄存器单元
10 时序产生器单元
时序产生器单元
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- 13 -
ENTITY COUNTER IS PORT(
Q,CLR:IN STD_LOGIC; T2,T3,T4:OUT STD_LOGIC );
END COUNTER;
ARCHITECTURE A OF COUNTER IS
SIGNAL X:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN
PROCESS(Q,CLR) BEGIN
IF(CLR='0')THEN T2<='0'; T3<='0'; T4<='0'; X<=\"00\";
ELSIF(Q'EVENT AND Q='1')THEN X<=X+1;
T2<=(NOT X(1)) AND X(0); T3<=X(1)AND (NOT X(0)); T4<=X(1)AND X(0); END IF;
END PROCESS; END A;
11 微程序控制器单元
微程序控制器单元
- 14 -
微程序控制器的内部结构
11.1 地址转移逻辑电路
地址转移逻辑电路
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY ADDR IS PORT(
I7,I6,I5,I4:IN STD_LOGIC;
FZ,FC,FS,T4,P1,P2,P3:IN STD_LOGIC; SE6,SE5,SE4,SE3,SE2,SE1:OUT STD_LOGIC );
END ADDR;
ARCHITECTURE A OF ADDR IS BEGIN
SE6<=NOT(NOT FS AND P3 AND T4);-- Fs=0,跳转
SE5<=NOT((NOT FC AND FZ )AND P2 AND T4);-- FZ=0,跳转 SE4<=NOT(I7 AND P1 AND T4); SE3<=NOT(I6 AND P1 AND T4);
- 15 -
SE2<=NOT(I5 AND P1 AND T4); SE1<=NOT(I4 AND P1 AND T4); END A;
11.2 微地址寄存器
微地址寄存器
微地址寄存器内部结构
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY MMM IS PORT(
- 16 -
SE:IN STD_LOGIC; T2:IN STD_LOGIC; D:IN STD_LOGIC; CLR:IN STD_LOGIC; UA:OUT STD_LOGIC );
END MMM;
ARCHITECTURE A OF MMM IS BEGIN
PROCESS(CLR,SE,T2) BEGIN
IF(CLR='0')THEN UA<='0';
ELSIF(SE='0')THEN UA<='1';
ELSIF(T2'EVENT AND T2='1')THEN UA<=D; END IF; END PROCESS; END A;
11.3 微地址转换器
微地址转换器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY F1 IS PORT(
UA5,UA4,UA3,UA2,UA1,UA0:IN STD_LOGIC; D:OUT STD_LOGIC_VECTOR(5 DOWNTO 0) );
END F1;
ARCHITECTURE A OF F1 IS BEGIN
D(5)<=UA5; D(4)<=UA4; D(3)<=UA3; D(2)<=UA2; D(1)<=UA1; D(0)<=UA0; END A;
11.4 控制存储器
- 17 -
控制存储器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CONTROM IS PORT(
ADDR:IN STD_LOGIC_VECTOR(5 DOWNTO 0); UA:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); D:OUT STD_LOGIC_VECTOR(19 DOWNTO 0) );
END CONTROM;
ARCHITECTURE A OF CONTROM IS
SIGNAL DATAOUT:STD_LOGIC_VECTOR(25 DOWNTO 0); BEGIN
PROCESS(ADDR) BEGIN
CASE ADDR IS
WHEN\"000000\"=>DATAOUT<=\"11100110010011110000000010\"; --00(02) WHEN\"000010\"=>DATAOUT<=\"10010110010010110100001000\"; --02(08) WHEN\"000011\"=>DATAOUT<=\"10001110010010110000000000\"; --03(00) WHEN\"000100\"=>DATAOUT<=\"10000010010111110000000101\"; --04(05) WHEN\"000101\"=>DATAOUT<=\"10000110110011111000000000\"; --05(00) --WHEN\"000110\"=>DATAOUT<=\"10000010010111110000000111\";
--WHEN\"000111\"=>DATAOUT<=\"10001110000011110000000000\"; WHEN\"001000\"=>DATAOUT<=\"10001110010011010000000000\"; --08(00) WHEN\"001001\"=>DATAOUT<=\"11100110010011110000000011\"; --09(03) WHEN\"001010\"=>DATAOUT<=\"10000100011011110000000100\"; --0A(04) WHEN\"001011\"=>DATAOUT<=\"11100110010011110001010101\"; --0B(15)
WHEN\"001100\"=>DATAOUT<=\"10001100010011110000000000\"; --0C(00) CHANGE WHEN\"001101\"=>DATAOUT<=\"10000010011011110000010010\"; --0D(12) WHEN\"001110\"=>DATAOUT<=\"11100110010011110000010011\"; --0E(13) WHEN\"001111\"=>DATAOUT<=\"10000100010001100000000000\"; --0F(00) WHEN\"010010\"=>DATAOUT<=\"10001111000011110000000000\"; --12(00) WHEN\"010011\"=>DATAOUT<=\"01000110010010110000000000\"; --13(00) WHEN\"010101\"=>DATAOUT<=\"01000110010010110000000000\"; --15(00) WHEN\"110101\"=>DATAOUT<=\"10000110010011110000000000\"; --35(00) WHEN OTHERS=>DATAOUT<=\"10000110010011110000000000\"; END CASE;
UA(5 DOWNTO 0)<=DATAOUT(5 DOWNTO 0); D(19 DOWNTO 0)<=DATAOUT(25 DOWNTO 6); END PROCESS; END A;
- 18 -
11.5 微指令寄存器
微指令寄存器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY MCOMMAND IS PORT(
T2,T3,T4,I3,I2,I1,I0:IN STD_LOGIC; O:IN STD_LOGIC_VECTOR(19 DOWNTO 0);
P3,P1,P2,LOAD,LDPC,LDAR,LDIR,LDR0,LDR1,LDR2,LDR3,R0_B,R1_B,R2_B,R3_B,S1,S0,ALU_B,LDAC,LDDR,WR,CS,SW_B,LED_B,LDFR:OUT STD_LOGIC
);
END MCOMMAND;
ARCHITECTURE A OF MCOMMAND IS
SIGNAL DATAOUT:STD_LOGIC_VECTOR (19 DOWNTO 0); BEGIN PROCESS(T2) BEGIN
IF(T2'EVENT AND T2='1')THEN
DATAOUT(19 DOWNTO 0)<=O(19 DOWNTO 0); END IF;
P3<=DATAOUT(0); P2<=DATAOUT(1); P1<=DATAOUT(2);
LDFR<=DATAOUT(3) AND T4; LED_B<=DATAOUT(4); SW_B<=DATAOUT(5); CS<=DATAOUT(6);
- 19 -
WR<=DATAOUT(7) OR (NOT T3); LDDR<=DATAOUT(8) AND T4; LDAC<=DATAOUT(9) AND T4; ALU_B<=DATAOUT(10); S0<=DATAOUT(11); S1<=DATAOUT(12);
--DATAOUT(13)对应RS_B信号,DATAOUT(14)对应RD_B信号
R2_B<=(DATAOUT(14)OR(NOT I1)OR I0)AND(DATAOUT(13)OR(NOT I3)OR I2); R1_B<=(DATAOUT(14)OR I1 OR (NOT I0))AND(DATAOUT(13)OR I3 OR (NOT I2)); R0_B<=(DATAOUT(14)OR I1 OR I0)AND(DATAOUT(13)OR I3 OR I2);
R3_B<=(DATAOUT(14) OR (NOT I1) OR (NOT I0)) AND (DATAOUT(13) OR (NOT I3) OR (NOT I2)); LDR3<=T4 AND DATAOUT(15)AND I1 AND I0;
LDR2<=T4 AND DATAOUT(15)AND I1 AND(NOT I0); LDR1<=T4 AND DATAOUT(15)AND(NOT I1)AND I0;
LDR0<=T4 AND DATAOUT(15)AND(NOT I1)AND (NOT I0); LDIR<=DATAOUT(16)AND T3; LDAR<=DATAOUT(17)AND T3; LDPC<=DATAOUT(18)AND T4; LOAD<=DATAOUT(19); END PROCESS; END A;
11.6 微地址转换器
微地址转换器F2
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY F2 IS PORT(
D:IN STD_LOGIC_VECTOR(5 DOWNTO 0); UA5,UA4,UA3,UA2,UA1,UA0:OUT STD_LOGIC );
END F2;
ARCHITECTURE A OF F2 IS BEGIN
UA5<=D(5); UA4<=D(4); UA3<=D(3); UA2<=D(2); UA1<=D(1);
- 20 -
UA0<=D(0); END A;
11.7 指令代码转换器
指令代码转换器F3
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY F3 IS PORT(
D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
UA7,UA6,UA5,UA4,UA3,UA2,UA1,UA0:OUT STD_LOGIC );
END F3;
ARCHITECTURE A OF F3 IS BEGIN
UA7<=D(7); UA6<=D(6); UA5<=D(5); UA4<=D(4); UA3<=D(3); UA2<=D(2); UA1<=D(1); UA0<=D(0); END A;
- 21 -
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务