简单CPU系统设计及实现Word文档格式.docx

上传人:b****3 文档编号:13811689 上传时间:2022-10-13 格式:DOCX 页数:22 大小:645.79KB
下载 相关 举报
简单CPU系统设计及实现Word文档格式.docx_第1页
第1页 / 共22页
简单CPU系统设计及实现Word文档格式.docx_第2页
第2页 / 共22页
简单CPU系统设计及实现Word文档格式.docx_第3页
第3页 / 共22页
简单CPU系统设计及实现Word文档格式.docx_第4页
第4页 / 共22页
简单CPU系统设计及实现Word文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

简单CPU系统设计及实现Word文档格式.docx

《简单CPU系统设计及实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《简单CPU系统设计及实现Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

简单CPU系统设计及实现Word文档格式.docx

2.2.2系统状态转移图

如上图,系统共有3个状态:

S0、S1、S2。

分别为S0:

在这一状态,通过拨码和按键录入要执行的指令。

S1:

在这一状态,CPU执行程序,即S0录入的指令。

S2:

在这一状态,CPU执行完全部程序,等待再次执行或等待录入指令。

2.2.3求解最大公约数的程序框图

设a,b为给定的两个整数,用辗转相减法求解他们的最大公约数:

开始

a<

=a-b

判断:

a=0是否成立?

不成立

a>

b是否成立?

a、b交换

成立

成立

b为所求最大公约数。

程序结束

2.3分块设计

2.3.1DIV(分频器)

DIV将电路板所提供的时钟分频,产生CPU工作所需要的时钟以及数码管扫描所需要的时钟。

2.3.2MCU(控制器)

MCU用来产生系统内部所有寄存器、运算单元所需的控制信号,以及执行各条指令所需要的微操作。

它是整个系统设计的核心所在。

2.3.3ALU(算术逻辑运算单元)

ALU完成数据的算术和逻辑运算。

ALU有5个输入端和2个输出端,其中一个操作数固定来自累加器acc(具体编程时可用变量或信号表示),另一个操作数来自端口mbr_in(通过数据总线接到寄存器MBR)。

参加运算的操作数在ALU中进行规定的操作运算,运算结束后,一方面将结果送至累加器,同时将操作结果的特征状态送标志寄存器。

2.3.4MAR(地址寄存器)

MAR存放着要被读取或写入的内存单元地址。

其中,读操作时,CPU从内存读。

而写操作时,CPU把数据写入内存。

2.3.5MBR(缓冲寄存器)

MBR存放了将要存储到内存的数据或者从内存中读取的最新数据。

MBR连接到系统总线中的地址总线。

2.3.6RAM(随机存取存储器)

RAM有着相对独立的输入输出管脚,在本系统设计中它作为内存使用。

它不是CPU内部的寄存器,不属于CPU的一部分。

但要测试所设计的CPU的性能,需要把RAM加进系统设计中。

2.3.7SMG(数码管显示)

SMG负责将运算结果转化为BCD码形式,然后用数码馆显示。

3仿真波形及波形分析

根据波形图可以看出状态机的运行,其中一个状态占两个时钟周期。

该仿真相当于CPU执行指令的时序图,反映了程序运行情况。

还包括了辗转相减法的仿真,和rst的清零仿真。

可以看出该CPU系统的仿真结果正确,达到下载的要求。

4源程序(含注释)

各个部件对应的源程序如下(最后的连接是用图形连接完成的):

4.1DIV(分频器)

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityDIVis

port

clk_in:

instd_logic;

clk_out1:

outstd_logic;

clk_out2:

outstd_logic

);

endDIV;

architecturebehaveofDIVis

signaltmp:

std_logic_vector(15downto0);

begin

process(clk_in,tmp)

if(clk_in'

eventandclk_in='

1'

)then

tmp<

=tmp+1;

endif;

clk_out1<

=tmp(0);

clk_out2<

=tmp

(1);

endprocess;

endbehave;

4.2MCU(控制器)

entityMCUis

clk:

start:

opcode:

instd_logic_vector(3downto0);

cmp:

ctr:

outstd_logic_vector(10downto0)

endMCU;

architecturebehaveofMCUis

process(clk,start)

variablestatus:

std_logic_vector(4downto0):

="

00000"

;

if(start='

status:

00001"

elsif(clk'

eventandclk='

casestatusis

when"

=>

ctr<

"

status:

=status+1;

--MBR<

-RAM

00010"

--MAR<

-MBR

00011"

--DECODING

caseopcodeis

0001"

00100"

--Store--MBR<

-ACC

0010"

00101"

--Load--MBR<

0011"

00111"

--Add--MBR<

0100"

01001"

--Sub--MBR<

0101"

11111"

--SHL--ACC<

-ACC<

<

1

0110"

--SHR--ACC<

-ACC>

>

0111"

01011"

--And--MBR<

1000"

01101"

--Or--MBR<

1001"

--Not--ACC<

-NOTACC

1010"

--Jump

1011"

if(cmp='

0'

)then--JumpZ

else

1100"

10000000000"

--Smg

1111"

--Halt

whenothers=>

endcase;

--Store--RAM<

--Load--BR<

-MBR;

ACC<

-0

00110"

--ACC<

-ACC+BR

--Add--BR<

01000"

--Sub--BR<

01010"

-ACC-BR

--And--BR<

01100"

-ACCANDBR

--Or--BR<

01110"

-ACCORBR

01111"

--Mutiply--BR<

10000"

-ACC*BR

--PC<

-PC+1;

MAR<

-PC

endprocess;

4.3ALU(算术逻辑运算单元)

entityALUis

rst:

mbr_in:

instd_logic_vector(11downto0);

mbr_e:

ctrl:

overflow:

acc:

outstd_logic_vector(11downto0)

endALU;

architecturebehaveofALUis

process(clk,rst)

variablebr:

std_logic_vector(11downto0);

variabledata_acc:

std_logic_vector(11downto0);

if(clk'

eventand

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1