计算机系统综合课程设计东南大学计算机科学与工程学院.docx

上传人:b****3 文档编号:4595114 上传时间:2022-12-07 格式:DOCX 页数:30 大小:186.05KB
下载 相关 举报
计算机系统综合课程设计东南大学计算机科学与工程学院.docx_第1页
第1页 / 共30页
计算机系统综合课程设计东南大学计算机科学与工程学院.docx_第2页
第2页 / 共30页
计算机系统综合课程设计东南大学计算机科学与工程学院.docx_第3页
第3页 / 共30页
计算机系统综合课程设计东南大学计算机科学与工程学院.docx_第4页
第4页 / 共30页
计算机系统综合课程设计东南大学计算机科学与工程学院.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

计算机系统综合课程设计东南大学计算机科学与工程学院.docx

《计算机系统综合课程设计东南大学计算机科学与工程学院.docx》由会员分享,可在线阅读,更多相关《计算机系统综合课程设计东南大学计算机科学与工程学院.docx(30页珍藏版)》请在冰豆网上搜索。

计算机系统综合课程设计东南大学计算机科学与工程学院.docx

计算机系统综合课程设计东南大学计算机科学与工程学院

计算机系统综合设计

设计报告

 

组长:

张冠群(09003105)

成员:

杨俊(09003209)

孙啸寅(09003112)

万乾坤(09003218)

李传佑(09003214)

刘森(09003110)

黄河(09003206)

 

东南大学计算机科学与工程学院

二OO六年九月

设计名称

基于MIPS32的SOC设计

完成时间

2006.9

验收时间

本组成员情况

姓名

学号

承担的任务

成绩

张冠群

09003105

mips32CPU、CTC、PWM、WDT、BIOS、

实验报告、最终测试

刘森

09003110

LED、LCD

孙啸寅

09003112

mips32CPU、I/O模块

黄河

09003206

UART

杨俊

09003209

mips32CPU、INT32、SOC模块

李传佑

09003214

KEY,部分BIOS

万乾坤

09003218

MiniCCompilers

 

注:

本设计报告中各个部分如果页数不够,请大家自行扩页,原则是一定要把报告写详细,能说明本组设计的成果和特色,能够反应小组中每个人的工作。

报告中应该叙述设计中的每个模块。

设计报告将是评定每个人成绩的一个重要组成部分。

本组设计的功能描述(含所有实现的模块的功能)

SOC模块

串联CPU和外围接口模块,实现片上系统的功能。

MEMorIO模块

该模块功能作用是给cpu添加io接口,当读写mem时给RAM输出存储器读写信号,当读写io时给外设输出io读写信号,提供数据线和地址线与外设连接.

UART模块

简单的串行通信模块。

负责控制将CPU来的8位数据并转串,然后按照异步串行通信数据格式输出,将串口来的8位串行数据串转并,并在CPU请求的时候输入给CPU。

LED模块

通过向该控制电路写32位数据,经过译码控制共阳极的7段LED显示。

32位数每半个字节控制一位7段LED,从高位到地位排列。

每个LED灯显示十六进制数,从0到F。

LED0模块

LED的附属模块,一个LED灯的输出显示。

KEY模块

自动扫描4×4的键盘,当有键盘按下的时候扫描键值,将键值记录到键值寄存器,然后向CPU发出中断。

CPU响应中断,当CPU读出键值后,撤销中断请求。

CTC模块

定时/计数器模块。

两个定时/计数器CNT0和CNT1。

具有计数和定时两个功能。

计数方式下可以对输入的外部脉冲进行计数,当计数到初值寄存器的值的时候,设置状态寄存器的相应位。

定时方式下,在时钟作用下计时器做减1,到0的时候设置状态寄存器的相应位,并在相应的COUT脚输出一个时钟的低电平(平时COUT是高电平)。

状态寄存器在被读取后被清零。

PWM模块

脉冲宽度调制模块。

可以调节脉冲的频率和占空比(本模块不支持)。

一个12位PWM内部一个计数器和一个对比值,计数器周而复始的加1计数,计数到0FFFH的时候转为0再计数。

当计数器的值大于对比值,输出端输出低电平,否则输出高电平。

WDT模块

看门狗模块。

内含一个16位定时器,系统复位后计数值为FFFFH,之后每时钟计数值减1,当减到0的时候,向CPU发4个时钟周期的RESET信号,同时计数值恢复到FFFFH并继续计数。

通过软件不断地定期写看门狗端口来复位看门狗,使计数器重新从FFFFH开始计数。

增加看门狗电路后,CPU的RESET输入脚是系统复位信号和看门狗发出的复位信号的组合。

mips32模块

mips32CPU顶层模块。

负责串联起CPU内各个控制、取指、执行、中断等模块。

完成基于mips指令集的32位CPU功能。

具有32位指令,16位地址线和32位数据线。

CountClock模块

用于串行通信UART的顶层模块。

control32模块

控制单元模块。

根据指令中的指令码(op)和功能码(funct)的不同组合输出相应的控制信号。

dmemory32模块

存储单元模块。

实际完成对数据存储器(RAM)的读写操作。

executs32模块

执行单元模块。

完成逻辑运算、算术运算、移位运算、比较转移的PC值计算、比较后赋值。

idecode32模块

译码单元模块。

对寄存器组进行操作。

根据指令译码结果,决定向其他部件(如运算器)送1路或两路数据。

ifetc32模块

取指单元模块。

到程序ROM中取指令、对PC值进行+4处理、完成各种跳转指令的PC修改功能。

int32模块

中断模块。

具有两个中断功能——中断0和中断1,中断0优先级大于中断1,不支持同级中断嵌套。

将$12和$14设计为两个中断返回地址存放寄存器,分别在中断0和中断1到来的时候存放返回地址。

它们分别称为$i0和$i1。

timecount模块

时钟脉冲分频模块。

共分为四个脉冲,每个脉冲的频率相同,且均为系统时钟频率的4倍。

不同的脉冲用以控制不同的CPU内部模块的运行。

cs138模块

译码模块。

用于产生各个接口模块的片选信号。

 

本组设计的主要特色

1、可运行指定的31条MIPS指令的RISC型MIPS32微处理器,具有32位指令,16位地址线和32数据线。

2、处理器采用哈佛结构,有独立的2KB的指令存储器和4KB的数据存储器

具有2个中断源入口,两级中断优先级。

3、键盘采用中断方式,而非扫面方式,为中断0级(最高级)。

4、2个32位定时/计数器。

5、CPU内部采用分频的方法,用不同的时钟对不同的模块进行同步控制,从而提高了主频。

6、键盘和LCD的时钟由CTC提供,初始化程序在BIOS中。

7、具有看门狗功能,通过指令对WDT进行复位。

8、MEM和IO统一编址。

IO的高3位产生片选CS信号,故最多支持8个接口,低5位用来选择8个32位的端口。

9、附有类C语言编译器,详细见MIPS32编译程序使用手册。

10、提供有LCD接口电路。

11、CPU与接口之间的数据线有64条,用于CPU输出和读入数据。

12、CPU内的ROM和RAM均采用同步控制。

13、采用32位的mips汇编BIOS程序。

14、编写有RAM和内部寄存器使用规则,避免因用户随意修改RAM和寄存器内存放的值而导致的系统瘫痪。

15、规定了用户用mips汇编写代码时可用的寄存器和RAM地址空间。

16、按住键盘上的某个键,在屏幕上并不是连续显示键值,两个前后显示的键值之间会有一定的时间间隔。

17、当编译用户的C程序时,如果堆栈指针越界,编译程序会提示出错,并在LED上显示三条横线。

18、最多支持7个LED的显示。

本组设计的体系结构

 

本组设计中各个部件的设计与特色

CPU

由六大模块构成,分别是取指模块、控制模块,译码模块,存储模块,执行模块,脉冲分频模块。

可运行指定的31条MIPS指令的RISC型MIPS32微处理器,具有32位指令,16位地址线和32数据线。

处理器采用哈佛结构,有独立的2KB的指令存储器和4KB的数据存储器。

具有2个中断源入口,两级中断优先级。

采用同步的RAM和ROM代替异步。

 

CTC

定时/计数器模块。

两个定时/计数器CNT0和CNT1。

具有计数和定时两个功能。

计数方式下可以对输入的外部脉冲进行计数,当计数到初值寄存器的值的时候,设置状态寄存器的相应位。

定时方式下,在时钟作用下计时器做减1,到0的时候设置状态寄存器的相应位,并在相应的COUT脚输出一个时钟的低电平(平时COUT是高电平)。

状态寄存器在被读取后被清零。

 

PWM

脉冲宽度调制模块。

可以调节脉冲的频率和占空比(本模块不支持)。

一个12位PWM内部一个计数器和一个对比值,计数器周而复始的加1计数,计数到0FFFH的时候转为0再计数。

当计数器的值大于对比值,输出端输出低电平,否则输出高电平。

 

WDT

看门狗模块。

内含一个16位定时器,系统复位后计数值为FFFFH,之后每时钟计数值减1,当减到0的时候,向CPU发4个时钟周期的RESET信号,同时计数值恢复到FFFFH并继续计数。

通过软件不断地定期写看门狗端口来复位看门狗,使计数器重新从FFFFH开始计数。

增加看门狗电路后,CPU的RESET输入脚是系统复位信号和看门狗发出的复位信号的组合。

 

UART

串行通信模块。

发送器要对外部时钟XTAL按照波特率要求进行分频,本设计采用固定波特率4800b/s。

接收器接收数据的采用率是波特率的16倍(也由XTAL分频得到)。

采用中间值采用的原则,也就是一个数据位占16个接收时钟宽度,在第8个时钟的时候采样。

数据格式固定为一位起始位0,16位数据位,暂无校验位,1位停止位1,若干空闲位1串行输出线空闲状态为1。

端口列表:

100:

接收移位寄存器

101:

发送移位寄存器

010:

写入缓冲寄存器

011:

内部状态寄存器

KEY

键盘扫描模块。

硬件实现自动扫描4×4的键盘,当有键盘按下的时候扫描键值,将键值记录到键值寄存器,并置位状态寄存器中的“有键”标志,同时发出中断。

当CPU读出键值后,将“有键”标志清除。

采用中断的方式而不采用CPU扫描的方式是本设计的特色,如果长时间不按键的话可以节省很多CPU时间,所以这样做提高了CPU的工作效率。

 

LED

LED灯控制模块。

设计:

32位输入数据,每半个字节控制一位七段LED,由高位到低位排列。

由两个模块控制4个LED灯。

 

LCD

LCD显示器接口模块。

可显示5*7或5*10点字图形20个共2行,因此共可显示40个字图形。

内部显示寄存器有20*32bit=20个,每一行10个,可用位移显示法予以显示。

 

本组设计的MIPS32编译程序使用手册

编写程序的语言的语法说明:

1、允许全局变量和函数局部变量,但一个函数内的变量在同一层次;

2、所有标识符只能是以字母打头,数字字母串,不能含有‘_’;

3、立即数可以是十进制或是以“0x”打头的十六进制;

4、循环语句允许有for、while、do...while,可以用continue、break;

5、不支持goto语句;

6、条件语句可以用if...else...,不能用switch...case...;

7、变量最多允许为一维,类型只能为有符号整型,不支持变量初始化;

8、函数可以有申明,返回类型为void或int,可以嵌套、递归调用;

9、允许空语句;

10、算术操作符有+、-、*、/、%、&(按位与)、|(按位或)、^(按位异与)、<<(左移)、>>(右移)、.(取变量的第几位,返回0、1)、-(负号);

11、逻辑操作符有&&、||、!

12、关系运算符有<、>、<=、>=、!

=、==;

13、支持变量后++,变量后--;

14、对端口操作可以用在端口号地址前加‘$’;

15、可以没有main()函数,中断处理函数的名称分别为“interuptServer0”和“interuptServer1”;

16、不允许用头文件,所有程序只能放在同一个文件中;

17、BIOS功能调用的函数名:

该程序生成的中间代码类似于汇编程序,但有所不同:

1、每条语句前可以有标号,必须是以‘L’打头,后面跟上十进制数;L0,L1都有特殊含义,L0是中断0跳转地址,L1是中断1跳转地址;

2、每条指令都是一个操作码加上三个操作数,中间不需要其他符号,操作数不够的后面补零;

3、只有一条伪指令“int”,相当于定义变量,可以在函数结构内定义局部变量,也可在函数外定义全局变量,以‘;’结束。

操作数中出现的变量名就等价于立即数,值等于它的偏移量;

4、指令“j”“jal”“beq”“bne”后跟的是要跳转的地址处标号的值,而非跳转地址或偏移;

5、“lw”“sw”的后面的参数顺序与网页上的不同,将立即数放在了最后;

6、寄存器可以用‘$’后加数表示,也可以加寄存器名表示,即“$1”和“$at”等价;

7、立即数支持正、负,十进制、十六进制(以“0x”打头);

对于关键部分的程序可以在中间代码进行人工修改后在汇编翻译。

 

语法和词法:

digit:

[0-9]

letter:

[a-zA-Z];

token:

lettertoken|letter;

decnums:

digitdecnums|;

decnum:

digit|[1-9]decnums;

hexnums:

[0-9a-f]hexnums|;

hexnum:

'0x'hexnums;

number:

decnum|hexnum;

var:

'$'arifif|token|token'['ariexp']';

args:

ariexp','args|ariexp|;

funcal:

token'('args')';

arifif:

var|funcal|'('ariexp')'|number;

arifor:

'-'arifif|arifif;

arithi:

arithi'&'arifor|arithi'|'arifor|arithi'^'arifor|arithi'.'arifor|arithi'>>'arifor|arithi'<<'arifor|arifor;

arisec:

arisec'*'arithi|arisec'/'arithi|arisec'%'arithi|arithi;

ariexp:

ariexp'+'arisec|ariexp'-'arisec|arisec;

relation:

ariexp'<'ariexp|ariexp'>'ariexp|ariexp'<='ariexp|ariexp'>='ariexp|ariexp'=='ariexp|ariexp'!

='ariexp|'true';

logthi:

'!

'logthi|'('logexp')'|relation;

logsec:

logsec'&&'logthi|logthi;

logexp:

logexp'||'logsec|logsec;

defvar:

token|token'['number']';

defvars:

defvar','defvariables|defvar;

defsen:

'int'defvars;

empsen:

';';

retsen:

'return'ariexp;

assen:

var'='ariexp|var'++'|var'--';

forini:

asssen|;

forjudge:

logexp|;

fordo:

asssen|;

forsen:

'for''('forini';'forjudge';'fordo')'block;

whisen:

'while''('logexp')'block;

dowsen:

'do'block'while''('logexp')'';';

iffsen:

'if''('logexp')'block|'if''('logexp')'block'else'block;

sentence:

empsen|asssen';'|forsen|whisen|dowsen|iffsen|defsen|funcal';'|'break'';'|'continue'';'|retsen;

block:

'{'sentenceblock'}'|sentence;

fundefvars:

'int'token','fundefvars|'int'token|;

fundec:

rettypetoken'('fundefvars')'';';

fundef:

rettypetoken'('fundefvars')''{'block'}';

function:

fundef|fundec;

wsentence:

defsen|function;

program:

wsentenceprogram;

本组设计中的BIOS使用手册

BIOS功能调用:

1、KEY

入口地址498

23号寄存器存放键值特权

用户从19号寄存器取数据

2、LED

入口地址489

规定将要写的内容放到20号寄存器中

3、rUART

入口地址478

特权寄存器22用来存放从UART读来的数据,用户从18号寄存器取出数据。

UART接收了CPU发出的数据,当接收缓冲寄存器为空时将$24清零

4、wUART

入口地址467

用户用21号寄存器来写

21号寄存器的内容赋给24号寄存器

24号寄存器是中断保留使用的

5、WRONG(不对用户开放)

入口地址509

使用特权寄存器$25保存是否越界的标志

 

INT中断功能:

1、KEY

中断号:

0

中断向量表地址:

510

中断服务程序首址:

36

2、UART

中断号:

1

中断向量表地址:

511

中断服务程序首址:

46

 

初始化程序:

1、初始化LCD

2、初始化KEY

本组设计中的RAM和寄存器使用手册

RAM使用规则:

系统使用的RAM地址范围:

03F7~03FF

用户使用的RAM地址范围:

0000~03F6

 

寄存器使用规则:

$0:

常量0寄存器

$1:

留做汇编使用

$2~$3:

用于表达式和函数值的存放

$4~$7:

存放参数1~3

$8~$15:

临时变量寄存器,调用时不用保存压栈的

$16~$21:

变量寄存器,需要压栈保存。

$18用户从该寄存器里读UART的内容;

$19用户从该寄存器里读键盘的键值;

$20存放用户将要写到LED内的内容;

$21存放用户将要写到UART内的内容

$22:

特权寄存器,中断程序用它存放从UART读来的数据

$23:

特权寄存器,中断程序用它存放寄存器的键值

$24:

特权寄存器,UART中断使用

$25:

特权寄存器,判断堆栈指针是否越界时使用

$26~$27:

为操作系统内核保留

$28:

指向全局变量的寄存器

$29:

存放堆栈指针

$30:

存放中断的返回地址

$31:

存放函数调用的返回地址

 

本组设计中的VerilogHDL程序清单及VWF图

注:

这里只列出文件的列表,BIOS程序及.v文件具体代码请参见光盘。

 

CPU的vwf图

Cs138的vwf图

CTC的vwf图

Int32的vwf图

UART的vwf图

LCD的vwf图

LED的vwf图

PWM的vwf图

WDT的vwf图(此处为了演示方便,暂时把初值置为8)

SOC的vwf图

本组光盘粘贴处

请将光盘装入纸袋中粘贴于此。

本组设计主要测试结果与性能分析(.rpt中的资源使用情况)

+---------------------------------------------------------------+

;AssemblerSummary;

+-----------------------+---------------------------------------+

;AssemblerStatus;Successful-TueSep1921:

42:

502006;

;RevisionName;SOC;

;Top-levelEntityName;SOC;

;Family;Cyclone;

;Device;EP1C6F256C6;

+-----------------------+---------------------------------------+

 

+------------------------------------------------------------------+

;FitterSummary;

+-----------------------+------------------------------------------+

;FitterStatus;Successful-TueSep1921:

42:

442006;

;QuartusIIVersion;5.0Build14804/26/2005SJFullVersion;

;RevisionName;SOC;

;Top-levelEntityName;SOC;

;Family;Cyclone;

;Device;EP1C6F256C6;

;TimingModels;Final;

;Totallogicelements;4,632/5,980(77%);

;Totalpins;85/185(45%);

;Totalvirtualpins;0;

;Totalmemorybits;50,176/92,160(54%);

;TotalPLLs;0/2(0%);

+-----------------------+------------------------------------------+

 

+--------------------------------------------------------------------+

;FlowSummary;

+-------------------------+------------------------------------------+

;FlowStatus;Successful-TueSep1921:

43:

352006;

;QuartusIIVersion;5.0Build14804/26/2005SJFullVersion;

;RevisionName;SOC;

;Top-levelEntityName;SOC;

;Family;Cyclone;

;Mettimingrequirements;No;

;Totallogicelements;4,632/5,980(77%);

;Totalpins;85/185(45%)

;Totalvirtualpins

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

当前位置:首页 > 初中教育 > 语文

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

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