ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:399.73KB ,
资源ID:11983826      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11983826.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机系统综合课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机系统综合课程设计.docx

1、计算机系统综合课程设计计算机系统综合设计设计报告 组长: 唐兴盛 成员: 吴哲凯 荆 宁 丁富来 汤思彦 东南大学计算机科学与工程学院二00九年一月设计名称东大之芯嵌入式系统完成时间2009-1-5验收时间成绩本组成员情况姓 名学 号承 担 的 任 务个人成绩唐兴盛09005309流水线CPU、MiniC编译器吴哲凯09005328流水线CPU、汇编器荆 宁09005323集成开发环境MiniSys IDE丁富来09005324汇编器汤思彦09005336外设 注:本设计报告中各个部分如果页数不够,请大家自行扩页,原则是一定要把报告写详细,能说明本组设计的成果和特色,能够反应小组中每个人的工作

2、。报告中应该叙述设计中的每个模块。设计报告将是评定每个人成绩的重要组成部分之一,因此要在报告中明确标明每个模块的设计者。设计报告最后一页是验收表和教师综合评价,请大家打印报告的时候将此页一并打印装订。本组设计的功能描述(含所有实现的模块的功能) 我们小组在本课程设计中一共完成了32位流水CPU及定时计数器,看门狗、PWM、UART、中断控制器这些外设,带全屏编辑功能的汇编器、Mini-C编译器的IDE环境开发。并实现了系统的整体联合调试,以及下载调试。功能完全正常。本组设计的主要特色1.实现了32位5级流水结构的CPU 2.实现了具有强大错误检测功能的汇编器 3.实现了Mini-C编译器 4.

3、重写了ALU中的移位器 5.使用结构描述重新设计了寄存器组 6.完善地处理了流水中断及其嵌套的处理 7.整合了汇编器与编译器,设计出了一个集成开发环境MiniSys IDE8. MiniSys IDE支持关键字高亮,并实现了与Quartus的无缝连接本组设计的体系结构I.32位5级流水CPU系统的CPU采用了MIPS的经典5级流水结构。流水段分为IF取指、ID译码、EXE执行、MEM内存读写、WB寄存器回写。流水线设计关键是解决相关性。系统采用的是哈佛结构,所以不存在结构相关。主要解决的是数据相关和控制相关。解决数据相关采用了转发策略,将以后要写到寄存中的数据提前送到需要的地方;解决控制相关采

4、取了阻塞策略。II.汇编器汇编器主要由四个部分组成:词法分析、语法分析、机器码翻译、错误检测。其中语法分析是核心。具体结构图1所示。图1 汇编器结构词法分析器负责按照MiniSys汇编语言词法,组字符成词;语法分析器依据MiniSys汇编语言语法,组词成句;机器码生成器负责依据翻译规则(包括指令翻译和数据翻译),将一个完整的指令句子或变量定义语句转换为相应的机器指令。 词法分析器没有用自动机,而是采用了以下策略。我们用的是LL(1)文法,所以每次读入一个单词前,基本已经知道了单词的类型。词法分析时,直接读入一个字符串,然后进行字符串匹配。比如通过语法分析,知道接下来是“ORG_CODE”。词法

5、分析时只要把读入的字符串同“ORG_CODE”进行匹配,如果一样证明词法分析正确,否则就是出错。出错后,调用相应的错误处理程序,处理完后继续进行语法分析。 机器码的生成伴随着词法分析和语法分析。如果前一个单词识别正确,则进行翻译。否则跳过不进行翻译。 汇编器的关键是语法规则的定义,语法分析和词法分析都是严格按照语法规则进行的。III.Mini-C编译器MiniC 编译器主要由以下几个部分组成,词法分析器,语法制导分析筐架(含中间代码生成),寄存器分配模块,函数块翻译模块,代码综合输出模块。结构示意如图2所示。图2 编译器结构词法分析器在词法分析表的驱动下,从输入流中识别符号,为语法分析提供单词

6、流。语法分析器采用了LALR(1)分析法,并采用语法指导的方式进行中间代码的生成,符号表管理模块为语法分析过程提供单词登记,查询的功能,并参与变量的空间分配计算,为后续的代码生成,提供地址信息。寄存器分配部分负责对翻译过程中产生的临时变量进行寄存器关联,采用的策略是简单统计各个临时变量的使用频率,为使用最频繁的前10个临时变量分配寄存器,对超出部分的寄存器,为其分配内存空间。函数块的翻译负责将中间代码生成部分产生的各个函数的中间代码翻译为汇编代码,并加上相应的现场保护,现场恢复的代码,完成子程序的翻译。最后的代码综合输出主要作用是,将各个子程序进行总装,加上中断入口,程序初始化代码,产生完整的

7、一个汇编代码,完成翻译。产生的汇编代码只要通过Minisys 的汇编器翻译,就可以生成最终的机器代码,进入CPU运行。本组设计中各个部件的设计与特色概述I.流水处理器部分 总体设计系统的CPU采用了MIPS的经典5级流水结构。流水段分为IF取指、ID译码、EXE执行、MEM内存读写、WB寄存器回写。流水线设计关键是解决相关性。系统采用的是哈佛结构,所以不存在结构相关。主要解决的是数据相关和控制相关。解决数据相关采用了转发策略,将以后要写到寄存中的数据提前送到需要的地方;解决控制相关采取了阻塞策略。 功能介绍 与MIPS指令集兼容的32位流水CPU 两级外部中断控制器 主要模块实现技术 中断控制

8、器流水线的中断具有一定的复杂性,本设计针对不同情况采取了相应的策略实现了精确中断。中断的检测在时钟下降沿完成。(1)非转移指令的中断处理。此类情形的中断时最简单那的,只需要在中断返回地址寄存器中写入下一条指令的地址,同时输出新PC为中断入口地址,在下一时钟清除IF/ID流水寄存器。但此类情况有个复杂点的问题,下一周期时,IF/ID被清除,此时高优先级的中断将当前的低优先级中断中断了,当保存的中断返回地址为低优先级的中断的入口地址。所以,设计时,要向ID/EXE流水寄存器传递当前是否有低优先级的中断发生。(2)转移指令的中断处理。对于转移发生前,只需要保存转移的目的地址,同时设置新的PC值,清除

9、IF/ID寄存器。对于下一个时钟周期,由于IF/ID被清除,此时发生中断嵌套,则类似于a中的处理方法,利用ID/EXE保存的上个时钟的信息,保存低优先级中断的入口地址。(3)被阻塞的指令。中断发生时,中断控制器会检测是否有阻塞信号,并自动延迟1个时钟周期执行中断过程。 寄存器模块寄存器组位宽为32位,采用D触发器组建。由地址译码器、32位寄存器组、输出多路开关、转发器多路开关组成。寄存器文件提供寄存器的读写以及前向数据的转发功能,是处理器的核心部件之一。为了解决结构相关性,规定寄存器组的写入发生在时钟下降沿。寄存器组RTL图如图3所示。图3 寄存器组的RTL图 译码单元采用了组合电路译码方式,

10、产生相关控制信号、扩展16位立即数到32位、分析数据相关性、指导数据流的转发。为了消除对ALU造成的结构相关性,PC和MEM/IO地址的计算,都在译码单元中完成。这样可以提高转移指令的效率。译码单元是整个CPU的核心部分,CPU的正常运行完全靠译码单元的控制和协调。 执行单元执行单元的设计至关重要,其性能的高低直接决定CPU的延迟和主频。为了尽可能避免触发器造成的延迟,采用了纯组合逻辑设计。运算部件采用高效结构,比如32位组内并行组间也并行的加法器、桶形移位器(见图4)等。以此尽可能的减少延迟。 图4 桶形移位器 MEM/IO单元内存使用了Altera公司提供的宏模块实现,使用的是lpm_ra

11、m宏模块。在时钟的下降沿完成MEM的写入和读出。I/O与MEM采用统一编址,由MEMIO模块负责MEM/IO地址译码,产生MEM和IO的选通信号。同时,该模块产生写入数据,送往MEM和IO部件。为了整合MEM和IO的读出数据,IOREAD模块根据内存和IO的读写信号以及地址信号,对MEM和IO的读出数据进行选择,从而实现读出数据的过滤。IOREAD的RTL结构如图5所示。图5 IOREAD的RTL结构接口部件 总体设计在计算机系统中,外设不会直接挂在系统总线或CPU上,这是因为外设在信号种类、时序等方面往往会有差别,所以需要提供相应的接口电路来完成与系统总线之间的各种转换。各种接口电路中,需要

12、设计供CPU直接存取访问的寄存器或特定电路,称之为I/O端口。I/O地址空间的设计有两种方案,一种是独立编址、另一种是统一编址。考虑到指令系统中没有专门的I/O指令,只能使用LW和SW两条指令进行RAM访问和I/O访问,所以采用了I/O统一编址方式。系统中RAM与I/O地址空间分配如图6所示。图6 RAM与I/O地址空间分配 各模块用途简介 7段LED是系统中最常用的输出设备 44键盘是系统中最常用的输入设备 16位定时器可以用来输出时钟中断 PWM控制器用来控制模拟电路 32位并口用来模拟彩灯效果 看门狗控制器用来使失控的程序恢复正常 32位内部定时器提供内部定时 各模块具体功能 4位7段L

13、ED控制器数码管有两种,共阳极数码管和共阴极数码管。系统针对共阴极数码管进行设计。即数据位为“1”时,数码管亮,为“0”时灭。系统中有4个7段数码管,可用来表示4位10进制或4位16进制数。每半个字节为1组,从16位数据线的高位到低位共分成4组,分别表示LED3、LED2、LED1和LED0。模块中含有一个16位寄存器,保存显示到数码管上的数值。端口地址为0FF00H。 44键盘控制器为了减少连线个数,节省布线面积,系统采用了矩阵键盘形式。键盘控制器的功能为自动扫描44键盘,当有键按下时扫描键值,将键值记录到键值寄存器中。键盘的扫描算法是:让所有行线全为了0,读出所有列线状态,如果有列线为0,

14、则说明有键按下;然后从第0行开始扫描每一行,令该行所对应的行线为0,其余行线为1;然后读列线,如果有一列为0,则该行该列交叉处的键被按下;如果读出所有列都为1,则行号加1,并将下一行线清0,其他行线置1,顺序扫描下一行。扫描到按键后,将行线和列线进行编码,输出键值。MiniSys成功的用电路实现了这一键盘扫描算法。模块中含有一个4位寄存器,用来保存当前键值。端口地址为0FF10H。 16位定时/计数器系统带两个定时/计数器,采用了加1计数器。支持重复定时/计数。定时方式中,计数到设定值输出一个高电平。默认情况下, SCT2的定时输出接0号中断(时钟中断)。计数方式中,计数到设定值时设置状态寄存

15、器的相应位。模块中含有四个16位的寄存器,用来保存当前状态值或当前计数值。端口地址为0FF20H、0FF22H、0FF24H、0FF26H。 16位PWM控制器控制器内部有一个16位计数器和一个16位对比值,计数器周而复始的加1计数,计数到最大值时跳变为0再计算。当计数器的值低于对比值时输出低电平,否则输出高电平。不难发现,对比值的不同决定了输出脉冲的占空比。当然计数器的最大值可以由程序设置。模块中含有三个16位的寄存器,分别用来保存计数器的最大值、计数器的对比值、计数器的使能信息。端口地址分别为0FF30H、0FF32H、0FF34H。 看门狗控制器模块中含有一个16位定时器,系统复位后计数

16、值为0FFFFH,之后计数值减1,当减到0的时候,向CPU发送4个时期的RESET信号,同时计数器复位到0FFFFH并继续计数。可以通过程序向看门狗端口发写信号(俗称“喂狗”)来复位看门狗,使计数器重新开始计数。模块的端口地址为0FF50H。 32位并口控制器本模块很简单,就是含一个32位的寄存器。可以读写这个寄存器,端口地址为0FF70H。 设计难点及解决方案 流水线CPU设计的问题和解决策略(1)数据相关性MiniSys的设计采用了数据定向转发技术来解决数据的相关性。ID段含两个四选一的数据选择通路,以此实现数据的定向转发。数据选择通路的四个输入是EXE段的ALU运算结果、MEM段保存的A

17、LU运算结果、MEM段读出的数据、寄存器的回写数据。根据ID段产生的控制信号,选择其中的一条通路作为EXE的运算数据输入。除了一种特殊的情况,其他的数据相关都可以通过定向转发解决。对于EXE段指令为lw,而ID段的指令需要lw读出的内存值。此时,内存的数据只能在下一个时钟周期才能被读出来,因此ID段和IF段需要阻塞一个时钟周期,同时在下一个周期开始时清除ID段流向EXE的数据和控制信号,以等待内存数据的读出。(2)控制相关性对于jr、j指令,一定会发生转移,因此在ID段就可以计算出新PC值。对于jal,在ID段就写入$ra寄存器。同时,应当在下一时钟周期清除IF/ID段的流水寄存器。对于bne

18、,beq指令,通过在ID段判断寄存器的内容,确定转移是否发生,控制新PC的产生。由于可能发生和EXE段的lw相关,加上转移发生要清除一段流水寄存器,其最大可能造成两段的空隙,这是bne,beq和j,jal的不同。(3)结构相关由于计算PC值有单独的加法单元,同时采用哈佛结构(分离的指令和数据存储器),因此MiniSys的设计不存在结构相关性。 关于数据转发策略的细节MiniSys的设计中有四种数据需要向前转发:EXE段的ALU运算结果、MEM段保存的ALU运算结果、MEM段读出的数据、寄存器回写数据。按照转发最新数据的原则,四种数据的优先级为 EXE段的ALU结果 MEM段保存的ALU结果或M

19、EM段读出的数据 寄存器回写数据。当前指令需要读取数据时,根据控制信号判断是否需要转发。如果需要则从下面四个输入中选一个作为转发数据:EXE段的ALU运算结果、MEM段保存的ALU运算结果、MEM段读出的数据、寄存器回写数据。如果不需要则直接读寄存器文件。转发策略完全由组合逻辑实现,并采用了优先级结构以保证较短的电路延迟。 PC流水的设计细节图7 PC的流水结构图7就是PC(指令计数器)流水的结构,从结构图我们看出,PC流水实际上就是对新PC的选择过程,如果没有转移发生时,PC顺序地产生,只有当转移发生时,PC才会终止顺序产生,而装入新的PC值。多路开关的控制信号由译码单元和中断控制器联合产生

20、。上述的PC流水通路在PCGEN模块中实现。图8是PCGEN的内部RTL结构。图8 PCGEN的内部RTL结构II.汇编器 总体设计汇编器主要由四个部分组成:词法分析、语法分析、机器码翻译、错误检测。其中语法分析是核心。具体结构如图9所示。图9汇编器结构词法分析器负责按照MiniSys汇编语言词法,组字符成词;语法分析器依据MiniSys汇编语言语法,组词成句;机器码生成器负责依据翻译规则(包括指令翻译和数据翻译),将一个完整的指令句子或变量定义语句转换为相应的机器指令。 词法分析器没有用自动机,而是采用了以下策略。我们用的是LL(1)文法,所以每次读入一个单词前,基本已经知道了单词的类型。词

21、法分析时,直接读入一个字符串,然后进行字符串匹配。比如通过语法分析,知道接下来是“ORG_CODE”。词法分析时只要把读入的字符串同“ORG_CODE”进行匹配,如果一样证明词法分析正确,否则就是出错。出错后,调用相应的错误处理程序,处理完后继续进行语法分析。 机器码的生成伴随着词法分析和语法分析。如果前一个单词识别正确,则进行翻译。否则跳过不进行翻译。 汇编器的关键是语法规则的定义,语法分析和词法分析都是严格按照语法规则进行的。 功能介绍 支持MIPS指令集的一个子集,含31条指令 采用软件模拟,扩展了 6条指令:push、pop、jle、jl、jg、jge 数据类型支持2、10、16进制,

22、以后缀区分 具有全局查错功能,即一次汇编尽可能多的找出错误 数据段定义支持多变量、多行定义、地址重定位 允许多行注释 模块实现 词法分析模块该模块含一个扫描器的总控程序,总控程序根据需要调用不同的扫描子程序。比如语法分析过程中,需要词法分析程序识别一个标识符。它将标识符的内码传递给扫描器的总控程序Scanner(T_IDNAME),然后再调用ScanIdname()识别一个标识符。如果成功返回0,失败则返回1。一些简单的识别,比如识“DATA”或”CODE”等,直接在总控程序中实现,并没有单独定义函数。下面是词法分析程序关键函数声明:int Scanner(int TypeOfToken);

23、/扫描器总控程序int ScanCom(); /扫描指令助记符int ScanIdname(); /扫描标识符int Scan16Radix(int maxlen); /扫描16进制数int Scan10Radix(int maxlen); /扫描10进制数int Scan2Radix(int maxlen); /扫描2进制数int ScanReg(int ToeknID); /扫描寄存器int ScanEndl(); /扫描注释 语法分析模块语法分析采用了LL(1)文法。下面是语法分析程序关键函数声明:int Parser(); /语法分析器 int Deduction(); /语法推导器v

24、oid Succeed(); /汇编成功void Fail(); /汇编失败语法分析的具体算法如图10所示。图10 语法分析算法 机器码生成模块该模块主要是将汇编程序中的数据和指令翻译程机器码,其中数据放在Ram.mif文件,指令放在Rom.mif文件。翻译采取的策略是每识别一个正确的单词,调用翻译程序进行翻译。比如翻译这条指令:add $1,$2,$3 。词法程序正确识别指令助记符号“add”,接着调用翻译器,在指令链表中添加一条新指令,填充功能号和操作码。词法程序识别“$1”、“$2”、“$3”后,翻译器往先前添加的指令中填充Rd、Rs、Rt字段。这样就完成了一条指令的翻译。下面是机器码生

25、成模块的关键函数:int Translater(); /翻译器核心程序int TranslateImmi(); /翻译立即数int TranslateAddr(); /翻译地址int TranslateID(); /翻译变量/下面都是具体指令翻译函数int TranslateRcom(); int TranslateSrcom();int TranslateSllRcom();int TranslateIcom();int TranslateSicom();int TranslateLwicom();int TranslateJcom();int TranslateBcom();int Tra

26、nslatePcom();int TranslateJbcom();int TranslateNop(); 错误处理模块可处理常见的词法、语法、语义错误。词法和语法错误是在词法分析中发现的,而语义错误是在翻译过程中发现的。遇到错误后,调用错误总控程序Error(int TypeOfError),错误总控程序根据错误类型调用不同的处理函数。处理函数打印错误信息,同时调整下推栈和输入流,这样语法分析程序就可以继续进行下去。下面是错误处理模块的关键函数:int Error(int TypeOfError); /错误处理总控程序int ErrorLexical(); /词法语法错误处理int Erro

27、rSemantic(); /语义错误处理int ReadErrorToken(); /读取错误单词int ReadErrorSentence(); /读取错误句子 语法规则1. 2. 3. 4. T_DATAT_SEGT_ENDL5. 6. 7. 8. T_ORG_DATAT_ADDRT_ENDL9. 10. 11. T_IDNAMET_DWT_NUMT_ENDL12. T_COMMAT_NUM13. 14. T_DWT_NUMT_ENDL15. 16. T_DATAT_ENDST_ENDL17. 18. T_CODET_SEGT_ENDL19. 20. 21. T_ORG_CODET_ADD

28、RT_ENDL22. 23. T_IDNAMET_COLON24. T_ENDL25. 26. T_RCOMT_RDT_COMMAT_RST_COMMAT_RT27. T_SRCOMT_RS28. T_SLLRCOMT_RDT_COMMAT_RTT_COMMAT_SHAMT29. T_ICOMT_RTT_COMMAT_RST_COMMAT_IMMEDIATE30. T_SICOMT_RTT_COMMAT_IMMEDIATE31. T_LWICOMT_RTT_COMMAT_BRS32. T_JCOM33.T_BCOMT_RTT_COMMAT_RST_COMMAN_ IMMEDIATE 34.T_PCOMT_RS35. T_JBCOMT_RTT_COMMAT_RST_COMMA36. T_NOP37. T_IDNAME38. T_ IMMEDIATE 39. T_IDNAME40. T_ADDR41. 42.

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

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