多级流水CPU设计单片机课程设计_第1页
多级流水CPU设计单片机课程设计_第2页
多级流水CPU设计单片机课程设计_第3页
多级流水CPU设计单片机课程设计_第4页
多级流水CPU设计单片机课程设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、 (指导教师用表)学 生 姓 名指 导 教 师论文(设计)题目多级流水 cpu 设计主要研究(设计)内容灵活运用所学到的基础知识和主要专业知识,设计、制作、调试最终完成多级流水 cpu 的设计研究方法根据所学基础知识和主要专业知识,设计多级流水 cpu,使用vhdl 语言。开发平台是fpga-cpu 设计平台,主要开发工具:quartus7.0,debugcontroller主要任务及目标1. 设计出 cpu 实现多级流水 2. 完成从系统级设计到代码实现以及硬件上调试3. 完成学年论文主要参考文献1 (美)亨尼西, (美)帕特森计算机体系结构:量化研究方法(第 3版)机械工业出版社,2003

2、2 汤志忠,杨春武.开放式实验 cpu 设计.北京:清华大学出版社,2007论文(设计)各阶段名称日期系统概念设计及总体设计第 10 周代码实现阶段第 1114 周系统调试、试运行阶段第 15 周进度安排论文的整理定稿第 15 周 指导教师签字:系主任签字:主管教学院长签字:装订线河北大学 2007 届本科生学年论文设计 学生姓名专业 年级论文(设计)题目多级流水 cpu 设计论文(设计)内容提要论文完成的主要工作包括:(l) 综合运用了所学知识,完成多级流水 cpu 系统级设计。(2) 通过 vhdl 语言实现逻辑设计。(3) 设计成果在 fpga 硬件平台的运行指导教师评语成绩: 指导教师

3、(签名): 年 月 日摘要河北大学 2007 届本科生学年论文设计本学期计算机体系课程设计题目是多级流水 cpu 设计。以计算机硬件为主,兼顾计算机软件和计算机应用技术。在教师指导下,灵活运用所学到的基础知识和主要专业知识,自己设计、制作、调试,完成 16 位五级流水 cpu 的实际。本组设计并最终在 fpga 实验平台上实现一个 cpu 芯片,具有五级流水。采用流水处理技术解决了流水线技术中的结构相关、数据相关和控制相关。设计了指令系统、指令格式、寻址方式、寄存器结构、数据表示方式、存储器系统,运算器、控制器和流水线结构等。用 vhdl 硬件语言进行逻辑设计,采用先进的工具软件进行模拟和测试

4、,测试通过之后下载到 fpga 芯片中,并在测试平台上通过规定测试程序的测试。关键字:流水线;fpga;五级流水河北大学 2007 届本科生学年论文设计目目录录1.1.前言前言-11.11.1实验目的实验目的-11.21.2实验环境实验环境-12.2.流水线工作原理流水线工作原理-33.3.系统设计系统设计-53.13.1概念设计概念设计-53.23.2指令系统指令系统-53.33.3时序设计时序设计-64.4.结构设计结构设计-94.14.1总体逻辑结构设计总体逻辑结构设计-94.24.2分模块结构设计分模块结构设计-115.5.代码实现及测试代码实现及测试 -135.15.1代码实现代码实

5、现-135.25.2程序测试程序测试-195.35.3测试结果测试结果-216.6.实验总结实验总结 -25河北大学 2007 届本科生学年论文设计11.1. 前言1.1 实验目的1. 本实验需要自己设计并最终用 fpga 实现一个 cpu 芯片。利用已有的计算机组成原理知识,以及对计算机系统结构的初步学习,设计一个包括指令系统、寻址方式、寄存器组、存储系统、流水线结构等的 cpu。设计的 cpu 必须具有复位功能,以便使用 tec-ca 实验台上的“cpu 复位”按钮对 cpu 复位,使cpu 处于调试前的初始状态。cpu 复位脉冲按负脉冲设计。2. 熟练掌握 vhdl 硬件描述语言,对 c

6、pu 的各个功能模块进行代码编写,并学会将各个功能部分组织连接成一个完整 cpu 体系结构。3. 学会利用先进的硬件设计工具软件 quartus ii 对程序进行仿真和调试。并熟练掌握 fpga-cpu 在“tec-ca 开放式 cpu 实验教学系统”上的调试方法。4. 在完成实验的过程中锻炼和提高实际动手能力、创新思维、团队合作精神等方面的能力。1.2 实验环境1. 总体描述fpga-cpu 设计平台能够支持下载到 fpga 中的 cpu 的单步调试和连续运行。用户用 vhdl 编写的 cpu 代码通过编译之后,可以下载到设计平台上的 fpga 芯片中。fpga-cpu 的运行通过执行预先写

7、到外部存储器中的程序来实现。使用debugcontroller 程序对外部存储器进行读写操作,并能监控 fpga-cpu 的状态和通过设置断点调试 fpga-cpu 正在执行的程序。这套实验环境为实验者提供了最大的自由度来写出具有自己风格的 cpu 软核,并在测试运行平台上调试和运行。2. 硬件环境整个硬件平台主要有 pc 监控系统、外部程序存储器、fpga-cpu 及其下载相关电路,以及控制电路组成。其中 pc 监控系统主要是由监控软件河北大学 2007 届本科生学年论文设计2debugcontroller 及相关通信接口等构成,提供一整套的运行和调试功能。3. 软件环境quartus-7.

8、0我们使用该软件完成编码工作,并在 active-hdl 功能模拟通过后,进行有效的时序模拟。最终烧片等都用该软件。调试程序 debugcontroller使用该软件对外部存储器进行读写操作,并能监控 fpga-cpu 的状态和通过设置断点调试 fpga-cpu 正在执行的程序。河北大学 2007 届本科生学年论文设计32.2. 流水线工作原理流水线处理技术是在重叠、先行控制的基础上发展起来的,包括指令控制功能和功能处理过程都可采用流水处理。在先行控制方式中将一条指令的执行分为“分析”和“执行”两个子过程。这两个子过程分别使用指令分析器和运算器两个独立的部件来完成。所以可以利用多条指令执行时,

9、在时间上相互错开,轮流重叠地利用这两个独立部件,来加快程序的执行速度。若实现“分析”与“执行”中的每一个子过程都需要t1=t/2 时间,则 4 条指令流水执行只需 5t1,比起 4 条指令顺序执行所需的 8t1 时间少了近一半。如果将指令的“分析”子过程再进一步划分成“指令译码”和“取操作数”两个子过程,分别由“译码”和“取数”两个独立的子部件执行,并使所有子部件的经过时间都改进成 t2=t/4,指令执行顺序如图 2-1 所示。取取指指令令译译码码取取数数执执行行入入出出图表 2-1 指令执行顺序图图 2-2 是指令流水执行的时空图。图中横坐标为时间,纵坐标为空间(即各个子过程) ,标有数字的

10、方格说明占用该空间与时间的任务号,在本例中表示机器处理的第 1、第 2、第 3、第 4、第 5 条指令,最多可以有 4 条指令在不同的部件中同时进行处理。这样计算机每隔 t2 就能输出一条指令的执行结果。图表 2-2指令流水执行时空图河北大学 2007 届本科生学年论文设计4按此思路,流水线的定义可以具体描述为:将一个复杂的处理过程分成 m个复杂程度相当、处理时间大致相等的子过程,每个子过程由一个独立的功能部件来完成,处理对象在各子过程连成的线路上连续流动。在同一时间,m 个独立部件同时进行不同的操作,完成对不同子过程的处理,这种工作方式称为流水线。在计算机流水线的实际应用过程中,为平滑缓冲各

11、子部件之间的速度差异,在子部件之间往往都要设置高速接口缓冲器或一定容量的高数缓冲器来保存中间结果。也就是通常所说的 n 级流水处理中的级间寄存器。河北大学 2007 届本科生学年论文设计53.3. 系统设计3.1 概念设计指令流水的基本思路是把每条指令划分为几个执行步骤,这些步骤在执行过程中使用不同的资源从而在时间上能重叠起来,提高了整体工作负载的吞吐率。我们将每条指令划分为“取指” 、 “译码” 、 “执行” 、 “访存” 、 “写回”这五个执行步骤。如图 3-1 所示。取指令if指令译码id指令执行exe存储器读写 mem寄存器写回wb图表 3-1 多级流水 cpu 设计图3.2 指令系统

12、指令系统设计的好坏影响整个系统各个方面的性能。我们采用了实验指导书中的指令系统。如表 3-2 所示:汇编语句操作码功能描述指令类型add dr,sr00000000dr+srdrsub dr,sr00000001dr-srdrdec dr00000010dr-1drinc dr00000011dr+1drcmp dr,sr00000110dr-sr 比较and dr,sr00000111dr and srdr 逻辑与or dr,sr00001000dr or srdr 逻辑或xor dr,sr00001010dr xor sr dr 异或test dr,sr00001011dr and sr,

13、 测试shl dr00001100逻辑左移,最低位补 0,最高位移入 cshr dr 00001101逻辑右移,最高位补 0,最低位移入 csar dr00001110算术右移,最高位右移,同时再用自身的值填入算术逻辑指令河北大学 2007 届本科生学年论文设计6mov dr,sr00001111sr drload dr,sr01000001sr drstore dr,sr01000010 sr drmovi dr,imm01000011imm dr (双字指令)pshf01000100flag 入栈popf01000101flag 出栈push sr01000110sr 入栈pop dr01

14、000111出栈 dr数据传送指令jr adr00010000无条件跳转到 adr , adr=原 pc 值+offsetjrc adr00010001当 c=1 时,跳转到 adr, adr=原 pc 值+offsetjrnc adr00010010当 c=0 时,跳转到 adr, adr=原 pc 值+offsetjrz adr00010011当 z=1 时,跳转到 adr, adr=原 pc 值+offsetjrnz adr00010100当 z=0 时,跳转到 adr, adr=原 pc 值+offsetjmpa adr01010000无条件跳转到 adrret01010001子程序返

15、回call adr10000000调用首地址在 adr 的子程序(双字指令)控制转移指令nop11000000空操作其他halt0001000011111111停机 (jr 0xffff)图表 3-2cpu 的指令系3.3 时序设计本次课程设计采用的五级流水时序如图 3-3 所示,数据通路如图 3-4 所示。clock numberinstruction number 1 2 3 4 5 6 7 8 9instruction iif id ex mem wbinstruction i+1if id ex mem wbinstruction i+2if id exmem wbinstructio

16、n i+3if idex mem wbinstruction i+4ifid ex mem wbclock numberinstruction number 1 2 3 4 5 6 7 8 9instruction iif id ex mem wbinstruction iif id ex mem wbinstruction i+1if id ex mem wbinstruction i+1if id ex mem wbinstruction i+2if id exmem wbinstruction i+2if id exmem wbinstruction i+3if idex mem wbi

17、nstruction i+3if idex mem wbinstruction i+4ifid ex mem wbinstruction i+4ifid ex mem wb图表 3-3 五级流水时序图河北大学 2007 届本科生学年论文设计7cc1cc2cc3cc4cc5cc6immemregaluregimmemregaluregimmemregaluimregaluimregcc1cc2cc3cc4cc5cc6cc1cc2cc3cc4cc5cc6immemregaluregimmemregregaluregregimmemregaluregimmemregregaluregregimmem

18、regaluimmemregregaluimregaluimregregaluimregimregreg图表 3-4 五级流水数据通路为保证指令的正确执行。处理结构相关需要做两项工作:冲突检测和取指延后。1. 冲突检测只有执行访存指令(load/store)时,才会出现冲突。因此,我们在译码时产生一个标志是否访存的信号 wmem。含义如图 3-5:wmem意义00写内存(store)01读内存(load)1不占用内存图表 3-5 wmem 控制信号通过检查“访存阶段”的 m_wrmem 就可确定是否冲突。2. 取指延后在每次取指时,若有冲突,则往 ir 中写入空指令(nop),并保持 pc 不

19、变,使取指延后一个节拍。在解决了结构相关、控制相关、数据相关后,五级流水时序图最终设计如图 3-6:河北大学 2007 届本科生学年论文设计8取指译码执行访存写回取指译码执行访存写回取指译码执行访存写回取指译码执行访存写回取指译码执行访存写回pc更新图表 3-6 五级流水时序图河北大学 2007 届本科生学年论文设计94.4. 结构设计4.1 总体逻辑结构设计总体逻辑设计的 rtl 图参考课本中的设计,如图 4-1 所示。图表 4-1各个功能部件的功能及其使用的控制信号: 1. alu:组合逻辑部件,对两个 16 位的输入及进位输入 cin 可进行由 3 位控制信号控制。2. 数据选择器 bu

20、s_mux:组合逻辑器件,其输入包括:源寄存器数据,目标寄存器数据,带符号位扩展的偏移地址,pc,以及从内存读取的立即数、跳转地址等数据。在 3 位控制信号的控制下它进行 alu 模块 a、b 端输入的选择。3. 程序计数器 pc:时序逻辑器件,16 位寄存器,在控制信号 pc_en 的控制下可接收 alu 的运算结果(高电平接收,否则保持不变) 。输出送往地址寄存器(读取指令内容)以及数据选择器(进行自增运算) 。河北大学 2007 届本科生学年论文设计104. 地址寄存器 ar 和指令寄存器 ir:都是 16 位的寄存器,地址寄存器用于存放要读写的内存地址单元的地址,输出送往地址总线,输入

21、可能为 pc 内容,也可能为 alu 的输出(对读写内存指令) ;指令寄存器存放当前执行指令的内容,它的输入来自从内存读取的指令和数据,输出送往控制逻辑。二者共用两位控制信号 rec。寄存器组和寄存器的选择:本实验中的寄存器都为 16 位,带有清零端和使能端,实际上在写 vhdl 程序时,通用寄存器以及 ar、ir、pc 使用的都是同一个模板。按照我们的设计,通用寄存器共有 16 个,由指令的低 8 位的全部或其中的高 4 位或低 4 位来从寄存器组中选择源寄存器和目的寄存器。安排寄存器选择器件 reg_mux,为组合逻辑器件,用于输出选定寄存器的内容。5. 节拍发生器:时序逻辑器件,作用是用

22、多位触发器的输出信号的不同组合状态,来标识每条指令的执行步骤。其功能相当于一个状态机。前文已述,我们设计的节拍发生器共有 3 位触发器。在编码方面,遵循了这样的原则:从一个状态变到下一个状态时,状态发生变化的触发器数目应尽量少。6. 控制逻辑:组合逻辑器件,前面已提到,它根据指令内容(由 ir 提供)和指令的执行步骤(由节拍发生器提供)及其他一些条件信号(标志寄存器输出) ,形成并提供出计算机各部件当前时刻要用到的控制信号。根据前面所总结的全部控制信号的意义、作用和数值,可以比较容易地写出控制逻辑部件。7. reg_out:对外输出寄存器内容的译码电路,组合逻辑器件,根据外部输入的寄存器选择信

23、号输出制定的寄存器内容(包括为了便于观察引出的内部信号寄存器) 。8. 时序设计:结构相关的处理和数据相关的处理。整个 cpu 由以下几个模块组成:1. 取指模块(if):给出内存地址,读取指令并送入指令寄存器,为下一级准备数据。由于 pc 控制模块处于取指模块中,因此控制相关的检测也置于取指模块。2. 译码模块(id):读取寄存器值和指令译码。我们采取一次译码,逐级传递的方式,译出后几级流水所需的控制信号和数据(如立即数等) ,在每次时钟上升沿到来时送入下一级。实际上,结构相关、控制相关、数据相关的检测河北大学 2007 届本科生学年论文设计11都可归入译码部分。考虑到“相关检测”涉及到的信

24、号分属不同阶段以及整体结构的清晰性,我们将“相关检测”独立出来。3. 执行模块(ex):完成算术逻辑运算、计算有效地址和提供数据通道。4. 访存模块(ma):选择地址线的数据来源和数据线的流向。访存和取指在功能上是独立的,但 cpu 对外只有一条地址线和数据线的事实决定了访存和取指是相互联系的。当执行 load/store 指令时,地址线由 alu 送入“访存段”的值提供;取指时,则由 pc 提供。当写内存时,cpu 内部数据送数据线;当需要读内存时,cpu 往数据线送高阻。5. 回写模块(wb):选择回写数据源和根据写使能信号 wregen 将数据回写到寄存器堆;6. hazarddetec

25、tunit 模块:检测结构相关;7. forwardingunit 模块:检测数据相关。其中由我完成取指模块、译码模块、执行模块。4.2 分模块结构设计1. 取指模块主要完成两个任务,一是根据程序计数器 pc 里的指令地址从指令存储器里读取指。另一个任务主要完成 pc+1 计算和下一条指令地址的猜测。对下一条指令的猜测主要是假设分支条件不成立,猜测下一条指令地址是本指令地址的下一地址,除了对下一条指令的猜测,还完成对上一次的猜测的确认。本指令地址的确认主要是完成如果上一条指令是分支指令时,如果分支条件不成立,本指令地址猜测是正确,指令有效,继续执行,否则本指令无效,重新再取指。2. 译码模块译

26、码阶段,是整个系统中的关键控制阶段,不但进行指令译码,从寄存器堆中读取操作数,而且判断分支指令的跳转条件,计算跳转地址和处理数据相关性问题。这一阶段主要器件有译码单元,寄存器堆,加法器,比较器和地址选择器等。译码单元,可以说是核心控制单元,根据指令代码译码成各种控制信号控制各个单元的控制,而且进行数据相关处理。河北大学 2007 届本科生学年论文设计12执行阶段主要完成指令的逻辑运算工作,alu 根据操作控制码对所提供的操作数进行相应的操作。读/写储存阶段主要完成存储器中数据的读取和写入,是微处理器系统中比较复杂的功能,在这主要完成微处理器内部数据存储器的读写。3. 执行模块执行阶段主要完成指

27、令的逻辑运算工作,alu 根据操作控制码对所提供的操作数进行相应的操作。读/写储存阶段主要完成存储器中数据的读取和写入,是微处理器系统中比较复杂的功能,在这主要完成微处理器内部数据存储器的读写。结构图如图 4-2 所示。muxalubin 0alusrcextto17bitsextto17bits或门异或与门sarshlshrcxaluoprc,z,v,ssetflagflagaluoutcxclkimm1 0 xfffftflagmuxe_raoutforwardamuxe_rboutm_aluoutw_rbdataforwardbaluain傍傍路路模模块块五五级级流流水水cpu运运算算器

28、器结结构构图图operation mux图表 4-2 五级执行模块结构图河北大学 2007 届本科生学年论文设计135.5. 代码实现及测试5.1 代码实现使用 vhdl 语言语言编写内部模块,完成程序编译后下载到硬件平台上,通过元件的例化配置,将内存模块和已有的 cpu 模块连接起来,构成一个完整的计算机系统。1. 取指模块取指模块给出内存地址,读取指令并送入指令寄存器,为下一级准备数据。该模块 rtl 图如图 5-1 所示:a15.0b15.0out15.0adderdqpreenaclra7.0b7.0outequala7.0b7.0outequala7.0b7.0outequala7.

29、0b7.0outequala7.0b7.0outequaldqpreenaclrdqpreenaclrsel2.0data7.0outmuxsel2.0data7.0outmuxdqpreenaclrseldataadatabout0mux21seldataadatabout0mux21add016 h0001 -equal08 h13 -equal18 h14 -equal28 h10 -equal38 h11 -ir13.0ir15.14mux1pc15.0pcincsel0pcnext15.0s_selc0s_selc1s_selz0s_selz1ir15.016 h0003 -rese

30、tclkzctempcpcstallifflushe_setflag2.0pcplusoffset15.0outerdb15.0pc_addr15.0d_pcinc115.0d_ir15.0equal48 h12 -d_pcinc115.0reg0tempzmux0图表 5-1 取指模块 rtl 图pc 作为程序计数器,程序计数器控制关键代码如下:op = ir(15 downto 8);-操作码with e_setflag select zz = zwhen flag_hold, tempz when others;with e_setflag select cc = cwhen flag_

31、hold, tempc when others;s_selz = 1 when( op=jrz and zz=1) -判断是否跳转 or ( op=jrnz and zz=0)河北大学 2007 届本科生学年论文设计14 or op=jr else 0; s_selc = 1 when( op=jrc and cc=1) -判断是否跳转 or ( op=jrnc and cc=0) else 0; pcincsel = 1 when s_selz=1 or s_selc=1 else 0; s_pcinc1 = pc + x0001; with pcincsel select pcnext =

32、 s_pcinc1 when 0, pcplusoffset when 1, s_pcinc1 when others; process(reset,clk,pcstall)beginif reset = 0 thenpc = x0000; elsif falling_edge(clk) and (pcstall=0) then pc = pcnext;end if;end process;取指部分采用一个 process 来完成,关键代码如下:process(reset,clk,outerdb,ifflush)beginif reset=0 thenir ir ir = nopins;end

33、 case;d_pcinc1 ctrl:=d_ir(7 downto 0)&10&1&1&001&0000&001;when subb = ctrl:=d_ir(7 downto 0)&10&1&1&001&0001&001;when dec = ctrl:=d_ir(7 downto 0)&10&1&1&100&0000&001;when inc = ctrl:=d_ir(7 downto 0)&10&1&1&010&0000&001;when andins = ctrl:=d_ir(7 downto 0)&10&1&1&001&0010&001;when cmp = ctrl:=d_ir(

34、7 downto 0)&10&0&1&001&0001&001;when test = ctrl:=d_ir(7 downto 0)&10&0&1&001&0010&001;when orins= ctrl:=d_ir(7 downto 0)&10&1&1&001&0011&001;when xorins = ctrl:=d_ir(7 downto 0)&10&1&1&001&0100&001;when shlins = ctrl:=d_ir(7 downto 0)&10&1&1&000&0101&001;when shrins = ctrl:=d_ir(7 downto 0)&10&1&1&

35、000&0110&001;when sar = ctrl:=d_ir(7 downto 0)&10&1&1&000&0111&001;when mov = ctrl:=d_ir(7 downto 0)&10&1&1&011&0000&000;when loadh= ctrl:=11111111&10&1&1&101&1000&000; imm ctrl:=11111111&10&1&1&101&1001&000; 河北大学 2007 届本科生学年论文设计16 imm ctrl:=d_ir(7 downto 0)&01&1&0&011&0000&000;when store = ctrl:=d_

36、ir(7 downto 0)&00&0&1&000&0000&000;when jr|jrz|jrnz|jrc|jrnc = ctrl:=donothing; -若是 jr*指令,计算offset,并向 exe 插入 bubble offset ctrl:=donothing; end case;sa = ctrl(21 downto 18);sb = ctrl(17 downto 14);wrmem = ctrl(13 downto 12);wregen = ctrl(11);memtoreg= ctrl(10);alusrc = ctrl(9 downto 7);aluopr = ctrl

37、(6 downto 3);setflag = ctrl(2 downto 0);end process;流水控制信号的处理部分代码如下:process(reset,clk)beginif reset = 0 then e_wrmem = 10; - do nothinge_wregen = 0; elsif rising_edge(clk) thene_sa = sa;e_sb = sb;e_raout = ra;e_rbout = rb;e_imm = imm;e_alusrc = alusrc;e_aluopr = aluopr;e_setflag = setflag;e_wrmem =

38、wrmem;e_wregen = wregen;e_destreg = sa;e_memtoreg = memtoreg;end if;end process;3. 执行模块河北大学 2007 届本科生学年论文设计17选择运算器 a,b 口数据来源的部分的关键代码如下:with forwarda selectaluain = e_raout when 00, e_aluout when 10, w_wbdata when 01, e_raout when others;with forwardb selectalubin opr := 0&aluain;ops := zero17;when s

39、elab=opr := 0&aluain;ops := 0&alubin;when sela1=opr := 0&aluain;ops := 0&(x0001); when sel0b=opr := zero17;ops := 0&alubin;when selaf=opr := 0&aluain;ops := 1&(xffff);when selad=opr := 0&aluain;ops := 0&e_imm;when others = opr := zero17;ops := zero17;end case;case e_aluopr is -选择 alu 的运算when aluadd

40、= aluresult := opr + ops; tempv := (not opr(15)and(not ops(15)and aluresult(15) or (opr(15)and ops(15)and (not aluresult(15); when alusub = aluresult := opr - ops; tempv := ( ops(15)and(not opr(15)and (not aluresult(15) or (not ops(15)and opr(15)and aluresult(15); when aluand = aluresult := opr and

41、ops;when aluor = aluresult := opr or ops;when aluxor = aluresult := opr xor ops;when alushl = aluresult(15 downto 1) := opr(14 downto 0); aluresult(0) := 0;cx := opr(15);when alushr = aluresult(14 downto 0) := opr(15 downto 1); aluresult(15) := 0;cx := opr(0); when alusar = aluresult(14 downto 0) :=

42、 opr(15 downto 1); aluresult(15) := opr(15); cx := opr(0);when aluloadh = aluresult := ops(8 downto 0)&opr(7 downto 0); 河北大学 2007 届本科生学年论文设计18when aluloadl = aluresult := 0&opr(15 downto 8)&ops(7 downto 0);when others = null;end case; dout tempc := aluresult(16);when alushl|alushr|alusar = tempc :=

43、cx;when aluand|aluor|aluxor = tempc := 0; tempv:= 0; -逻辑运算,状态位 c,z 置零when others = null;end case;i_tempc = tempc;if aluresult = zero17 thentempz := 1;else tempz := 0;end if; i_tempz (c,z,v,s) c=tempc;z = tempz;v = tempv; s (c,z,v,s) c=0; z=0; v=0; s (c,z,v,s)= tempflag; end case;end process;修改状态寄存器部

44、分的关键代码如下:writeflag:process(reset,clk)beginif reset = 0 thentempflag = 0000;elsif rising_edge(clk) thentempflag = c&z&v&s; end if;m_flag = tempflag;end process; 传递给 mem 部分的控制信号处理关键代码如下:process(reset,clk)begin if reset=0 then m_wrmem = 10;m_wregen = 0;河北大学 2007 届本科生学年论文设计19elsif rising_edge(clk) thenm

45、_sa = e_sa;m_aluout = dout;m_rbdata = alubin;m_wregen = e_wregen; m_memtoreg = e_memtoreg;m_destreg = e_destreg;m_wrmem = e_wrmem; end if;end process;5.2 程序测试1test1 8 位8 位乘法运算; 8bit x 8bit multiplier; 测试指令:置立即数,and, 条件跳转, 左移, 右移;main: movi r0,25 ;被乘数 movi r1,6 ;乘数 movi r2,0 ;结果 movi r3,8 ;循环次数loop: movi r4,1 and r4,r1 jrz 1f ;r4=0 时跳转 add r2,r0 ;否则加到部分积1: shl r0 shr r1 dec r3 ;r3 减 1 jrnz loop halt;result:r2=0x962.test2 内存读写测试河北大学 2007 届本科生学年论文设计2

温馨提示

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

评论

0/150

提交评论