设计方案微处理器.docx

上传人:b****7 文档编号:9639434 上传时间:2023-02-05 格式:DOCX 页数:13 大小:213.07KB
下载 相关 举报
设计方案微处理器.docx_第1页
第1页 / 共13页
设计方案微处理器.docx_第2页
第2页 / 共13页
设计方案微处理器.docx_第3页
第3页 / 共13页
设计方案微处理器.docx_第4页
第4页 / 共13页
设计方案微处理器.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

设计方案微处理器.docx

《设计方案微处理器.docx》由会员分享,可在线阅读,更多相关《设计方案微处理器.docx(13页珍藏版)》请在冰豆网上搜索。

设计方案微处理器.docx

设计方案微处理器

微处理器系统设计(设计方案)

版本v1.0

 

专业:

集成电路设计与集成系统

班级:

电路1201

姓名:

韩喆

学号:

05126030

日期:

2015年6月25日

微处理器系统设计方案

一、实验设计目的

基于前期课程中已掌握的CPU基本部件的设计方法、仿MIPS处理器指令集设计一个带简单I/O接口电路的多周期RISC处理器,采用自顶向下的全正向设计方法,并选用Verilog_HDL语言为设计输入工具,在FPGA上进行验证。

先完成多周期微处理器指令系统设计,多周期微处理器数据通路以及系统结构设计。

然后验证设计,设计实现一个简单的总线控制模块和8255并口芯片功能,并驱动LED灯,设计简单的流水灯变化,其变化样式如下:

1)001100->11001100,切换间隔为0.5秒;

2)11100111->00011000,切换间隔为0.5秒。

两种样式之间自动切换,切换间隔为10秒。

二、设计实现方案

1.总体设计方案

1)指令及其功能表

(1)R型指令:

指令

指令格式

功能

op

rs

rt

rd

shame

func

add

000000

sj1

Sj2

jg

xx

100000

Jg=sj1+sj2

sub

000000

sj1

Sj2

jg

jg

100010

Jg=sj1-sj2

or

000000

Sj1

Sj2

jg

xx

000010

Jg=sj1|sj2

and

000000

Sj1

xx

jg

xx

000011

Jg=sj1&sj2

sll

000000

Sj1

xx

jg

移位数

000100

Jg

(2)I型指令:

指令

指令格式

功能

op

rs

rt

Immediate

addiu

101011

sj1

Sj2

Imm

Sj2=sj1+imm

andi

001100

sj1

Sj2

Imm

Sj2=sj1&imm

Lw

100011

base

rt

offset

offset←Memory[base+imm]

sw

001001

base

rt

offset

Memory[base+imm]←offset

(3)J型指令:

指令

指令格式

功能

op

rs

rt

offset

Beq

000100

sj1

Sj2

offset

Ifsj1=sj2thenbranch

Bnq

000101

sj1

Sj2

offset

Ifsj1≠sj2thenbranch

j

101000

2)总体结构设计

注:

将一个外来时钟信号clk_out生成一系列时钟信号clk1、clk送往CPU内部的其他部件。

clk1信号用作状态控制器的时钟信号。

clk则用于触发每一个状态的进行。

3)该MIPSCPU的顶层原理图

2.子模块详细设计

该多周期CPU内部主要包括九个基本模块,即时钟发生器,指令寄存器,累加器,算术逻辑单元,数据控制器,状态控制器,取指模块,地址多路器和立即数扩展等模块。

各模块具体功能及相关主要端口说明如下:

1)时钟发生器

根据功能单元所需进行的操作,将一条指令执行分解为一系列步骤,指令的每一个步骤占用一个时钟周期。

因此利用时钟发生器模块将一个外来时钟信号Clk_out生成一系列不同的时钟信号clk1、clk送往CPU内部的其他部件。

利用clk的上升沿来触发CPU控制器开始执行一条指令。

clk1信号用作状态控制器的时钟信号。

端口定义:

序号

接口信号名称

方向(I/O)

说明

1

Clk_out

I

外部输入时钟

2

rst

I

复位信号,低有效

3

clk1

O

状态控制器的时钟信号

4

clk

O

ALU的时钟信号

2)指令寄存器

指令存储器用于存放CPU运算的程序指令和数据等,采用单端口存储器设计,设计最大为64个存储单元,每个存储单元数据宽度为32bit。

指令寄存器的触发时钟是clk,在clk的正沿触发下,寄存器将数据总线送来的指令寄存器中。

但并不是每个clk的上升沿都寄存数据总线的数据,因为数据总线上有时传输指令,有时传输数据。

什么时候寄存,什么时候不寄存由CPU状态控制器的load_ir信号控制。

load_ir信号通过ena口输入到指令寄存器。

复位后,指令寄存器被清为零。

序号

接口信号名称

方向(I/O)

说明

5

clk

I

存储器工作时钟,频率为50Mhz

6

rst

I

存储器片选信号,低有效

7

ExtMem_Adr[5:

0]

I

存储器地址线

8

ExtMem_WR

I

存储器读写信号,1为写反之读

9

ExtMem_Din[31:

0]

I

存储器输入数据线

10

ExtMem32[31:

0]

O

存储器输出数据线

11

ena

I

加载指令寄存器

3)累加器

累加器用于存放当前的结果。

复位后,累加器的值是零。

当累加器通过ena使能端口收到来自CPU状态控制器load_acc信号时,在clk时钟正跳沿时就收到来自于数据总线的数据。

序号

接口信号名称

方向(I/O)

说明

1

clk

I

时钟信号

2

ena

I

使能信号

3

Data[31:

0]

I

来自数据总线的数据

4

rst

I

复位信号,低有效

5

accum[31:

0]

O

输出总线上的数据

4)RISCCPU算术逻辑运算单元

算术逻辑运算单元根据输入的8种不同操作码分别实现相应的加、减、与、异或、跳转等多种基本操作运算。

利用这几种基本运算可以实现很多种其它运算以及逻辑判断等操作。

同时利用该算术逻辑部件的部分功能实现下载之后的流水灯简单变化功能,用以验证设计结果。

(1).端口说明

序号

接口信号名称

方向(I/O)

说明

1

ALU_DA[31:

0]

I

参与运算的第一个输入数据

2

ALU_DB[31:

0]

I

参与运算的第二个输入数据

3

alu_clt[3:

0]

I

运算功能编码

4

alu_shift[4:

0]

I

偏移量

5

ALU_Zero

O

零标志位

6

Alu_Overflow

O

溢出标志位

7

ALU_Dout[31:

0]

O

运算结果输出位

(2).具体ALU实现如下图所示

5)数据控制器

数据控制器的作用是控制累加器数据输出,由于数据总线是各种操作时传送数据的公共通道,不同的情况下传送不同的内容。

有时要传输指令,有时要传送RAM区或接口的数据。

计算单元的数据只有在需要往RAM区或端口写时才允许输出,否则应呈现高阻态,以允许其它部件使用数据总线。

所以任何部件往总线上输出数据时,都需要一控制信号。

而此控制信号的启、停,则由CPU状态控制器输出的各信号控制决定。

数据控制器何时输出ALU的数据则由状态控制器输出的控制信号Data_ena决定。

序号

接口信号名称

方向(I/O)

说明

1

In

I

ALU的数据输入口

2

Data_ena

I

是否输出ALU的数据的控制信号

3

Data[31:

0]

O

来自数据总线的数据

6)状态控制器

状态控制器由两部分组成:

1.状态机

2.状态机控制器

 状态机控制器接受复位信号RST,当RST有效时通过信号ena使其为0,输入到状态机中停止状态机的工作。

状态机是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件。

CPU对指令和数据的读写都是由状态机来控制的。

状态机的当前状态,由变量state记录,state的值就是当前这个指令周期中已经过的时钟数。

4类指令的有限状态机图

一条指令的执行分为若干个周期,包括取指令周期,指令译码周期,指令执行周期,存储器访问周期以及结果回写周期。

本次实验利用有限状态机实现多周期CPU的控制。

在执行指令过程中:

(1).LW等指令的执行包括5个周期:

a)根据程序计数器取指令,并且PC+1;

b)指令译码,读出rs寄存器的内容;

c)计算存储器地址;

d)访问存储器,读出数据;

e)将结果写入寄存器堆中的rt寄存器。

(2).跳转指令的执行需要3个周期:

a)根据PC取指令;

b)指令译码,选择要跳转的目标地址;

c)把跳转地址写入PC中。

(3).R型指令执行需要4个周期:

a)根据程序计数器取指令,并且PC+1;

b)读出rs和rt寄存器的内容;

c)由ALU完成两个输入数据的计算;

d)将结果写入寄存器堆中。

(4).转移指令执行需要3个周期:

a)根据程序计数器取指令;

b)读出rs和rt寄存器的内容,ALU计算转移地址;

c)由ALU比较两个寄存器内的数据,决定是否要把转移地址写入PC中。

7)取指模块

由程序计数器,取出指令以及译码三个子模块构成总的取指模块。

程序计数器用于提供指令地址。

以便读取指令,指令按地址顺序存放在存储器中。

当指令顺序执行时,pc_addr每次自动加1,如果遇到要改变顺序执行程序的情况,即分支或跳转指令时,需要形成新的指令地址,这时CPU状态控制器将会输出load_pc信号,通过load口进入程序计数器。

程序计数器(pc_addr)将装入目标地址(ir_addr),而不是增1。

如果执行复位,则复位后,指令指针为零,即每次CPU重新启动将从存储器的零地址开始读取指令并执行。

(1).端口说明:

序号

信号名

方向(I/O)

端口说明

1

clk

2

rst

3

ALU_DA

算术逻辑单元数据A

4

Branch

分支信号使能端

5

Jump

跳转信号使能端

6

op

指令操作码

7

rs

8

rt

9

rd

10

func

R指令的功能操作码

11

shamt

偏移量

12

imm16

立即数

13

ALU_DB

算术逻辑单元数据B

14

Pc_out

程序计数器输出

(2).电路内部基本构成如下图所示:

8)地址多路器

地址多路器用于选择输出的地址是PC(程序计数)地址还是数据/端口地址。

每个指令周期的前4个时钟周期用于从ROM中读取指令,输出的应是PC地址。

后4个时钟周期用于对RAM或端口的读写,该地址由指令中给出。

地址的选择输出信号由时钟信号的fetch提供。

端口定义:

序号

接口信号名称

方向(I/O)

说明

1

PC_addr

I

PC地址

2

IR_addr

I

指令地址

3

Fetch

I

时钟信号

4

addr

O

选择地址的输出

9)立即数扩展

设计一个32位MIPS符号扩展单元SE,用于将16位的数据转换为32位数据。

端口说明:

序号

信号名

方向(I/O)

说明

1

Imm16[15:

0]

I

来自指令寄存器的16位立即数

2

Extop

I

立即数扩展信号的使能端

3

bus[31:

0]

I

4

ExtImm32[31:

0]

O

符号扩展后的32位立即数

3.设计过程中部分重要代码

1)利用状态机实现CPU内部信号控制,主要控制信号:

ALUSrcA,ALUSrcB,Load_Mem,MemtoReg,

RegDst,ExtOp,MemWr,PcWrite,RegWr;

状态机分为10个状态,

State_IR=4'b0000,取指

State_decode=4'b0001,译码

State_MemCalc=4'b0010,计算寄存器地址

State_MemRD=4'b0011,I型指令访存(lw)

State_MemRDend=4'b0100,I型数据写入寄存器

State_MemWr=4'b0101,I型指令访存(sw)

State_R=4'b0110,R型执行

State_Rend=4'b0111,R型执行完成//

State_B=4'b1000,分支执行及计算PC地址//

State_J=4'b1001;跳转执行及计算PC地址//

2)在外部设置独立小模块生成跳转和分支控制信号:

Branch,Jump。

 

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

当前位置:首页 > 小学教育 > 其它课程

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

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