开放性实验FPGA实现流水线式CPU文档-大连理工大学_第1页
开放性实验FPGA实现流水线式CPU文档-大连理工大学_第2页
开放性实验FPGA实现流水线式CPU文档-大连理工大学_第3页
开放性实验FPGA实现流水线式CPU文档-大连理工大学_第4页
开放性实验FPGA实现流水线式CPU文档-大连理工大学_第5页
已阅读5页,还剩11页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机系统开放实验(创新实验)大连理工大学计算机系统设计开放实验结课论文4位原型计算机的设计与实现 学 院: 软件学院 专 业: 软件工程(日语强化) 姓名与学号:班 级: 软日1101 完 成时间: 2013.12.25 大连理工大学Dalian University of Technology摘要我们之所以选择了这门计算机系统设计开放实验课,是因为感到在计算机组成原理的实验课上对FPGA的学习和理解都远远不够,同时也想通过自己设计计算机系统来加深对计算机系统的理解和认识。本次实验是基于TEC-XP实验计算机系统的,采用的是spartan-II型号的FPGA芯片,使用的是VHDL语言。在本篇

2、结课论文中分析了采用FPGA 芯片实现一个支持指令流水的实验计算机系统的方法,主要介绍各个模块的设计以及。在实际设计过程中,每实现一个模块都需要进行仿真验证,通过观察仿真波形来确定程序设计的正确性。,最终得到了一个完成了基本功能并实现了指令流水的4位原型计算机。目 录摘 要21 引言1.1 TEC-XP教学计算机系统.41.2 课程目标5 2 流水线CPU的实现2.1 指令集系统.62.2 变量的定义.72.3 指令的设计实现2.3.1 预处理82.3.2 指令集实现82.4 流水线的设计实现2.4.1 取指.132.4.2 译指.132.4.3 执行.132.4.4 流水实现.143 仿真3

3、.1 仿真流程143.2 仿真波形154 结论.15参考文献.16致 谢161 引言1.1 TEC-XP教学计算机系统TEC-XP是16位的教学实验系统,由清华大学科教仪器厂、清华大学计算机系联合研制。适用于本科、硕士研究生的计算机组成原理和计算机系统结构课程的教学实验。该系统有自己的指令系统和监控程序,能够与终端或PC机相连(可以通过键盘输入程序执行,结果可以通过终端或者显示器显示),可以进行联机操作和执行比较完整的程序。实验系统分成主要的两个部分:一部分采用模块化的结构(运算器、控制器、主存储器、I/O接口和中断)构成一台完整的模型计算机,支持组合逻辑控制器和微程序控制器两种控制器方案,两

4、种控制器紧凑合理,完成教学实验方便高效;另一部分采用先进的FPGA芯片,选择的是Xilinx 公司的SPARTAN-II 系列芯片(型号是XC2S200),20 万门容量,其内部有2352个CLB,14 个4Kb 的RAM 块,208 脚的PQFP 封装形式。用户可自行设计CPU(流水和CACHE)。系统的软硬件配置完整,技术资料齐全,支持的实验项目多、水平高,实验手段先进。主要技术指标:(1) 机器字长16位, 即运算器、主存、数据总线、地址总线均是16位。(2) 基本指令系统支持多种基本寻址方式。其中部分指令已实现, 用于设计监控程序和用户的常规汇编程序, 尚保留多条指令供用户自己实现。(

5、3) 主存最大寻址空间是18K字,可进行主存储器扩展实验。(4) 运算器由4片位片结构器件AM2901级联而成, 片间用串行进位方式传递进位信号。ALU实现8种算术与逻辑运算功能, 内部包括16个双端口读出、单端口写入的通用寄存器, 和一个能自行移位的乘商寄存器。设置C、Z、 V、S四个状态标志位。运算器实验可以有脱机和联机两种实验方式。(5) 控制器采用微程序和组合逻辑两种控制方案实现。组合逻辑控制器用的是LATTICE公司的CPLD的芯片。在做控制器实验时,用户可按基本指令的格式和流程扩展指令,编写程序使新老指令同时运行。(6) 主机上安装有一路INTEL8251串行接口,可直接接计算机终

6、端, 或接入一台PC机作为自己的仿真终端。另保留一路为用户扩展用,可完成串口初始化,双机通讯等实验。(7) 主机可完成三级中断实验和中断嵌套实验。(8) 实验箱有自己的监控程序(操作系统),支持多种实验方式(如:单步/连续,手动置指令/从内存读指令等),监控源码开放,用户可以修改。(9) 配有简单的逻辑笔电路,可以测量板上各个信号的电压。(10) 用作组合逻辑控制器的MACH芯片和实验箱上的XILINX的FPGA芯片也可用于实现各种时序电路和组合逻辑电路实验。(11) 实验箱上XILINX的FPGA芯片可以实现流水和非流水两种CPU方案,还可完成高速缓冲存储器(cache)的教学实验。(12)

7、 实验箱支持比较正规的汇编语言设计。(13) 实验箱配套指令级和微指令级的仿真软件。1.2 课程目标此次课程的目标,是以TEC-XP教学计算机系统的FPGA 部分为平台,设计开发出一套4位的计算机系统。要求是重新设计指令集,实现三级指令流水线,完成预存指令的流水操作,包括取指、译指和执行,通知设计中还要包括4位寄存器、内存以及对立即数的操作(包括4位二进制立即数与十进制立即数之间的转换)。总体来说,本次课程的目的就是借助计算机组成原理等课的基础,在老师的指导下,通过组内成员的讨论研究,独立地设计出一个基于TEC-XP教学计算机系统的全新计算机系统。2 流水线CPU的实现2.1 指令集系统我们所

8、实现的是16位计算机,下面对其指令格式做具体说明:1514131211109876543210UndefinedFlag Instruction Data1 Data2高三位(Undefined),也就是15到13位,未进行定义,用于以后的扩展,第12位(Flag),是标志位,0标示第二操作数为立即数,1标示第二操作数为寄存器第11位到第8位,指令位,具体如下注1:操作码指令功能0000nop 空指令0001add Rd,#n/Rs加法指令0010sub Rd,#n/Rs减法指令0011mul Rd,Rs (Rd,Rs)-Rd*Rs乘法指令0100div Rd,Rs (RdRd/Rs),RsR

9、d%Rs除法指令0101and Rd,#n/Rs与操作指令0110or Rd,#n/Rs或操作指令0111not Rd,#n/Rs非操作指令1000xor Rd,#n/Rs异或操作指令1001ldr Rd,#n/Rs 加载指令1010str Rd,#n/Rs 存储指令1011asl Rd,#n/Rs算数左移1100asr Rd,#n/Rs 算数右移1111mov Rd,#n/Rs转移指令注1:所有指令(除空指令)的第一操作数必须是寄存器。注2:乘法与除法运算第二操作数必须是寄存器。注3:理论上指令0000,指令1101与指令1110均为空指令,但考虑到以后的扩展,便把0000设为空指令,而另外

10、两个作为以后的拓展使用。2.2 变量的定义Instruct /指令Rnum /寄存器,num表示寄存器编号Memory /内存C /进位标志位(加法进位或减法借位时C=1.否则C=0)TPort /中间指令寄存器Ins /指令类别Data1 /第一操作数寄存器RdData2 /第二操作数(立即数或寄存器)Flag /标志位,标志第二操作数(0-立即数,1-寄存器)Num /指令计数器AllNum /总指令数量D /把Data1转变为整形S /把Data2转变为整形temp /加减运算中间变量c0,c1,c2,c3 /乘法运算中间变量tempx /乘法运算结果变量3级流水线:TPort(0) /

11、流水线中前一条指令TPort(1) /流水线中当前指令Ins(1)/当前指令类别部分Data1(1)/当前指令第一操作数Data2(1)/当前指令第二操作数Flag(1)/当前指令标志位Ins(0)/前一条指令类别部分Data1(0)/前一条指令第一操作数Data2(0)/前一条指令第二操作数Flag(0)/前一条指令标志位2.3 指令的设计实现2.3.1预处理在指令的结构设计部分我们提到过Flag用来标记参与运算的指令中的74位和30位是立即数(0)还是寄存器(1)。如果参与运算的是寄存器的时候,考虑的将在计算过程中多处用到寄存器的标号,且寄存器标号为十进制数字,所以我们在译指阶段编写了两段

12、语句将Rd,Rs的4位二进制数转换成十进制数字,分别存储到D,S中。由于Rd默认只使用寄存器,所以将Rnum(d)赋值给Data1。Rs使用时要先判断是寄存器还是操作数。当Flag为1时代表使用的是寄存器,这时要将Rnum(s)赋值给Data2;当Flag为0时代表使用的是操作数,那么就保持Data2为ins(3 downto 0)不变。2.3.2指令集实现1.MOV指令MOV指令的指令格式为:MOV Rd , operand2其中operand2既可以为立即数也可以为寄存器指令功能:将第二操作数operand2表示的数据传送到目标寄存器Rd中实现方式:Rnum(D)=Data2(0);实现原

13、理:将Data2中经过判断是立即数还是寄存器的数据赋给Rnum(D),完成传送操作2.ADD指令ADD指令的指令格式为:ADD Rd , operand2其中operand2既可以为立即数也可以为寄存器指令功能:将operand2中的数值与Rd的值相加,并将结果传送到目标寄存器Rd实现方式:temp= (0&Data1(0) + (0&Data2(0); Rnum(D) = temp(3 downto 0); C = temp(4);实现原理:在两个四位的二进制运算数前添加一位空白位,构造两个五位二进制数,再将两个运算数相加,由于原来的数据只有四位,所以相加的结果不会产生超过五位的数据,两个五

14、位数的运算结果的低四位作为加法的结果存回Rd寄存器,最高位作为进位位存放在进/借位标识变量C中。3.SUB指令SUB指令的指令格式为:SUB Rd , operand2其中operand2既可以为立即数也可以为寄存器指令功能:从Rd的值中减去operand2中的数值,并将结果传送到目标寄存器Rd实现方式:temp= (0&Data1(0) - (0&Data2(0); Rnum(D) = temp(3 downto 0); C = temp(4);实现原理:在两个四位的二进制运算数前添加一位空白位,构造两个五位二进制数,再将两个运算数相减,由于原来的数据只有四位,所以相减的结果不会产生超过五位

15、的数据,两个五位数的运算结果的低四位作为加法的结果存回Rd寄存器,最高位作为借位位存放在进/借位标识变量C中。4.MUL指令MUL指令的指令格式为:SUB Rd , Rs指令功能:将Rd的值与Rs的值做乘法运算后将结果的高四位存放到Rd,低四位存放到Rs实现方式:IF(Data1(0)(0)=0)THEN c0=0000; ELSE c0=Data2(0); end if; IF(Data1(0)(1)=0)THEN c1=0000; ELSE c1=Data2(0); end if; IF(Data1(0)(2)=0)THEN c2=0000; ELSE c2=Data2(0); end i

16、f; IF(Data1(0)(3)=0)THEN c3=0000; ELSE c3=Data2(0); end if; tempx = (0000&c0) + (000&c1&0) + (00&c2&00) + (0&c3&000); Rnum(D)=tempx(7 downto 4); Rnum(S)=tempx(3 downto 0);实现原理:参考乘法的运算规则以Data1为乘数,Data2为被乘数。首先Data1按位与Data2相乘,预先创建4个信号量c0,c1,c2,c3用来存放Data1中每一位与Data2相乘后的结果,其实现方式为上方四个连续的if语句;然后将四个乘法结果分别按照

17、对应乘数所用位的高低,拼接成4个八位的二进制数,再进行相加,存放到临时存储变量tempx中,最后将tempx的高四位赋值给Rd,低四位赋值给Rs,完成传送操作。5.DIV指令DIV指令的指令格式为:DIV Rd , Rs指令功能:将Rd的值与Rs的值做除法运算后,将结果的商存放到Rd,余数存放到Rs实现方式:c0Data2(0) loop Data1(0)= Data1(0) - Data2(0); c0= c0 + 0001; end loop; Rnum(D)=c0; Rnum(S)=Data1(0);实现原理:依据除法的定义,采取循环减法的方式,用被除数去循环的减掉除数,直至被除数剩余的

18、值小于除数,并且每次进行减法运算时都对统计减法次数的变量c0加一,这样当结束循环时,统计的减法次数即为商,被减数剩余的值即为余数,最后将c0赋给Rd,Data1的剩余值赋给Rs,完成传送操作。6.AND指令AND指令的指令格式为:AND Rd , operand2其中operand2既可以为立即数也可以为寄存器指令功能:将Rd的值与operand2中的值按位做逻辑与运算,并将结果传送到目标寄存器Rd实现方式:Data1(0)= Data1(0) and Data2(0); Rnum(D) = Data1(0);实现原理:Data1与Data2两个数据按位做与操作,结果赋给Data1,再将Dat

19、a1中数据赋给Rnum(D),完成传送操作。7.OR指令OR指令的指令格式为:OR Rd , operand2其中operand2既可以为立即数也可以为寄存器指令功能:将Rd的值与operand2中的值按位做逻辑或运算,并将结果传送到目标寄存器Rd实现方式:Data1(0)= Data1(0) or Data2(0); Rnum(D) = Data1(0);实现原理:Data1与Data2两个数据按位做或操作,结果赋给Data1,再将Data1中数据赋给Rnum(D),完成传送操作。8.NOT指令NOT指令的指令格式为:NOT Rd , operand2其中operand2既可以为立即数也可以

20、为寄存器指令功能:将operand2中的值按位取反,并将结果传送到目标寄存器Rd实现方式:Data1(0)= not(Data2(0); Rnum(D) = Data1(0);实现原理:Data2的数据做按位取反操作,结果赋给Data1,再将Data1中数据赋给Rnum(D),完成传送操作。9.XOR指令XOR指令的指令格式为:XOR Rd , operand2其中operand2既可以为立即数也可以为寄存器指令功能:将Rd的值与operand2中的值按位做逻辑异或运算,并将结果传送到目标寄存器Rd实现方式:Data1(0)= Data1(0) xor Data2(0); Rnum(D) S

21、S S S S S S S S S S S S S S S=15; END CASE;Rnum(D) S S S S S S S S S S S S S S S S=15; END CASE;Memory(S)=Rnum(D);实现原理:将Data2中的4为二进制数转换为10进制数后存放在变量S中,将Rd中的值存进内存中,完成写入操作。12.ASL指令ASL指令的指令格式为:ASL Rd , operand2其中operand2既可以为立即数也可以为寄存器指令功能:将operand2中的值进行算数左移一位,并将结果传送到目标寄存器Rd实现方式:Data1(0) = (Data2(0)(2 do

22、wnto 0)&0); Rnum(D) = Data1(0);实现原理:将Data2中数据的低三位与0相拼接,拼接结果赋给Data1,再将Data1中数据赋给Rnum(D),完成传送操作。13.ASR指令ASR指令的指令格式为:ASR Rd , operand2其中operand2既可以为立即数也可以为寄存器指令功能:将operand2中的值进行算数右移一位,并将结果传送到目标寄存器Rd实现方式:Data1(0) = (Data(0)(3)&Data2(0)(3 downto 1); Rnum(D) = Data1(0);实现原理:将Data2中数据的最高位与高三位相拼接,拼接结果赋给Data

23、1,再将Data1中数据赋给Rnum(D),完成传送操作。2.4 流水线的设计实现2.4.1 取指从预存指令内存数组中取出下一条指令Instruct(Num)放入指令寄存器TPort(1)中。2.4.2 译指将指令寄存器中的16位指令TPort(0)分解提取出操作码和操作数等数据,放在中间寄存器Ins(1)、Data1(1)、Data2(1)、Flag(1)中,从而完成对指令的翻译。2.4.3 执行根据中间寄存器Ins(0)、Data1(0)、Data2(0)、Flag(0)执行指令。2.4.4流水实现由2.4.1、2.4.2、2.4.3可看出,已一个上升沿到下一个上升沿为一个周期,每个周期内

24、分别执行3个操作,取指、译指、执行,其中通过以数组实现的二维两行寄存器来完成取指、译指、执行的分别是前后3条指令,即实现了三级指令流水。3 仿真3.1 仿真流程在实现了流水线CPU后,实际上可能任何一个子模块都需要仿真。笔者选择ISE自带的仿真器进行仿真。使用起来也很方便。首先需要理解什么是仿真,所谓仿真就是模拟实际的条件。一个真实的CPU在运行时需要哪些条件,仿真要做的事就是提供那些条件,让CPU看起来就像是在真实的环境中运行。而它需要的条件已经写在CPU的实体部分了,该实体部分所有的输入信号都是需要的条件。显然需要一个时钟,一个复位信号。除此之外还需要两个存储器的地址和数据总线,还有控制信号。下面说说仿真的流程,大致可以分成如下三步:第一步:调整模式,因为在设计CPU的时候,当前处在Synthesis/Implementation模式,如果转为仿真,需要选择Behavioral Simulation模式。调整的地方是在ISE左上角Sources for中选择,如图2.2所示:图2.2 调整模式第二步:创建仿真文件,也就是提供真实环境中的条件,这和平

温馨提示

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

评论

0/150

提交评论