根据《计算机组成原理课程设计》的设计要求设计能够执行一定机器指令完成指定任务的CISC模型机。

1、课程设计的题目和内容

1.1 课程设计的题目

本次课程设计中本人选题为:输入包含10个整数(有符号数)的数组M,将其分成正整数数组P和负数数组N,依次输出正数数组P中的整数及正数的个数。

1.2 课程设计完成的内容

1.完成系统的总体设计,画出模型机数据通路框图;

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.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。

计算机组成原理课程设计——简单CISC模型机设计相关推荐

  1. 模型机设计计算机组成原理报告,计算机组成原理 实验报告四 基本模型机设计与实现...

    计算机组成原理 实验报告四 基本模型机设计与实现 计算机组成原理实验报告学院:计算机科学与信息 专业: 班级:姓名 学号 实验组实验时间 指导教师 成绩实验项目名称 实验四.基本模型机设计与实现实验目 ...

  2. 计算机原理与设计实验,计算机组成原理实验四:基本模型机设计与实现

    一. 实验目的与要求 实验目的: 1.在掌握部件单元电路实验的基础上,将微程序控制器模块与运算器模块.存储器模块组合成一起,组成一台基本模型计算机. 2.用微程序控制器来控制模型机的数据通道. 3.通 ...

  3. 计算机组成原理简单模型机实验,CPU 与简单模型机设计实验

    计算机科学与技术系 实 验 报 告 专业名称 计算机科学与技术 课程名称 计算机组成原理 项目名称 CPU 与简单模型机设计实验 班 级 学 号 姓 名 同组人员 无 实验日期 2016.6 一.实验 ...

  4. 计算机组成原理课程设计基本模型机,广东海洋大学计算机组成原理课程设计-基本模型机的设计与实现讲解...

    <计算机组成与结构>课程实习 基本模型机的设计与实现 系 别: 信息学院 班 级: 计科1141 指导教师: 刘桃丽 姓名 邓超荣 何涛 邓周光 学号 分工 成绩 201411621110 ...

  5. 计算机组成原理复杂机实验总结,计算机组成原理复杂模型机设计_课程设计报告.doc...

    成绩: 计算机组成原理课程设计实验报告 复杂模型机设计 姓 名 _ 曾凯杨 班 级 _ 计算机102 学 号 _ 40 实验地点 _ 计算机实验室四楼 实验时间 _ 3月6日 指导教师 刘晶 概述 这 ...

  6. 计算机组成原理模型机设计实验总结,计算机组成原理课程设计实验报告-基本模型机设计与实现.docx...

    计算机组成原理课程设计实验报告-基本模型机设计与实现 计 算 机 组 成 原 理 实 验 报 告 评 语: 成绩 教 师: 年 月 日 班 级: 1403011 学 号: 140301124 姓 名: ...

  7. 计算机模型机设计实验报告,计算机组成原理课程设计实验报告-基本模型机设计与实现...

    计算机组成原理课程设计实验报告-基本模型机设计与实现 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 计 算 机 组 成 原 理实 ...

  8. 计算机组成原理课程设计复杂模型机设计,计算机组成原理课程设计(复杂模型机设计).pdf...

    计算机组成原理课程设计(复杂模型机设计) 一.课程设计的目的与要求 1.1 实验目的 1.掌握时序产生器的组成及工作原理:掌握微程序控制器的组成及工作原理: 2.根据给出的指令系统.微指令格式.微命令 ...

  9. 计算机组成原理课程设计-基本模型机的设计与实现

    基本模型机的设计与实现 设计目的 1. 综合运用所学计算机组成原理知识,在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本的模型计算机. 2. 通过一台模型机的设计过程,明确计算机的控制原 ...

  10. 计算机组成原理课程设计:基于FPGA的Verilog模型机设计。

    理解简单模型机的工作原理,理解程序计数器,算数逻辑运算单元,控制单元,的工作原理.学会设计以及使用指令完成一定的功能,并将程序写入FPGA开发板并结合led灯数码管予以显示. 通过模型机设计可以掌握用 ...

最新文章

  1. openpyxl 操作 Excel表的格基本用法
  2. win8电源图标显示不出来
  3. 终于写了自己第一个有些用处的代码,留念留念,是模糊搜索并复制到指定文件夹...
  4. 基于深度学习的CT图像肺结节自动检测(系列放在一起)
  5. 拉格朗日插值的优缺点_拉格朗日与牛顿插值法的比较
  6. 数据库事务及隔离级别
  7. JDK Dynamic Proxy_JDK动态代理
  8. 2018.11.22 mac中允许所有安装来源的命令 Mac窗口标题显示文件的路径
  9. lol微信登录服务器,LOL开启微信登录功能测试 绑定微信登陆方法一览
  10. 【转】美团O2O供应链系统架构设计解析
  11. linux下的timerfd机制
  12. 忘了她,就像忘了一朵花
  13. 局域网搭建php_phpstudy8.0版本怎么搭建局域网
  14. 浅谈Java设计之——Java初始化数组(List/Map)时为何要空数组而不是null
  15. php 细表格,使用PHP轻松地创建一个表格 - 小俊学习网
  16. 2017.11.17 Demo-stm8+temperature timeing control
  17. word文档转pdf并在任意浏览器预览打印一体化方案
  18. 【Android】安卓webview播放视频白屏解决方法
  19. 余世维:如何培养领袖性格
  20. C#中设计器的控件事件转到逻辑代码

热门文章

  1. Mat拜耳数据邻域转换算法返回Mat对象,16bit三通道
  2. 用友T3如何反结账,反记账
  3. 用友软件反结账,反记账以及删除凭证操作流程
  4. 阿里云成长记的一篇文章《阿里云的这群疯子》
  5. OHSAS18000认证(转载)
  6. RFID技术中各频段电子标签的特点及其应用领域
  7. C语言malloc函数的使用!malloc函数的作用:动态内存分配函数,用来向系统请求分配内存空间
  8. .H264 .yuv格式文件下载还需要积分? 自己动手 ffmpeg几句命令轻松搞定
  9. 深入浅出SCSI子系统(五)SCSI设备探测
  10. linux最大lun空间,Linux上每个SCSI设备的最大LUN数目是多少(by quqi99)