当前位置:文档之家› -EDA课设报告

-EDA课设报告


流水线寄存器:
PC IFDC DCEX EXWB WBXX
全局模块:
PC(#32)
Instruction(#16) ALU_OP(#4), DW(#1),WB(#1), WBData_Sel(#1), Reg0(#32),Reg1(#32),Imm(#5),RegAddr0(#5),RegAddr1(#5)
WB(#1),WBData(#32),WBAddr(#5)
WB(#1),WBData(#32),WBAddr(#5)
加法器:
选择器: 译码器: Register File:
ALU: ByPass Controller:
3.3 流水 CPU 指令集
四、仿真结果
五、心得体会
这次课设最后的结果令自己感觉挺意外的,因为在刚开始课设前是觉得自 己最后可能都做不出来,但最后自己提前完成了课设,感觉挺有成就感的,收 获也很大。
• 3.2.2 控制电路 – 从数据通路接收指令码,进行译码产生控制信号; • 多路选择器的选择 • 寄存器堆栈写信号 • 流水线寄存器写信号 • 流水线寄存器清除信号 • 存储器写信号 • ALU 操作信号 • 运算指令(加减、逻辑运算)
运算指令(bypass)
ACLK
ADD r1, r0
IA
ST r2, r1
reg [3:0] reg reg reg
DC_ALU_OP; DC_WB, DC_DW, DC_LD; IFDC_W; IFDC_Flush;
//ALU operation code from decoder //writeback,store,load sigal from decoder //write signal for IFDC register //clear signal for IFDC register
三、体系机构设计
3.1 5 段流水线设计
3.2 设计步骤
• 3.2.1 数据通路的设计 – 数据流向 • 存储器 Instruction Memory, Data Memory, • 寄存器堆栈 Register File, • 流水线寄存器 Pipeline Register, • 运算器 ALU, • 多路选择器 multiplexers.
3.1 5 段流水线设计 .........................................................................5 3.2 设计步骤 .......................................................................................5 3.3 流水 CPU 指令集.......................................................................11 四、仿真结果........................................................................................... 12 五、心得体会........................................................................................... 14 参考文献...................................................................................................15 附录(代码)........................................................................................... 16
最后就完成了课程设计,整个过程中自己对硬件的编程有了进一步的认 识,也培养了自己对硬件开发的兴趣,最关键的是,自己调通了代码,也让我 增加了信心。在最后再次感谢张俊老师对我们的鼓励和耐心指导。
参考文献
[1] 潘松 黄继业 陈龙,《EDA 技术与 Verilog HDL》,清华大学出版社,2010 年 1 月
最 后 通 过 使 用 multisim10.1d 仿 真 各 个 组 件 通 过 , 并 使 用 quartus ii 完成连线并仿真。得到想要的结果
关键词:流水 CPU;EDA;RTL;精简指令集
一、课程设计目的
掌握硬件描述语言 Verilog HDL 的语法及设计技巧,了解 Quartus II 软件的 应用,学习 Quartus II 环境下设计 CPU 的基本过程;掌握 CPU 设计代码的含 义以及 CPU 的工作原理;了解 CPU 与内存 RAM 间的连接数据的传输过程;
中南大学
题 目: 课题名称: 指导老师: 学 号: 姓 名:
流水线 CPU 设计 EDA 课程设计报告
张俊 0903130323
胡慧
目录
摘要 ............................................................................................................. 3 一、课程设计目的 ....................................................................................4 二、课程设计要求 ....................................................................................4 三、体系机构设计 ....................................................................................5
ADD r1, r0
IA
xxx
ST r2, r1
ADD r1, r0
IA
xxx
xxx
ST r2, r1
IF
DC
EXΒιβλιοθήκη WBEX-EX ByPass
IA
IF
DC
EX
WB
IF
DC
EX
WB
WB-EX ByPass
IA
IF
DC
EX
WB
IF
DC
EX
WB
IA
IF
DC
EX
WB
体系结构设计总流程图:
3.2.3 组件设计 全局模块:
接下来便主要是编写程序了,在这个过程中,张老师提供了很多帮助,耐 心的解答我们的问题,帮我们看程序的问题,同时自己和同学在写代码的过程 中也会进行讨论,因此整个代码的完成过程还算是比较轻松的。
完成代码后,就是仿真调试的过程了,这个过程就整个课设来说应该是最令 人头疼的部分了,自己开始就感觉无从下手,在张老师帮忙调试了一个错误 后,自己便对调试找错误有了一些头绪,其实我从开始调试到最后调通的这个 过程是很神奇的,开始一直进行到 18 就出错了,自己按照老师的方法分析了下 后,并不是太清楚到底错误出在哪里,因为觉得那块的逻辑是正确的,各种细 节在自己的再三检查和确认后也没发现错误。就这样自己弄了一上午,也没能 解决问题,而之前和自己一起讨论一起写代码的同学运行的情况比我的好很 多,于是我就想着对比下自己和她的代码,来发现错误。对比代码后发现我们 整体的逻辑框架都是一样的,不同的就在于立即数的处理那块,她是先赋值给 一个变量,这个变量在复位时会清零,我是直接使用变量,我仔细想了下,那 块应该确实是有影响的,不然复位这个操作就对该变量没有影响,我在做了修 改后,终于仿真过了 18,接着又停在了 38。而接着对比代码,发现区别就在于 IFDC_Flush 下的处理不同,她是只将变量清零了,而我还将控制信号也清零 了,在做了修改后,竟然一下子就成功了,显示 Simulation completely successful。看到这个结果自己欣喜万分,但同时也觉得挺震惊的,因为在自 己的意识里,是觉得复位,清空这些操作影响不大的,当不确定时就把所有的 信号变量都做处理,但自己这次的主要问题就是出在了复位和清空上。
摘要
本次课程设计基于 EDA,通过 quartus II 软件,学习了解流水 CPU 的内部 结构及工作原理,通过自顶向下的设计方法设计了 5 级流水 CPU 并进行仿真。
本设计将 CPU 分为取址令阶段(IA、IF)、译址令阶段(DC)、指令执行阶 段(EX)和数据回写阶段(WB)。根据精简指令集对流水 CPU 进行体系结构设 计并进行 RTL 编码。 由于使用到了五级流水,我打算将整个部分分成五个模块,用于处理各个时期系 统将做的工作,其中每个模块块代表一个时间周期的寄存器及其逻辑器件,模块 之间使用相对应的控制相连接。
reg [31:0] wire [31:0]
RegFile[31:0]; Reg0, Reg1;
//PC register //new data for PC //select signal for PC
//pipeline register for IFDC //branch condition from decoder //register file //operand 0 and 1
课设开始时,老师先讲了 CPU 的基本流程,自己听着有些晕乎,和同学 讨论以及向老师请教后,觉得对整体的框架有了一定的认识,在这个时候就觉 得其实这整个过程的完成和之前课上学到过的状态机其实差不多,只不过是细 节更多。在有了这样的认识后,自己便决定开始动手写第一部分的代码。第一 部分逻辑简单,但因为距离 EDA 课程结束时间较长,因此一些基本的语法细节 都忘的差不多了,这也告诉我们自己平时要多练习。
附录(代码):
module RISC16(CLK, Rstn, InstAddr, Inst, DW, DAddr, WData, RData);
相关主题