大学毕业论文---基于lc3---isa处理器的设计与仿真

上传人:无*** 文档编号:205332815 上传时间:2023-04-28 格式:DOC 页数:90 大小:1.51MB
收藏 版权申诉 举报 下载
大学毕业论文---基于lc3---isa处理器的设计与仿真_第1页
第1页 / 共90页
大学毕业论文---基于lc3---isa处理器的设计与仿真_第2页
第2页 / 共90页
大学毕业论文---基于lc3---isa处理器的设计与仿真_第3页
第3页 / 共90页
资源描述:

《大学毕业论文---基于lc3---isa处理器的设计与仿真》由会员分享,可在线阅读,更多相关《大学毕业论文---基于lc3---isa处理器的设计与仿真(90页珍藏版)》请在装配图网上搜索。

1、 题目:基于LC-3 ISA处理器的设计与仿真 II目 录第一章 绪论11.1集成电路与微处理器11.2课题背景11.3 本文工作2第二章 设计流程和语言工具32.1 设计流程32.2 开发语言52.3 设计工具62.3.1 QuartusII开发环境62.3.2 ModelSim仿真工具8第三章 LC-3指令系统结构103.1存储器结构103.2 寄存器组113.3 指令集123.3.1 操作码123.3.2数据类型133.3.3寻址方式133.4 自陷、异常和中断173.4.1自陷173.4.2 中断和异常处理18第四章 数据通路设计与实现214.1 LC-3多周期处理器结构模块214.2

2、 数据通路分析224.3功能模块的分析与设计234.3.1寄存器的分析与设计234.3.2 ALU的分析与设计244.3.3多路选择器的分析与设计254.3.4 分支判断的实现264.3.5 加法器等其他功能模块部件264.4 自陷、中断和异常的实现274.4.1 当前栈指针产生器274.4.2 PSR系统284.4.3 向量控制器294.5 数据通路总体实现30第五章 综合验证与性能分析325.1 综合325.2 验证355.2.1 自陷服务与存储器映射I/O的仿真测试365.2.2 特殊指令以及两种异常仿真测试375.2.3 程序测试395.3性能分析41结束语44致谢45参考文献46附录

3、I 英文翻译47第一部分 英文原文47第二部分 中文译文60附录II 程序代码71附录III82第一章 绪论1.1集成电路与微处理器集成电路1发展初期最重要的应用领域就是计算机技术领域。计算机的发展是建立在集成电路技术的基础上的,而作为计算机核心部件的处理器,更是集成电路技术的结晶。1964年4月7日IBM公司研制成功了世界上第一个采用集成电路的通用计算机IBM 360,计算机从此进入了集成电路时代。此后,集成电路的发展为微型计算机的出现和发展奠定了基础。1971年,Intel公司成功地在一块12平方毫米的芯片上集成了2300个晶体管,制成了一款包括运算器、控制器在内的时钟频率仅为108kHz

4、的可编程序运算芯片,它被称为中央处理单元(CPU),又称为微处理器,这就是世界上第一款微处理器4004,从此便拉开了微处理器的序幕。此后微处理器芯片的集成度一直约每隔12至18个月便会增加一倍,性能也将提升一倍。这就是著名的“摩尔定律”2。目前,微处理器的主频已经达到了GHz级别。可以毫不夸张地说,没有集成电路的发展就没有微处理器的出现,自然也就不会有现在的微型计算机了。1.2课题背景1993年,Yale Patt教授在密歇根大学提出对传统教学思路的改革。1995年秋季,Yale Patt和Kevin Compton教授开设EECS100课程,这一课程是计算机科学(CS)、计算机工程(CE)和

5、电子工程(EE)三个专业的第一门计算机类主修课程。2001年,Yale Patt教授正式发行了第一本内容取自EECS100课程的教科书Introduction to Computing Systems: from bits and gates to C and beyond 3,书中内容包括两个部分:一是计算机底层结构(LC-2计算机),二是高级语言编程。此书发行后受到了大量学生和教师的好评,并且大多数人都赞同此书的编写方法,2004年Yale Patt教授正式推出该教科书的第二版4,第二版书中最大的改动就是采用LC-3结构替换了第一版的LC-2计算机模型。LC-3是一个Von Neumann

6、存储程序型计算机,具有比较完备的指令系统结构(ISA),对理解计算机各个组成部件的结构特点、工作原理及相互协同运行机制具有重要作用。2012年,我校计算机学院软件工程专业采用该教材计算机系统概论 英文版第二版5作为二年级学生计算机组成课程的教材,为深入理解书中LC-3 ISA的处理器微体系结构、工作原理、中断自陷等相关异常处理机制,决定采用Verilog HDL硬件描述语言设计教材中LC-3的CPU,实现完整LC-3 ISA处理器的逻辑设计,完成处理器的前端设计。1.3 本文工作本次设计从研究微处理器的工作原理入手,采用Verilog HDL硬件描述语言,结合ModelSim仿真工具,通过团队

7、合作,完成了能够实现15条指令的带有自陷、中断和异常运行机制的LC-3多周期处理器的设计与仿真,本人独立完成多周期处理器的数据通路部分的设计,本文主要进行以下几方面工作:1. 查阅相关文献资料,学习Verilog HDL硬件描述语言,熟悉使用ModelSim仿真工具,Quartus II综合工具;2. 深入分析LC-3指令系统结构,掌握每条指令的功能及具体运行的过程;3. 分析指令执行周期,深入理解自陷、中断和异常的运行机制,构建功能模块;4. 研究多周期处理器的基本工作原理,完成能够实现15条指令的带有中断和异常处理机制的多周期处理器的数据通路的设计;5. 使用Quartus II进行综合,

8、ModelSim进行仿真验证,并完成整体设计的功能测试。第二章 设计流程和语言工具2.1 设计流程集成电路(IC)设计是将系统、逻辑与性能的设计要求转化为具体的物理版图的过程, 也是一个把产品从抽象一步步具体化、直至最终物理实现的过程。为了完成这一过程, 人们研究出了层次化和结构化的设计方法:层次化的设计方法能使复杂的系统简化,并能在不同的设计层次及时发现错误并加以纠正;结构化的设计方法是把复杂抽象的系统划分成一些可操作的模块,允许多个设计者同时设计,而且某些子模块的资源可以共享。IC设计5是一个非常复杂的过程,它的流程不是固定不变的,而是随着设计方法学和EDA(Electronic Desi

9、gn Automation)工具的进步而不断演化的。当前的基本流程以及各阶段使用的工具和数据形式见图2.1。IC设计的基本流程如下:(1) 设计者分析用户和市场的需求,将其转化成对芯片产品的技术需求,形成设计规范说明书。(2) 设计和优化芯片中所使用的算法。一般使用高级编程语言(如C/C+)对算法进行建模和借助仿真工具(如MATLAB)进行仿真,进而对算法进行评估和优化。(3) 根据设计的功能需求和算法分析的结果,设计芯片的架构,并对不同的方案进行比较。根据性能、价格和功耗的约束,选择最合适的方案。这一阶段可以使用SystemC语言对芯片架构进行建模和分析。(4) RTL设计使用硬件描述语言完

10、成对设计实体的RTL级描述。这一阶段可以使用VHDL和Verilog HDL语言的输入工具编写代码。(5) RTL验证使用仿真工具或者其他RTL代码分析工具,验证RTL代码的质量和性能。该阶段可以使用System Verilog等验证语言和其他验证工具生成的testbench进行设计验证,确认设计是否符合设计规范。(6) 综合阶段使用综合工具将RTL代码生成描述实际电路的门级网表文件。(7) 门级验证对综合生成的门级网表进行验证。这一阶段通常会使用仿真、静态时序分析和形式验证等工具。图2.1 IC设计流程(8) 后端设计根据速度和面积的约束利用布局布线工具对综合产生的门级网表进行布局规划(Fl

11、oorplanning)、布局(Placement)、布线(Routing),生成生产用的版图。(9) 电路参数利用参数提取工具提取芯片中连线的寄生参数,从而获得门级的延时和时序信息。(10) 版图后验证根据后端设计取得的延时信息,再次验证设计是否能够实现所有的功能和性能指标。(11) 在特定的芯片工艺生产线上制造芯片。(12) 测试阶段主要对制造好的芯片进行测试,检测生产中产生的缺陷和问题。IC设计流程一般分为前端设计(逻辑设计)和后端设计(物理设计)。从数模角度分,IC设计又分为数字设计和模拟设计。本次毕业设计的工作为数字前端设计。本次设计采用的开发语言为Verilog 硬件描述语言,仿真

12、工具和验证工具为ModelSim ALTERA 6.4,综合和时序分析工具为Quartus II 9.0。2.2 开发语言硬件描述语言是一种用形式化方法来描述数字电路和系统的语言。数字电路系统的设计者利用这种语言可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后利用EDA工具逐层仿真验证,再把其中需要变为具体物理电路的模块组合经由自动综合工具转换到门级电路网表。接下去再用专用集成电路(ASIC)或现场可编程门阵列(FPGA)自动布局布线工具把网表转换为具体电路布线结构的实现。在制成物理器件之前,还可以用Verilog的门级模型来代替具体基

13、本元件。因其逻辑功能和延时特性与真实的物理元件完全一致,所以在仿真工具的支持下能验证复杂数字系统物理结构的正确性,使投片的成功率达到100%。目前,这种称为高层次设计的方法已被广泛采用。据统计,目前在美国约有90%以上的ASIC和FPGA已采用Verilog硬件描述语言方法进行设计。Verilog HDL6 是硬件描述语言的一种,用于数字电子系统设计。该语言允许设计者进行各种级别的逻辑设计,进行数字逻辑系统的仿真验证、时序分析、逻辑综合。Verilog HDL语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。由于Veril

14、og HDL从C编程语言中继承了多种操作符和结构,Verilog HDL语言的核心子集非常易于学习和使用,对大多数建模应用来说核心子集已经足够。模块是Verilog HDL的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述;设计的数据流行为使用连续赋值语句进行描述;时序行为使用过程结构进行描述。一个模块可以在另一个模块中使用。模块之间可以通过使用线网来相互连接。在模块中,结构和行为可以自由混合。也就是说,模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及always语句和initial语句的混合

15、。一个模块的基本语法如下:modulemodule_name( port_list );Declarations: /说明部分reg, wire, parameter,input, output, inout,function, task,Statements: /语句部分initialstatementalwaysstatementmoduleinstantiationgateinstantiationUDPinstantiationcontinuousassignmentendmodule说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句部分定义设计的功能和结构。说明部分和语

16、句部分可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性,最好将所有的说明部分放在语句前。2.3 设计工具2.3.1 QuartusII开发环境Quartus II开发环境7是一个基于Altera器件进行逻辑电路设计的集成开发环境。Quartus II开发和设计的基本流程参见图2.2。根据图2.2的Quartus II设计流程,接下来简要介绍本次设计使用的Quartus II基本功能模块。在Quartus II软件系统中,一个“工程”(project)包含了整套的设计文件、软件资源文件、仿真文件、系统设置和具体设计的层次信

17、息等。开发者可以使用文本编辑器、模块编辑器、参数化模块资源库(LPM)创建设计文件和其他EDA工具创建的设计文件作为Quartus II设计源文件。图2.2 Quartus II设计流程使用Complier的“Quartus II Analysis & Synthesis”模块分析、综合设计文件并建立工程数据库。“Analysis & Synthesis”使用Quartus II内置的综合工具综合Verilog设计文件(.v)或VHDL设计文件(.vhd),它完全支持Verilog HDL和VHDL语言,并提供控制综合过程的选项。也可以使用其他EDA综合工具综合VHDL或者Verilog HD

18、L设计文件,生成可以与Quartus II软件配合使用的EDIF网表文件(.edf),然后再用到Quartus II软件工具中。Quartus II Fitter也称为PowerFitTM Fitter,用于完成布局布线,在Quartus II软件中也成为“布局布线”。Fitter使用“Analysis & Synthesis”建立的数据库,将工程中的逻辑需求和时序需求与器件的可用资源相匹配。它将每个逻辑功能分配到最恰当的逻辑单元位置以满足布线和时序的要求。Quartus II Timing Analyzer允许用户分析设计中所有逻辑的性能,并协助引导Fitter满足设计中的时序要求。默认情况

19、下,Timing Analyzer作为全编译的一部分自动执行,它分析和报告时序信息,例如建立时间tSU、保持时间tH、时钟至输出延时tCO、引脚到引脚延时tPD、最大时钟频率fmax以及设计的其他时序特性。使用Timing Analyzer生成的信息分析、调试和验证设计的时序性能,也可以进行最快时序模式的时序分析,报告最佳情形下的时序情况。Quartus II PowerPlay功率分析工具提供了一个界面,用于在设计的各个阶段估算静态和动态功耗。PowerPlay功率分析器完成功率分析,并生成一个高亮的包含按类型和实体分割、功耗等信息的功率报告。本次毕业设计主要使用以上这些基本的功能模块。2.

20、3.2 ModelSim仿真工具ModelSim仿真工具8是Mentor公司的子公司Model Tech开发的软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。主要特点: RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真; 单内核VHDL和Verilog混合仿真; 源代码模版和助手,项目管理; 集成了性能分析、波形比较、

21、代码覆盖、数据流ChaseX、Signal Spy、虚拟对象Virtual Object、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能; C和Tcl/Tk接口,C调试; 对SystemC的直接支持,和HDL任意混合; 支持SystemVerilog的设计功能; 对系统级描述语言的最全面支持,SystemVerilog,SystemC,PSL; ASIC Sign off。 可以单独或同时进行行为(behavioral)、RTL级、和门级(gate-level)的代码。ModelSim的基本仿真流程如下:(1) 创建一个工作库。在ModelSim中,所

22、有以VHDL/Verilog或者混合编码形式存在的设计必须被编译到一个库中。ModelSim默认创建一个名称为“work”的工作库,启动一个新仿真。名称为“work”的库是编译器编译设计单元默认的目标单元。(2) 编译设计文件。在工程库的创建完成后,将各个设计单元编译到其内。ModelSim库格式文件对所有的可支持平台都适用,所以在不同的平台上进行仿真时,可以直接适用该库来仿真设计,不必重新编译设计。(3) 运行仿真。设计编译完成后,本文可以针对顶层模块、结构、实体加载仿真器。当设计装载成功,仿真时间设置为0位置时,本文可以输入一个运行命令开始仿真。(4) 调试结果。如果仿真结构不是预期的,则

23、可以使用ModelSim的调试工具跟踪问题的原因。例如波形窗口、数据流窗口等。ModelSim工程仿真流程一般包括以下步骤:(1) 创建一个工程,即创建.mpf文件和工作库。(2) 向工程添加设计单元,包括设计源文件、ModelSim管理文件夹、仿真环境的设置;可以将这些文件拷贝到工程目录,也可以简单地将它们映射到本地。(3) 编译文件。进行语法检测并建立ModelSim仿真伪机器码。(4) 仿真设计。对指定的设计单元进行仿真。本次设计的仿真工作采用工程仿真流程完成。ModelSim仿真工具提供波形窗口和数据流窗口来对设计进行调试。波形窗口可以观察设计中每一个信号的变化情况。数据流窗口可以使设

24、计人员观测到设计的物理连接、跟踪事件的传递和确定“非期望输出”的原因。在熟悉硬件描述语言和基本的开发工具后,后续章节首先对本次设计中使用的理论知识进行研究。第三章 LC-3指令系统结构指令系统结构(Instruction Set Architecture,以下简称ISA)对计算机整个系统是有着重要意义的2。它是一个抽象的硬件与软件之间的分界面,包含着编写一个机器语言程序能正确运行的所有信息,如存储器结构、指令集、寄存器组、I/O等等。我们把这些信息细化分为十点:计算机结构类型、存储器结构、寄存器组、指令格式、操作码、数据类型、寻址方式、条件码、自陷和中断异常、I/O设备的管理。LC-3 ISA

25、包含了这些全部信息。3.1存储器结构LC-3的存储器的地址是16-bit 宽的二进制数,它的寻址空间是216 即64K大小。一个存储单元存储一个字(16 bits),也就我们说的寻址能力。在LC-3中是按字编址,没有采用按字节编址,也就不涉及字节顺序存储的问题。下面我们看一下存储器的划分,如图3.1:图3.1 LC-3存储器映射图图3.1是对LC-3存储器的一个映射图,它的地址从十六进制x0000到xFFFF,它被划分成6块区域,不同的存储区域定义了不同的用法。x0000到x00FF用于存储自陷向量表;x0100到x01FF用于存储中断异常向量表,其中x0100到x017F是异常向量表,x01

26、80到x01FF是中断向量表;x0200到x2FFF是操作系统区域和系统栈空间。x3000到xFDFF是留给用户使用,用于存储用户程序。xFE00到xFFFF是设备寄存器地址,用于提供给外部设备,如键盘和显示器。存储器部分还有两个寄存器:存储器地址寄存器(Memory Address Register,MAR)和存储器数据寄存器(Memory Data Register,MDR)。访问存储器是通过这两个寄存器完成的。 3.2 寄存器组本节只写了汇编程序员能够看到的寄存器组,共四个,每个寄存器的大小均是16-bit大小。分别是通用寄存器GPR,程序计数器PC,指令寄存器IR,程序状态寄存器PSR

27、;l General purpose register(R0R7)l PCl Instruction registerl Processer status register (PSR)通用寄存器共八个,R0R7对应编号是000111(二进制数),程序计数器内容是下一条执行指令所在的地址,指令寄存器用于暂存从存储器中取出的指令,程序状态寄存器包含了当前执行进程的状态信息,其中程序状态寄存器的7个比特位已做了定义,包含三个字段信息,如图3.2:图3.2 处理器状态寄存器bit2:0是条件码字段(Condition code),三个比特位分别是负数(N)、零(Z)、正数(P),用来进行条件分支判断。

28、bit10:8是优先级字段(Priority level),在计算机的系统中我们把要做的所有事划分成几个级别,优先级高的先执行,优先级低的后执行。在LC-3中定义了八个优先级,分别是PL0PL7,PL7最高,PL0最低。目前只使用了两个优先级,PL0和PL4,PL0是当前用户执行的优先级,PL4是键盘中断的优先级。bit15是特权模式(Privilege mode)位,LC-3计算机执行时有两个模式,bit15等于0时,叫做管理员模式,bit15等于1时,叫做用户模式。在LC-3的底层实现中用到的寄存器会在后续章节中介绍。3.3 指令集LC-3 ISA是一种精简指令系统结构,定义了一组丰富而简

29、洁的指令集,能够进行编写适度复杂的汇编程序。指令格式通过它的各个构成部分来定义指令的比特位划分。一条指令分为两个部分:一个操作码和隐式或显式的、零个或多个操作数。一个ISA的指令集定义了:操作码的集合、数据类型和寻址方式。3.3.1 操作码指令的长度是设计中最基本的问题,它与存储器的结构、总线结构、CPU复杂程度和CPU速度等相互影响。而指令中操作码的的宽度决定了可定义指令的数量。LC-3的每条指令(16-bit)包含4-bit操作码(bit15:12)以及12位的相关信息。图3.3汇总了LC-3 15种操作码以及其余比特位的使用说明。第16个4-bit操作码未做定义。表3-1中的注释,将有助

30、于更好的理解对LC-3指令集(图3.3)的理解。表3-1 字符注释注释含义DR目的寄存器(Destination Register)。代表R0R7之一,指令中用于存放结果的寄存器SR,SR1,SR2源目的寄存器。R0R7Imm55-bit立即数。当用做立即数时,通常对应指令中的bit4:0。二的补码表示,范围-1615,使用之前要做16位的符号扩展表3-1 字符注释(续)BaseR基址寄存器(Base Register)通常基址寻址寄存器和1个6-bit偏移相加,产生Base+offset地址offset66-bit数值,指令的bit5:0;用于Base+offset寻址方式。bit5:0本看

31、成是一个6-bit的有符号整数(二的补码表示),在计算Base+offset时,要做16位符号扩展PC程序计数器(Program Count)。16位寄存器,指向下一个待获取指令的地址。例如,如果当前指令所在地址是A,则PC的内容是A+1PCoffset99-bit数值,指令的bit8:0;用于PC+offset寻址方式。bit8:0被看做是一个9-bit的有符号的二的补码表示的数(范围-256255),符号扩展至16-bit之后,与PC相加生成地址PCoffset1111-bit数值,指令的bit10:0;用于JSR指令计算子程序的入口地址。bit10:0 被看做是一个11-bit的有符号的

32、二的补码表示的数(范围-10241023),符号扩展至16-bit之后,与PC相加生成地址Trapvect88-bit,指令的bit7:0。用于TRAP指令确定trap服务程序的入口地址。bit7:0被看做无符号整数,零扩展至16位地址值(0255).该地址存储器单元中存放了trap服务程序的入口地址。此外,LC-3的指令集相较于CISC风格计算机的不固定指令格式、长度,更易于将代码指令拆分,使之易于多周期处理器数据通路的设计。3.3.2数据类型LC-3只支持一种数据类型有符号整数。在LC-3中,操作数采用二的补码方式表示。3.3.3寻址方式寻址方式是指定操作数位置或来源的一种机制。操作数可能

33、存在三个地方;存储器、寄存器、或指令的一部分。操作数在寄存器中,我们称操作数为寄存器操作数;如果操作数是指令的一部分,我们称它为“立即数”操作数。LC-3支持五种寻址方式:1.立即数寻址(两种寻址过程),其一,指令的操作数是指令中的一部分,该操作数所在字段如图3.4(1)中所示立即数字段;另一种情况,数由程序计数器和偏移量的和图3.3 LC-3指令集全部指令格式(注:+表示该指令将修改条件码)作为操作数,如图3.4(2)所示。(1)(2)图3.4 立即数寻址2.寄存器寻址,指令的操作数是寄存器中的内容,即指令字段所指定的寄存器中的内容如图3.5中指令第一个源操作数在SR1字段指定的寄存器中。图

34、3.5 寄存器寻址3.PC相对寻址(PC-relative),寻址的地址是程序计数器(PC)加指令中偏移地址的结果,偏移地址是图3.6中的PCoffset字段。寻址过程如图3.6。图3.6 PC相对寻址4.基址偏移寻址(Base+offset),地址是指令中的基址寄存器的地址和偏移地址的和,寻址过程如图3.7所示。图3.7 基址偏移寻址5.间接寻址(indirect),程序计数器(PC)与指令中偏移地址的和为存储器的地址,该地址存储单元中的内容作为寻址的地址,寻址过程如图3.8所示。图3.8 间接寻址在LC-3的指令集中大致分为三类功能指令:运算指令:ADD、AND、NOT数据传送指令:LD、

35、LDI、LDR、LEA、ST、STI、STR控制流指令:BR、JSR、JSRR、JMP、RET、TRAP、RTI在运算指令中只用到了两种寻址方式:寄存器寻址和立即数寻址。NOT指令是寄存器指令。ADD指令,有两种寻址方式,如图3.3所示:bit5等于0时,ADD 指令是寄存器寻址,寻址过程如图3.4;bit5等于1时,ADD指令是立即数寻址,寻址过程如图3.4所示。AND指令也是这样。在数据传送类指令中,指令的格式如下:图3-9 数据传送类指令格式数据传送指令需要两个操作:源操作数和目的操作数。两个操作数之一必然是寄存器,另一个则是存储器或输入输出(I/O)设备。bit11:9标识了操作数之一

36、,寄存器操作数。如果是load类型指令,则该字段代表DR(Destination Register,目的寄存器);如果是store类指令,则该字段代表SR(Source Register,源寄存器)。bit8:0是地址生成位。这意味着基于bit8:0的信息,可以计算出第二个操作数的16位地址。在LC-3中,有4种寻址方式(即图3.4(2),图3.6,图3.7,图3.8)。LD和ST采用PC相对寻址方式,LDI和STI采用间接寻址方式,LDR和STR采用的是基址偏移寻址方式。LEA采用立即数寻址方式。控制流指令是能够改变指令顺序执行的指令。他们的共同点是生成下一条指令的目标地址,而生成目标地址的

37、方法就是寻址方式。BR采用的是PC相对寻址方式,JMP和RET采用的是寄存器寻址方式,JSR采用的是PC相对寻址方式,JSRR采用的是寄存器寻址,TRAP指令是间接寻址方式。(寻址过程参考图3.43.8) 3.4 自陷、异常和中断LC-3最具特色的地方就是自陷、异常和中断机制,这是我们在其他教科书上很难理解的内容。3.4.1自陷自陷就是我们在操作系统中说的系统调用(system call)。在自陷机制中包括以下内容:(1)服务程序:由操作系统提供,必须在LC-3处于管理员模式下运行。这些服务程序是操作系统的组成部分,存储于固定的存储器地址单元中。LC-3 最多可以实现256个服务程序。目前LC

38、-3只实现了六个自陷服务程序。如表3-2所示。(2)自陷向量表:包含自陷程序的起始地址。在LC-3中位于内存x0000x00FF,图3-10所示是LC-3的自陷向量表,其中给出了六个自陷服务程序的起始地址。(3)自陷指令(TRAP):用户程序如果调用操作系统执行某个特定的服务程序,并在执行结束后返回用户程序,则可以用TRAP指令。TRAP指令就是激活操作系统服务调用的钥匙。(4)返回:返回到用户程序,操作系统提供返回的机制。表3-2 自陷服务程序内存起始地址汇编程序名描述x0400GETC从键盘读入一个字符。该字符不在屏幕上回显,该字符的ASCII码值被拷入R0(R0高8位被清零)x0430O

39、UT将R07:0的字符输出在屏幕上显示x0450PUTS向屏幕写一个字符串,所有字符在存储器中存放是连续的,且每个内存单元一个字符。起始地址由R0指定,结束判断由当前内存单元是否为x0000确定。x04A0IN先显示提示在屏幕上,然后等待键盘输入一个字符。读入字符回显在屏幕上,读入的ASCII码装入R0,R0高8位清零x04E0PUTSP向屏幕写一个字符串,所有字符在存储器中存放是连续的,但每个内存单元存放两个字符。输出显示时,先将bit7:0输出,然后再将bit15:8输出。起始地址由R0指定,结束判断由当前内存单元是否为x0000确定。xFD70HALT停止执行,并在屏幕上输出信息图3-1

40、0 自陷向量表3.4.2 中断和异常处理在处理器运行时,外部事件能够打断当前正在运行的程序,我们称之为中断(interrupt)。同样,运行程序本身也可能发生异常事件,打断了处理器的运行,即计算机内部事件,我们称之为异常。LC-3采用的机制是向量表,这种机制类似于自陷向量表。如图3.1,中断向量表占用存储器空间范围是x0180x01FF,异常向量表是x0100x017F。中断和异常一共256个表项,每个表项是中断或异常服务程序的起始地址。目前,LC-3只实现了一种中断处理,I/O中断的向量机制。产生中断的I/O设备是键盘。它的优先级是PL4,对应的中断矢量是x80。在介绍中断处理机制之前,要理

41、解两个概念:系统栈空间和用户站空间。系统栈空间:在管理员模式下(PSR15=0),通过系统栈指针访问该存储器区域,系统栈指针(SSP)寄存器内容载入R6。用户栈空间:在用户模式下(PSR15=1),该空间是由用户指针访问,用户栈指针(USP)寄存器内容载入R6。I/O中断的处理机制:处理器检测是否有中断信号,如果产生中断信号,进行中断处理进程; (1)处理器硬件自动将特权模式设置为管理员模式(PSR15=0);(2)同时,将优先级设置为PL4,即该设备对应的中断处理优先级(PSR10:8=100);(3)将系统栈指针寄存器内容装入R6寄存器;(4)将被中断的程序的PSR和PC压入系统栈中;(5

42、)键盘设备提供一个8bit的向量,即x80;(6)处理器将该向量扩展成为x0180,即该中断向量表项所在的位置;(7)将x0180地址存储器单元中的内容装入PC中,即开始键盘中断服务程序;(8)中断服务程序的最后一条指令执行RTI;(9)系统栈顶部两个单元内容弹出,恢复原先PC和PSR的内容;(10)根据当前PSR15内容,R6装入合适的栈指针。LC-3计算机系统定义了两种异常情况,即“特权模式冲突”和“非法指令”。特权模式冲突的异常情况,是在用户模式下遇到RTI指令;而非法指令的异常情况,是处理器遇到操作码为1101的指令。(1)处理器将特权模式位设置成管理员模式(PSR15=0);(2)将

43、系统栈指针寄存器的内容装入到R6中;(3)将发生异常时的PSR和PC的内容压入系统栈中;(4)异常处理模块提供它的8-bit的向量。如果是特权模式冲突,则提供的向量是x00;如果是非法指令,提供的向量是x01;(5)处理器将该向量扩展为x0100或x0101,即对应的异常向量表项的地址;(6)将x0100或x0101地址存储器单元的内容装入PC,开始执行异常服务程序。此外,异常服务程序的处理细节取决于不同的异常类型,和操作系统的处理风格。第四章 数据通路设计与实现本次设计参考LC-3 ISA,将LC-3多周期数据通路以Verilog HDL语言来描述。首先,对LC-3多周期处理器进行模块划分进

44、行简介,然后分析构建数据通路的基本功能模块,把功能相近的单元归总成一类独立的部件,这样就能将整个多周期数据通路归类为多个不同类型的部件,在逐一用Verilog语言进行描述。其次,通过模块复用,构建功能模块。接着对LC-3的自陷、中断和异常机制功能模块进行解析。最后将各个部件进行实例化并结合成为一个完整的多周期数据通路。4.1 LC-3多周期处理器结构模块LC-3的体系结构主要由控制单元(Control)、数据通路(Data Path)、存储器和I/O组成(Memory,I/O),如图4.1所示。本次设计由我和商家玮团队合作完成,将LC-3分成三个模块进行设计实现,然后通过综合仿真,最终完成设计

45、。商家玮负责控制通路存储器与I/O部分的设计与实现,我负责进行数据通路部分的实现与本次设计的综合仿真测试。4.1 LC-3结构模块图4.2 数据通路分析数据通路是指在一个指令周期内,信息处理所涉及到的所有部件的总和,即那些处理信息的功能单元、寄存器、多路选择器、总线等。图4.2是LC-3是不带自陷、中断和异常机制的功能部件的指令执行的数据通路图,如图所示。图4.2 数据通路指令的处理过程是在控制单元的控制下,一步一步地完成的。我们称这个执行的步骤顺序为指令周期(instruction cycle)其中每一步称为一个阶段,每一个阶段又包含一个或多个时钟周期。一个指令周期包括六个阶段,即取指令(F

46、ECTH)、译码(DECODE)、地址计算(EVALUATE)、取操作数(FETCH OPERAND)、执行(EXECUTE)、存储结果(STORE RESULT)。(1)取指令阶段该阶段负责从存储器中读取下一条待执行的命令,并将其装入指令寄存器中(IR)。具体的操作描述如:将PC的内容装入MAR寄存器,然后PC+1;该地址对应单元的内容被装入MDR;控制通路发送信号,将MDR内容装入IR寄存器中。(2)指令译码该阶段将IR中指令进行指令译码,即:将指令的操作码发送给控制通路,译码产生相应的控制信号;操作数字段发送给寄存器组;立即数字段进行符号位扩展后传送给相应的部件。(3)地址计算如果指令执

47、行时,存在地址计算操作,则在此阶段完成。(4)取操作数该阶段负责读取指令需要的源操作数。如果操作数在存储器中,则执行三步操作:将之前地址计算阶段算出的地址值装入MAR寄存器中;将MAR地址对应的存储器单元的内容装入MDR;将MDR内容装入指令的目的寄存器中。(5)执行该阶段负责指令的执行操作,不同的操作码在该节拍的操作也不同。如ADD指令,在本阶段,执行加法操作。(6)存储结果此阶段是将执行阶段产生的结果,写入目的寄存器。4.3功能模块的分析与设计4.3.1寄存器的分析与设计在多周期数据通路中,IR、PC、MDR、MAR都是寄存器,虽然它们的功能与作用上各不相同,但是在Verilog HDL中

48、可用相同的语句对其进行描述,所以在这里将四个部件归为一个模块REGISTER模块。在构建数据通路时,只要这个部件是寄存器,就可以复用REGISTER模块,即可实现IR、PC、MDR、MAR等功能部件。下面介绍寄存器模块。在指令执行的过程中,指令执行是要分成多个阶段,多个时钟周期完成。每个时钟周期结束都会产生一个中间数据,因此寄存器用来暂存中间过程中的数据。寄存器需要一个数据输入端口DATAIN,用于将数据写进寄存器。同时需要一个控制写入信号LD_REG,需要一个时钟信号,用于触发作用。在下一个时钟周期开始,寄存器需要将暂存的数据输出,因此,还需要一个输出端口DATAOUT。寄存器模块如图4.3

49、所示,CLK、RESET、LD_REG均是1-bit,DATAIN和DATAOUT宽度相同,在实例化时,可通过参数(Parameter)设置比特位宽度。图4.3 寄存器IR、PC、MAR、MDR实例化如下:REGISTER #(16)IREG(clk,LD_IR,RESET,BUSDATA,IR);REGISTER #(16)PCREG(clk,LD_PC,RESET,PCS,PC);REGISTER #(16) MDR(clk,LD_MDR,RESET,MDRIN,MDROUT);REGISTER #(16) MAR(clk,LD_MAR,RESET,BUSDATA,ADDRESS);4.3

50、.2 ALU的分析与设计ALU部件具有两个数据输入端口A和B,一个数据输出端ALUOUT,一个ALUK控制信号,如图4.4所示。图4.4 ALU部件在LC-3中,ALU是指令执行时进行处理器内部运算的部件,共有四种运算:加运算(ADD指令),与运算(AND指令),非运算(NOT指令),输出A(ST类指令)。指令通过译码产生ALUK(2-bit)信号用来决定进行哪种操作,见表4-1。表4-1 ALUK编码表ALUK功能00ADD A加B01AND A与B10NOT A11PASS A4.3.3多路选择器的分析与设计在LC-3数据通路中,多路选择器在多处被用到,如图4.2。ALU部件的B数据的来源

51、有两处,一是寄存器组,另一是指令中符号位扩展后的立即数;还有MAR寄存器的数据有两个来源在数据通路中产生,一是自陷指令零扩展生成的自陷向量表项的地址,另一个来源是load 或store类指令通过地址计算生成的访问存储器的地址。这里都需要用一个两路选择器。此外,PC的来源、地址计算数据的来源等也是多个,这些地方都要用到多路选择器。多路选择器在本设计中,用到两种:两路选择器和四路选择器。两路选择器:如图4.5(1)所示,两个数据来源A和B,S是选择信号,C是输出信号。当S等于1时,C等于A;当S等于0时,C等于B。此实现的模块,通过实例化,实现在数据通路中起到不同的作用。两路选择器实例化部分代码如

52、下:MUX2 #(16)SR2MUX2(IMM5,SR2OUT,IR5,B);MUX2 #(16)MARMUX2(ADDERR,ZEXT8,MARMUX,MARMUX2OUT);MUX2#(16)ADDR1MUX2(SR1OUT,PC,ADDR1MUX,ADDR1);四路选择器:如图4.5(2)所示,四个数据要进行选择,分别为A、B、C、D,所以选择信号S则需要2-bit宽度,分别对应值为00,01,10,11。PC地址的选择需要用四路选择,地址来源分别是:PC自加1的下一条指令地址;地址计算生成的跳转地址;间接寻址模式中,存储器单元中存储的地址通过总线传递的。实例化代码如下:MUX4#(16

53、)ADDR2MUX4(16b0,OFF6,OFF9,OFF11,ADDR2MUX,ADDR2);MUX4#(16)PCMUX4(16b0,PCADD,BUSDATA,ADDERR,PCMUX,PCS);图4.5 多路选择器4.3.4 分支判断的实现前面章节介绍到LC-3在处理器状态寄存器(PSR)中有三个条件码(N、Z、P),均是1-bit。条件码是PSR系统块的一部分(见4.4节),是用于实现分支判断的关键所在,几乎所有的处理器均是利用条件码实现分支判断功能(MIPS处理器除外)。在LC-3执行程序指令时,处理器产生的数据写回寄存器,同时会根据产生数据的正负进行条件码置位。如果是正数,则P置

54、1;如果是负数,则N置1;如果是0,则Z置1。然后在执行分支指令时,N、Z、P与分支指令的bit11:9的三个比特位分别进行进行逻辑与运算,产生发生分支指令的信号BEN。分支判断最终实现如图4.6所示,BUSDATA就是处理器指令产生要写回的数据,BUSDATA2:0表示PSR2:0。PSR2:0也会对条件码置位是因为处理器在执行自陷、中断或异常结束时恢复PSR导致的结果。因此用了一个多路选择器MUX2进行控制修改条件码的来源。N、Z、P是三个1-bit寄存器,通过COMPCC逻辑运算部件与IR的11:9进行逻辑运算。最终产生BEN信号,反馈给控制通路部分。4.3.5 加法器等其他功能模块部件

55、LC-3数据通路的部件中还用到了加法器、符号位拓展、零拓展、三态门、总线等功能部件。在指令执行下一条指令时,加法部件数据通路中的PC进行自加1运算,以及进行地址计算时用到;指令周期的第二个阶段指令译码过程中,符号位拓展与零拓展为后续阶段运行进行的准备运算;三态门用于控制数据的输出,避免总线竞争;总线用于连接数据通路与存储器之间的数据传送。图4.6 分支判断实现逻辑结构图4.4 自陷、中断和异常的实现本文在第三章中介绍了自陷中断和异常运行机制的原理。根据其运行原理,分析其体系结构,构建功能模块。在已实现的数据通路基础上增加一个PC的操作,再构建三个模块即可实现自陷、中断和异常机制,即当前栈指针产

56、生器、PSR系统、向量控制器。4.4.1 当前栈指针产生器当前栈指针产生器是用来产生当前栈指针SP的部件,是实现自陷和中断异常系统的一个功能模块。根据LC-3的设计,当前栈指针产生器有一个输入(R6的内容,栈指针)和一个输出端口,由一个选择信号SPMUX和两个装载信号LD.SavedUSP和LD.SavedSSP控制,内部有两个寄存器SavedUSP和SavedSSP,两个运算部件“+1”和“-1”部件,对应PC和PSR压栈和弹栈的操作,如图4.7所示。图4.7 当前栈指针产生器 4.4.2 PSR系统在LC-3中,PSR系统模块可以细化分为三部分:特权模式块(Priv)、优先级模块(Prio

57、rity)、条件码块。特权模式块由一个1-bit寄存器Priv,一个多路选择器PSRMUX和一个三态门部件以及一些连线等组成,如图4.8所示。Set.Priv和总线数据的bit15是Priv的两个数据来源。在处理器发生自陷、中断或异常时,处理器会自动将Priv置成0,就是通过Set.Priv输入端。在自陷和中断处理完成时,会恢复被打断的程序的Priv位,即通过总线数据的bit15。Priv的输出端除了要反馈给控制部件外,还有一条线要输出到总线上。这是因为在发生自陷或中断事要将当前的PSR的内容保存到用户栈中,为了避免总线数据竞争我们用一个三态门控制。图4.8 Priv模块图优先级模块由一个当前

58、优先级寄存器,一个优先级比较模块,一个多路选择器以及一个三态门和一些连线组成,如图4.9 所示。当处理器运行发生中断时,系统会将中断事件的优先级别A与当前事件的优先级别B通过一个比较模块进行比较。如果A大于B则产生中断信号INT反馈给控制部件;然后将当前事件的优先级别通过三态门开关传送到总线上,经MDR保存到USP栈中;并将当前事件的优先级别修改为中断事件的优先级别。如果A小于B,则不发生中断,不进行任何操作。在中断结束后,被打断的事件的优先级别从栈中弹出,写回到Priority中。条件码模块,在介绍分支判断的实现时就介绍过了其模块结构(图4.6)。但是在计算机体系结构中,我们将这些特权模式位

59、、优先级和条件码等信息称为PSR,所以在中断发生时,是将PSR的所有信息保存到栈中,所以图4.6要额外加一条连接到总线并有三态门控制导通的连线。图4.9 Priority模块图 4.4.3 向量控制器LC-3中自陷、中断和异常是采用向量机制实现的,自然有一个产生向量的模块,我称它为向量控制器。自陷服务程序的起始地址向量是通过自陷指令产生,不在向量控制器中。向量控制器产生三个向量地址,即键盘中断向量、模式位异常向量、非法操作码异常向量。向量控制器包含一个两个8-bit的向量寄存器,其中一个固定值是x01,另一个是向量寄存器有三个来源,所以还需要一个多路选择器;向量控制器产生的向量地址通过总线写入

60、MAR中,则需要用三态门控制避免总线竞争。如图4.10所示:图4.10 向量控制器此外,在实现中断的过程中,需要保存当前的PC值,而PC寄存器中保存的都是当前地址的下一地址,所以需要一个PC减1的部件,将PC的地址送到总线上。综上所述,当前栈指针产生器、PSR系统和向量控制器以及一个PC减1的功能部件,添加到已实现的数据通路上,就实现了自陷、中断和异常的功能。4.5 数据通路总体实现LC-3的数据通路总图如图4.11所示。红色的部分就是能够实现自陷、中断和异常的功能模块;图中控制部件产生的数据和信号时用空心箭头标识,数据通路本身传递的数据用实心箭头标识。图4.11 数据通路总图本次设计在分析L

61、C-3的ISA的基础上,通过逐一分析每个功能部件的用途,明确每个模块的输入信号和输出信号,用Verilog HDL硬件描述语言编写代码模块,最终实例化成一个完整的数据通路。第五章 综合验证与性能分析综合和仿真测试是集成电路中一个非常重要的环节。本章首先介绍本次设计的综合结果,其次描述了验证方法以及仿真测试的基本过程,最后简单的量化分析LC-3处理器的整体性能。5.1 综合综合是利用综合工具根据基本单元库将硬件描述语言描述的电路转换为门级网表电路的过程。综合的过程一般包括:编译、优化和映射。编译将硬件描述语言描述的电路编译成对应的功能模块以及模块与模块的拓扑结构;优化根据设置的面积和时间约束,按

62、照一定的算法对编译的结构进行逻辑重组和优化;映射根据设置的时序和面积约束从基本单元库中选择符合条件的单元构成实际的门级网表。本文选择的基本单元库为FPGA(Field Programming Gate Array,现场可编程门阵列),使用Altera 公司的Quartus II 9.0 Compiler 完成设计的逻辑综合。综合使用的软硬件环境如表5-1所示。Quartus 提供三种不同的优化选项:Speed(速度)、Balanced(平衡)、Area(面积)。本次设计选择的优化选项是平衡。表5-1 综合的软硬件环境操作系统Microsoft Windows XP SP3CPUIntel(R)Core(TM)2 Duo T5800内存1.0 GB本次设计选择Cyclone II10系列器件EP2C5AF256A7。该器件采用1.2V,90nm工艺技术,提供8256个逻辑单元(LE),嵌入了1818位的乘法器、专用外部存储器接口电路、36个4Kbit ROM块、锁相环(PLL)和高速I/O接口等。Cyclone器件的可编程资源主要来自LAB(L

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!