计算机组成原理课程设计
根据《计算机组成原理课程设计》的设计要求设计能够执行一定机器指令完成指定任务的CISC模型机。
1、课程设计的题目和内容
1.1 课程设计的题目
本次课程设计中本人选题为:输入包含10个整数(有符号数)的数组M,将其分成正整数数组P和负数数组N,依次输出正数数组P中的整数及正数的个数。
1.2 课程设计完成的内容
2.设计微程序控制器(CISC模型计算机)的逻辑结构框图;
3.设计机器指令格式和指令系统;
4.设计时序产生器电路;
5.设计所有机器指令的微程序流程图;
6.设计操作控制器单元;在CISC模型计算机中,设计的内容包括微指令格式(议采用全水平型微指令)、微指令代码表(根 据微程序流程图和微指令格式来设计)和微程序控制器硬件电路(包括地址转移逻辑电路、微地址寄存器、微命令寄存和控制 存储器等。具体电路根据微程序控制器的逻辑结构框图、微指令格式和微指令代码来设计)。
7.设计模型机的所有单元电路,并用VHDL语言(也可使用GDF文件----图形描述文件)对模型机中的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路或顶层文件;
8.由给出的题目和设计的指令系统编写相应的汇编语言源程序;
9.根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去;
10.使用EDA软件进行功能仿真,要保证其结果满足题目的要求;(其中要利用EDA软件提供的波形编辑器,选择合适的输入输出信号及中间信号进行调试。)
2、系统总体设计
2.1 嵌入式CISI模型机系统总体设计
图2-1 CISI模型机系统
2.2 嵌入式CISC系统控制器的逻辑结构框图
图2-2 CISC系统控制器的逻辑结构框图
说明:
在T4内形成微指令的微地址,并访问控制存储器,在T2的上边沿到来时,将读出的微指令打入微指令寄存器,即图中的微命令寄存器和微地址寄存器。
2.3 模型机的指令系统和所有指令的指令格式设计
为了完成这次课程设计的功能,本次设计设计了10条指令:IN1(输入),MOV(将一个数送入寄存器),LAD(将寄存器内容送到内存),JMP(无条件跳转),INC(自加1),DEC(自减1),JNS(大于跳转),STO1(将源寄存器值送到目标寄存器),OUT1(输出),TEST(测试),如下用到的Rs和Rd分别表示源寄存器和目的寄存器。
2.3.1机器指令格式和指令系统
指令助记符 |
指令格式 |
功能 |
|||
15——12 |
11 10 |
9 8 |
7——0 |
||
IN1 Rd |
0001 |
xx |
Rd |
xxxxxxxx |
输入设备→Rd |
MOV Rd,im |
0010 |
xx |
Rd |
im |
立即数→Rd |
LAD (Rs),Rd |
0011 |
Rs |
Rd |
xxxxxxxx |
((Rs)) →Rd |
JMP addr |
0100 |
xx |
xx |
addr |
addr→PC |
INC Rd |
0101 |
xx |
Rd |
xxxxxxxx |
将(Rd)+1→Rd,锁存SF和ZF |
DEC Rd |
0110 |
xx |
Rd |
xxxxxxxx |
将(Rd)-1→Rd,锁存SF和ZF |
JNS addr |
0111 |
xx |
xx |
addr |
若结果小于零,addr->pc |
STO1 Rs,(Rd) |
1000 |
Rs |
Rd |
XXXXXXXX |
(Rs) →((Rd)) |
OUT1 Rs |
1001 |
Rs |
xx |
XXXXXXXX |
(Rs) →输出设备 |
TEST Rd |
1010 |
XX |
Rd |
XXXXXXXX |
测试(Rd)是否为负,锁存SF |
2.3.2 对Rs和Rd格式规定
Rs或Rd |
选定的寄存器 |
00 |
R0 |
01 |
R1 |
10 |
R2 |
11 |
R3 |
2.3.3 算数逻辑单元ALU的功能表
S2 |
S1 |
S0 |
功能 |
0 |
0 |
0 |
X+Y,修改SF和ZF |
0 |
0 |
1 |
X-Y,修改SF和ZF |
0 |
1 |
0 |
Y+1,修改SF和ZF |
0 |
1 |
1 |
Y-1,修改SF和ZF |
1 |
0 |
0 |
X∧Y,修改SF和ZF |
1 |
0 |
1 |
Y是否大于零,修改SF和ZF |
1 |
1 |
0 |
Y |
2.3.4 程序计数器PC的功能表
CLR |
LOAD |
LDPC |
功能 |
0 |
X |
X |
将PC清0 |
1 |
0 |
↑ |
BUS-->PC |
1 |
1 |
0 |
不装入,也不计数 |
1 |
1 |
↑ |
PC+1 |
2.3.5 时序产生器
本实验采用的是微程序控制器的时序产生器,如下图
图2-3 微程序控制器的时序关系图
2.3.6 数据的表示
模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下:
7 |
6 5 4 3 2 1 0 |
符号位 |
尾数 |
3 微程序控制器的设计全过程
3.1 微程序控制器的设计
微程序控制器的设计包括以下几个阶段:
(1)根据微处理器结构图、指令格式和功能设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址;
(2)设计微指令格式和微指令代码表;
(3)设计地址转移逻辑电路;
(4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器;
(5)设计微程序控制器的顶层电路(由多个模块组成)。
3.2地址转移逻辑电路的设计
地址转移逻辑电路是根据微程序流程图中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。
由于微地址寄存器中的触发器异步置“1”端低电平有效,与µA5~µA0对应的异步置“1”控制信号SE5~SE0的逻辑表达式为:
3.3 汇编语言程序
本题目的算法思想为:输入包含10个整数(无符号数)的数组M,将其分成正整数数组P和负数数组N,依次输出正数数组P中的整数及正数的个数。
汇编程序源码及对应注释如下:
MOV R0,00H ;数据存放在RAM中的地址
MOV R1,0AH ;循环次数计数,从0A开始,到01时结束
MOV R3,00H ;保存正整数的个数 (L3中)
L1:
IN1 R2 ;输入一个数到R2中
STO1 R2,(R0) ;将输入的数据存放到地址为(R0)的RAM中
INC R0 ;RAM地址指针+1
DEC R1 ;循环次数-1
TEST R1 ;测试循环次数是否达到10次
JNS L1 ;R1不为负时跳转到L1
MOV R0,00H ;当10个数输入完成后,初始化RAM指针
MOV R1,0AH ;重置循环次数
L2:
LAD (R0),R2 ;将内存中地址为(R0)的数据送到R2
TEST R2 ;测试(R2)是否大于零
JNS L3 ;(R2)大于零时跳转到L3
JMP L4 ;(R2)不大于零时跳转到L4
L3:
OUT1 R2 ;(R2)输出
INC R3 ;正整数计数+1
L4:
INC R0 ;RAM地址指针+1
DEC R1 ;循环次数-1
TEST R1 ;测试循环次数是否达到10次
JNS L2 ;(R2)不为负时跳转到L2
OUT1 R3 ;输出正整数的个数
3.4 汇编程序流程图
图3-1汇编程序流程图
3.5 汇编程序对应的地址与机器语言代码表:
地址 (十六进制) |
汇编语言源程序 |
机器语言源程序 (二进制) |
机器语言源程序 (十六进制) |
00 |
MOV R0,00H |
0010 00 00 00000000 |
2000 |
01 |
MOV R1,0AH |
0010 00 01 00001010 |
210A |
02 |
MOV R3,00H |
0010 00 11 00000000 |
2300 |
03 |
L1:IN1 R2 |
0001 00 10 00000000 |
1200 |
04 |
STO1 R2,(R0) |
1000 10 00 00000000 |
8800 |
05 |
INC R0 |
0101 00 00 00000000 |
5000 |
06 |
DEC R1 |
0110 00 01 00000000 |
6100 |
07 |
TEST R1 |
1010 00 01 00000000 |
A100 |
08 |
JNS L1 |
0111 00 00 00000011 |
7003 |
09 |
MOV R0,00H |
0010 00 00 00000000 |
2000 |
0A |
MOV R1,0AH |
0010 00 01 00001001 |
210A |
0B |
L2:LAD (R0),R2 |
0011 00 10 00000000 |
3200 |
0C |
TEST R2 |
1010 00 10 00000000 |
A200 |
0D |
JNS L3 |
0111 00 00 00001111 |
700F |
0E |
JMP L4 |
0100 00 00 00010001 |
4011 |
0F |
L3:OUT1 R2 |
1001 10 00 00000000 |
9800 |
10 |
INC R3 |
0101 00 11 00000000 |
5300 |
11 |
L4:INC R0 |
0101 00 00 00000000 |
5000 |
12 |
DEC R1 |
0110 00 01 00000000 |
6100 |
13 |
TEST R1 |
1010 00 01 00000000 |
A100 |
14 |
JNS L2 |
0111 00 00 00001011 |
700B |
15 |
OUT1 R3 |
1001 11 00 00000000 |
9C00 |
表3-1 汇编语言与机器语言代码表
3.6 微程序流程图如下所示:
图 3-2微程序流程图
3.7 微指令的设计
CISC模型机系统使用的微指令采用全水平型微指令,字长位26位,其中微命令字段位18位,P字段2位,后继微地址为6位。
微地址 |
LOAD |
LDPC |
LDAR |
LIR |
LREG |
LPSW |
RS_B |
S2 |
S1 |
S0 |
ALU |
IN |
OUT |
RW |
RCS |
RD |
ROM |
ADR_B |
P1 |
P2 |
uA5~uA0 |
00 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
000000 |
01 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
000000 |
02 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
000000 |
03 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
001011 |
04 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
000000 |
05 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
000000 |
06 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
000000 |
07 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
000000 |
08 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
001100 |
09 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
000000 |
0A |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
000000 |
0B |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
000000 |
0C |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
000000 |
10 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
000000 |
表 3-2 微指令代码表
4 MAX+plus Ⅱ软件编译仿真测试和结果分析
4.1 嵌入式模型计算机的顶层电路图
图 4-1 CISC模型计算机的顶层电路图
如图4-1中,其中的操作控制器单元crom的内部结构如下图所示
图 4-2 控制器单元crom的内部结构图
如图4-2中寄存器AA的内部结构如下所示,AA的内部是由6个MM构成的。
图 4-3 寄存器AA内部结构图
图 4-3 寄存器AA内部结构图
4.2 编译仿真测试和结果分析
通过创建仿真时序图top.scf.,可以实现模型机的功能仿真,从图中可以看出cpu处理数据和数据的具体流向的每一个过程,如下是仿真的输出波形,具体结果和分析如下:
图 4-4 仿真结果图1
如图4-4所示,在图4-4中CLK为时钟信号,INBUS[7..0]是输入中线,OUTBUS[7..0]是输出总线,IROUT是操作指令,寄存器R0,寄存器R1,寄存器R2,寄存器R3。
从总线INBUS[7..0]输入的10个数分别为 50H、40H、FCH、10H、23H、FEH、25H、25H、00H、FDH。输出结果为:50H、40H、10H、23H、25H、25H、06H(正整数个数为6)
结果过程分析
图 4-5 仿真结果图2
由图4-5所示,IROUT=2000、IROUT=210A和IROUT=2300时执行MOV指令,将00H送入寄存器R0,将0AH送入寄存器R1,将00H送入寄存器R0。IROUT=1200时执行IN1指令将50H输入寄存器R2;IROUT=8800时执了STO1指令,将R2的内容送到RAM;IROUT=5000时执行了INC指令,R0自加1;IROUT=6100时执行了DEC指令,R1自减1;IROUT=A100时执行了TEST指令,测试R1是否大于零;IROUT=7003时执行了JNS指令(跳转条件是SF=0,ZF=0),由于此时R1自减1之后为08H大于零所以跳转1200执行IN1指令,如此循环了10次,完成10个数据的输入。
图 4-6 仿真结果图3
图 4-7仿真结果图4
由图4-6所示,输入完数据以后,可以看见R1寄存器的值为00,IROUT=7003执行JNS指令不跳转;IROUT=2000、IROUT=210A时执行MOV指令,将00H送入寄存器R0,将0AH送入寄存器R1;IROUT=3200时执行LAD指令,将地址为(R0)的内存的内容送到寄存器R2;IROUT=A200时执行TEST指令,测试(R2)是否大于零;IROUT=700F时执JNS指令,此时(R2)大于零,跳转9800;IROUT=9800时执行OUT1指令输出(R2),在数据输出线OUTBUS[7..0]显示为50。IROUT=5300时执行INC指令,R3自加1;IROUT=5000时执行了INC指令,R0自加1;IROUT=6100时执行了DEC指令,R1自减1;IROUT=A100时执行了TEST指令,测试R1是否大于零;IROUT=700B时执行了JNS指令,跳转到3200执行LAD指令,如此循环测试完10个数。
由图4-7所示,测试的整数是负数FC,IROUT=700F时执JNS指令,此时(R2)小于零不做跳转;IROUT=4011时执行JMP指令,无条件跳转到IROUT=5000执行INC指令,R0自加1。
图 4-8仿真结果图5
第二组测试的10个数据分别为 FFH、11H、FCH、50H、02H、FEH、0FH、84H、00H、98H。输出结果为:11H、50H、02H、0FH、04H(正整数个数为4)。
经过多次的不同数据测试,结果都与预期的结果相符合,没有出现错误。
附录
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;
ENTITY ALU IS
PORT
(
X:IN STD_LOGIC_vector(7 DOWNTO 0);
Y:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
S2,S1,S0:IN STD_LOGIC;
ALUOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
SF,ZF:OUT STD_LOGIC
);
END ALU;
ARCHITECTURE A OF ALU IS
signal AA,BB,TEMP:STD_LOGIC_VECTOR(7 DOWNTO0);
SIGNAL TEMP1:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS
BEGIN
IF(S2='0' AND S1='0' AND S0='0')THEN
AA<=X;
BB<=Y;
TEMP<=AA+BB;
ALUOUT<=TEMP(7 DOWNTO 0);
SF<=TEMP(7);
IF(TEMP="00000000")THEN
ZF<='1';
ELSE
ZF<='0';
END IF;
ELSIF(S2='0'AND S1='0' AND S0='1')THEN
ALUOUT<=X-Y;
IF(X<Y)THEN
SF<='1';
ZF<='0';
ELSIF(X=Y)THEN
SF<='0';
ZF<='1';
ELSE
SF<='0';
ZF<='0';
END IF;
ELSIF(S2='0' AND S1='1' AND S0='0')THEN
BB<=Y;
TEMP<=BB+1;
ALUOUT<=TEMP(7 DOWNTO 0);
SF<=TEMP(7);
IF(TEMP="00000000")THEN
ZF<='1';
ELSE
ZF<='0';
END IF;
ELSIF(S2='0' AND S1='1' AND S0='1')THEN
BB<=Y;
TEMP<=BB-1;
ALUOUT<=TEMP(7 DOWNTO 0);
SF<=TEMP(7);
IF(TEMP="00000000")THEN
ZF<='1';
ELSE
ZF<='0';
END IF;
ELSIF(S2='1' AND S1='0' AND S0='0') THEN --AND
AA<=X;
BB<=Y;
TEMP1<=AA AND BB;
ALUOUT<=TEMP1(7 DOWNTO 0);
SF<=TEMP1(7);
IF (TEMP1="00000000") THEN
ZF<='1';
ELSE
ZF<='0';
END IF;
ELSIF(S2='1' AND S1='0' AND S0='1') THEN --TEST
BB<=Y;
TEMP1<= BB;
SF<=TEMP1(7);
IF (TEMP1="00000000") THEN
ZF<='1';
ELSE
ZF<='0';
END IF;
ELSIF(S2='1' AND S1='1' AND S0='0') THEN --Rd->BUS
ALUOUT<=Y;
ELSE
ALUOUT<="00000000" ;
SF<='0';
ZF<='0';
END IF;
END PROCESS;
END A;
代码设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ROM IS
PORT(
DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CS_I:IN STD_LOGIC
);
END ROM ;
ARCHITECTURE A OF ROM IS
BEGIN
DOUT<=
"0010000000000000"WHENADDR="00000000"AND CS_I='0' ELSE
"0010000100001010"WHENADDR="00000001"AND CS_I='0' ELSE
"0010001100000000"WHENADDR="00000010"AND CS_I='0' ELSE
"0001001000000000"WHENADDR="00000011"AND CS_I='0' ELSE
"1000100000000000"WHENADDR="00000100"AND CS_I='0' ELSE
"0101000000000000"WHENADDR="00000101"AND CS_I='0' ELSE
"0110000100000000"WHENADDR="00000110"AND CS_I='0' ELSE
"1010000100000000"WHENADDR="00000111"AND CS_I='0' ELSE
"0111000000000011"WHENADDR="00001000"AND CS_I='0' ELSE
"0010000000000000"WHENADDR="00001001"AND CS_I='0' ELSE
"0010000100001010"WHENADDR="00001010"AND CS_I='0' ELSE
"0011001000000000"WHENADDR="00001011"AND CS_I='0' ELSE
"1010001000000000"WHENADDR="00001100"AND CS_I='0' ELSE
"0111000000001111"WHENADDR="00001101"AND CS_I='0' ELSE
"0100000000010001"WHENADDR="00001110"AND CS_I='0' ELSE
"1001100000000000"WHENADDR="00001111"AND CS_I='0' ELSE
"0101001100000000"WHENADDR="00010000"AND CS_I='0' ELSE
"0101000000000000"WHENADDR="00010001"AND CS_I='0' ELSE
"0110000100000000"WHENADDR="00010010"AND CS_I='0' ELSE
"1010000100000000"WHENADDR="00010011"AND CS_I='0' ELSE
"0111000000001011"WHENADDR="00010100"AND CS_I='0' ELSE
"1001110000000000"WHENADDR="00010101"AND CS_I='0' ELSE
"0000000000000000";
END A;
代码设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CONVERT IS
PORT(
IRCODE:IN STD_LOGIC_VECTOR(15 DOWNTO 0);
OP:OUT STD_LOGIC_VECTOR(3DOWNTO 0);
I11,I10,I9,I8:OUT STD_LOGIC;
A:OUT STD_LOGIC_VECTOR(7DOWNTO 0)
);
END CONVERT;
ARCHITECTURE A OF CONVERT IS
BEGIN
OP<=IRCODE(15 DOWNTO 12);
I11<=IRCODE(11);
I10<=IRCODE(10);
I9<=IRCODE(9);
I8<=IRCODE(8);
A<=IRCODE(7 DOWNTO 0);
END A;
代码设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.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
SIGNALDATAOUT:STD_LOGIC_VECTOR(25 DOWNTO 0);
BEGIN
PROCESS(ADDR)
BEGIN
CASE ADDR IS
WHEN"000000"=>DATAOUT<="11010010001111110110000000";
WHEN"000001"=>DATAOUT<="10001010001011111100000000";
WHEN"000010"=>DATAOUT<="10001010001111111000000000";
WHEN"000011"=>DATAOUT<="10100000001111111100001011";
WHEN"000100"=>DATAOUT<="01000010001111111000000000";
WHEN"000101"=>DATAOUT<="10001110100111111100000000";
WHEN"000110"=>DATAOUT<="10001110110111111100000000";
WHEN"000111"=>DATAOUT<="10000010001111111101000000";
WHEN"001000"=>DATAOUT<="10100011100111111100001100";
WHEN"001001"=>DATAOUT<="10000000001101111100000000";
WHEN"001010"=>DATAOUT<="10000111010111111100000000";
WHEN"001011"=>DATAOUT<="10001010001111001100000000";
WHEN"001100"=>DATAOUT<="10000000001110011100000000";
WHEN"010000"=>DATAOUT<="01000010001111111000000000";
WHEN OTHERS=>DATAOUT<="10000011111111110100000000";
END CASE;
UA(5 DOWNTO 0)<=DATAOUT(5 DOWNTO 0);
D(19 DOWNTO 0)<=DATAOUT(25 DOWNTO 6);
END PROCESS;
END A;
代码设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADDR IS
PORT(
I15,I14,I13,I12:IN STD_LOGIC;
SF,ZF,T4,P1,P2:IN STD_LOGIC;
SE5,SE4,SE3,SE2,SE1,SE0:OUT STD_LOGIC
);
END ADDR;
ARCHITECTURE A OF ADDR IS
BEGIN
SE5<='1';
SE4<=NOT((NOT ZF)AND(NOT SF) AND P2 AND T4);
SE3<=NOT(I15 AND P1 AND T4);
SE2<=NOT(I14 AND P1 AND T4);
SE1<=NOT(I13 AND P1 AND T4);
SE0<=NOT(I12 AND P1 AND T4);
END A;
代码设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY McommaND IS
PORT(
T2,T3,T4:IN STD_LOGIC;
O:IN STD_LOGIC_VECTOR(19 DOWNTO 0);
P1,P2,LOAD,LDPC,LDAR,LDIR,LDRI,LDPSW,RS_B,S2,S1,S0,
ALU_B,SW_B,LED_B,RD_D,CS_D,RAM_B,CS_I,ADDR_B:OUT STD_LOGIC
);
END MCOMMAND;
ARCHITECTURE A OF MCOMMANDIS
SIGNALDATAOUT:STD_LOGIC_VECTOR(19 DOWNTO 0);
BEGIN
PROCESS(T2)
BEGIN
IF(T2'EVENT AND T2='1') THEN
DATAOUT(19 DOWNTO 0)<=O(19DOWNTO 0);
END IF;
LOAD<=DATAOUT(19);
LDPC<=DATAOUT(18) AND T4;
LDAR<=DATAOUT(17) AND T3;
LDIR<=DATAOUT(16) AND T3;
LDRI<=DATAOUT(15) AND T4;
LDPSW<=DATAOUT(14) AND T4;
RS_B<=DATAOUT(13);
S2<=DATAOUT(12);
S1<=DATAOUT(11);
S0<=DATAOUT(10);
ALU_B<=DATAOUT(9);
SW_B<=DATAOUT(8);
LED_B<=DATAOUT(7);
RD_D<=NOT(NOT DATAOUT(6) AND (T2 ORT3));
CS_D<=NOT(NOT DATAOUT(5) AND T3);
RAM_B<=DATAOUT(4);
CS_I<=DATAOUT(3);
ADDR_B<=DATAOUT(2);
P1<=DATAOUT(1);
P2<=DATAOUT(0);
END PROCESS;
END A;
代码设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USEIEEE.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
SIGNALQOUT:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(LDPC,CLR,LOAD)
BEGIN
IF(CLR='0')THEN
QOUT<="00000000";
ELSIF(LDPC'EVENT ANDLDPC='1')THEN
IF(LOAD='0')THEN
QOUT<=D;
ELSE
QOUT<=QOUT+1;
END IF;
END IF;
END PROCESS;
O<=QOUT;
END A;
代码设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY IR IS
PORT(
D:IN STD_LOGIC_VECTOR(15 DOWNTO 0);
CLK:IN STD_LOGIC;
O:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END IR;
ARCHITECTURE A OF IR IS
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
O<=D;
END IF;
END PROCESS;
END A;
代码设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY PSW IS
PORT(
S,Z:IN STD_LOGIC;
LDPSW:IN STD_LOGIC;
SF,ZF:OUT STD_LOGIC
);
END PSW;
ARCHITECTURE A OF PSW IS
BEGIN
PROCESS(LDPSW)
BEGIN
IF(LDPSW'EVENT AND LDPSW='1')THEN
SF<=S;
ZF<=Z;
END IF;
END PROCESS;
END A;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.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)
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
O<=D;
END IF;
END PROCESS;
END A ;
代码设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DECODER IS
PORT(
I9,I8:IN STD_LOGIC;
Y0,Y1,Y2,Y3:OUT STD_LOGIC
);
END DECODER;
ARCHITECTURE A OF DECODER IS
BEGIN
PROCESS(I9,I8)
BEGIN
IF(I9='0' AND I8='0')THEN
Y0<='1';
Y1<='0';
Y2<='0';
Y3<='0';
ELSIF(I9='0' AND I8='1')THEN
Y0<='0';
Y1<='1';
Y2<='0';
Y3<='0';
ELSIF(I9='1' AND I8='0')THEN
Y0<='0';
Y1<='0';
Y2<='1';
Y3<='0';
ELSE
Y0<='0';
Y1<='0';
Y2<='0';
Y3<='1';
END IF;
END PROCESS;
END A;
说明:先绘制AA,再绘制MM,最后绘制整个操作控制器单元crom。
相关阅读
今天SEO实验室为新手们奉上关于网页UI设计的10条适用法则,希望能让大家脑洞大开,在设计中得到帮助和启发。 一、设计感是“
你有没有点过一个有趣的广告,指引你到一个网站,但转换,即使产品看起来很有前途,因为网站很难使用或内容太混乱?如果您拥有一个网站,那
UX (User Experience) 使用者体验,根据使用者的习惯,去看怎么样最直觉。安排整个网站页面的内容,传递给使用者感受。能清楚了解使用
好的导航栏菜单就很容易帮助用户了解自己所处位置,明确告知用户下一步如何做。这也就是网站导航设计被视为用户体验最重要元素单
网站制作标准化,这是一个老生常谈的问题,说明了站长们对网站外观和内质的重视。但是在我们今天看来,有许多网站却因为这种那种的原