admin管理员组文章数量:1546846
声明:最近很多学校的学弟学妹看到了这篇文章。这篇文章的本意是帮助学弟学妹能够更好地完成组原课设,毕竟当时我也是完成这个课设时非常痛苦,同时这还是基于我比较认真地完成了实验课的基础上,因此分享这篇文章不仅是对自己痛苦熬大夜的纪念,也希望可以起到帮助的作用,本篇文章也只是提供一个我个人设计的思路,我同届同学还有其他比我更巧妙更聪明的设计。今天查了后台发现很多私信求文件压缩包和电路图,我这边在完成这篇文章后都删除了有关文件,其实与其寄希望于我这模糊的电路图,不如多与老师交流,组原的老师们真的都很好,或者有可能的话录屏老师的讲解(实测非常有用,其实很多面临的问题老师第一节课都讲过的)。
如果有设计上的问题,欢迎评论区留言。佛系回复。
提示:此文档仅用于记录我本学期计算机组成原理课设文档,可能我们学校比较水吧,有幸拿到了优。本文档仅用于参考!
基于FPGA的实验平台Altera Quatars II的16位单周期CPU设计
- 前言
- 1、课程设计题目
- 2、课程设计的目的与意义
- 3、课程设计的内容
-
- 3.1 平台介绍
- 3.2 单周期CPU的主要技术指标
- 3.3 R型指令
- 3.4 I型指令
- 3.5 LOAD指令
- 3.6 STO指令
- 3.7 JUMP指令
- 3.8 HALT指令
- 4、课程设计步骤
-
- 4.1 选择要设计的指令
- 4.2 设计数据通路
- 4.3 分析控制信号取值
- 4.4 设计控制单元
- 4.4.1 WE
- 4.4.2 S
- 4.4.3 Exop
- 4.4.4 MUX_LOAD
- 4.4.5 MUX_S
- 4.4.6 MUX_R
- 4.4.7 MUX_STR
- 4.4.8 R_TY
- 4.4.9 JUMP
- 4.4.9 HALT
- 4.5 各部分的代码及分析
- 4.5.1 一级译码器
- 4.5.2 运算器ALU
- 4.5.3 二级译码器
- 4.5.4 扩展器
- 4.5.5 寄存器选择
- 4.5.6 寄存器
- 4.5.7 数码管
- 4.5.8 J_PC程序地址器
- 4.6 设计各部分元件及主电路
- 4.6.1功能码func译码器
- 4.6.2运算方式的二路选择器MUX_S
- 4.6.3寄存器组译码器
- 4.6.4寄存器组4路选择器
- 4.6.5立即数扩展
- 4.6.6第二个运算数的二路选择器
- 4.6.7 ROM
- 4.6.8 RAM
- 4.6.9 程序计数器PC
- 4.6.10 选择写入寄存器组的数据的二路选择器
- 4.6.11 主译码器decoder
- 4.6.12 总电路图
- 4.7 引脚分配
- 4.8功能测试
- 4.8.1 准备程序
- 4.8.2 准备数据
- 4.8.3 测试
- 5、实验结果与分析
-
- 5.1实验数据分析
- 5.1.1 数据存储器地址及内容
- 5.1.2 程序清单以及功能说明
- 5.2 运行结果和分析
- 5.2.1 加载数据
- 5.2.2 R型指令执行结果
- 5.2.3 I型指令执行结果
- 5.2.4 Load型指令执行结果
- 5.2.5 STO型指令执行结果
- 5.2.6 JUMP型指令执行结果
- 5.2.7 HALT型指令执行结果
- 5.3错误或异常现象分析
- 6、总结体会
- 7、参考文献
- 8、问得多的问题
-
- 8.1 ROM.mif
前言
设计16位的单周期CPU有很多种方法,此处展示的方法并不是最优。
提示:以下是本篇文章正文内容,下面案例可供参考
1、课程设计题目
基于FPGA的实验平台Altera Quatars II的16位单周期CPU设计。
2、课程设计的目的与意义
本课程设计是学完计算机组成原理课程并进行了多个单元实验后,综合利用所学的理论知识,并结合在单元实验中所积累的计算机部件设计和调试方法,设计出一台具有自定义指令系统的简单计算机系统。所设计的系统能在基于FPGA的实验平台Quatars上运行一段程序,通过检查程序结果的正确性来判断所设计计算机系统正确性。
本课程设计属于设计型实验,不仅锻炼学生简单计算机系统的设计能力,而且通过进行主机系统底层电路的实现、故障分析与定位、系统调式等环节的锻炼,进一步提高学生分析和解决问题的能力。
3、课程设计的内容
设计单周期CPU,并调试通过。题目可以根据自己的设计内容、实现方式、所设计的计算机系统的结构为基于FPGA实验平台的单周期CPU设计与实现。
3.1 平台介绍
本课程设计的实验平台为Altera Quartus II 软件和Altera Cyclone V Starter 工具箱。实验平台要点如下:
Cyclone V是Altera FPGAs家族的一类,它面向低功耗应用。Cyclone V GX 5CSEMA5F31C6芯片有不同的转换器,按钮,LED灯,七段显示器,HDMI接口,SD卡读卡器以及其他链接等。Cyclone V GX 5CSEMA5F31C6是Starter工具箱的重要组件。
3.2 单周期CPU的主要技术指标
①支持表1中至少10条指令,其中,至少要选择1条R型指令、1条立即数运算指令、Load指令、Store指令、1条分支指令和无条件转移指令;
②能运行由自己所设计的指令系统构成的一段测试程序,测试程序应能涵盖所有指令,程序执行功能正确,并对运行结果与理论运算结果对比(本实验采用表格对比),每一步判断对错。
# | 指令 | 15~12 | 11~10 | 9~8 | 7~6 | 5~3 | 2~0 | 指令功能 |
---|---|---|---|---|---|---|---|---|
1 | or | 0 | rs | rt | rd | 0 | 0 | $rd= $rs or $rt |
2 | and | 0 | rs | rt | rd | 0 | 1 | $rd = $rs & $rt |
3 | add | 0 | rs | rt | rd | 0 | 2 | $rd = $rs + $rt |
4 | sub | 0 | rs | rt | rd | 0 | 3 | $rd = $rs - $rt |
5 | sllv | 0 | rs | rt | rd | 0 | 4 | $rd = $rs - $rt |
6 | srlv | 0 | rs | rt | rd | 0 | 5 | $rd = $rs >> $rt |
7 | srav | 0 | rs | rt | rd | 0 | 6 | $rd = $rs >> $rt 算术右移 |
8 | slt | 0 | rs | rt | rd | 0 | 7 | r d = ( rd = ( rd=(rs < $rt) ? 1 :0 |
# | 指令 | 15~12 | 11~10 | 9~8 | 7~0 | 指令功能 |
---|---|---|---|---|---|---|
9 | DISP | 1 | rs | rt | immediate-u | DISP[imm] = $rs |
10 | lui | 2 | 0 | rt | immediate-u | $rt = imm << 8 |
11 | ori | 3 | rs | rt | immediate-u | $rt = $rs |
12 | andi | 4 | rs | rt | immediate-u | $rt = $rs & imm |
13 | addi | 5 | rs | rt | immediate-s | $rt = $rs + imm |
14 | lw | 6 | rs | rt | immediate-s | r t = M E M [ rt = MEM[ rt=MEM[rs + imm] |
15 | sw | 7 | rs | rt | immediate-s | MEM[$rs+imm] = $rt |
16 | beq | 8 | rs | rt | offset-s | beq =? |
17 | bne | 9 | rs | rt | offset-s | bne != ? |
18 | bqt | 10 | rs | rt | offset-s | bgt >?(有符号比较) |
|#| 指令 | 15~12 | 11~0 |指令功能|
|–|–|–|–|–|–|–|
| 19 | jump | 11 |jump address|jump|
| 20 | halt | 12 |0|halt (时钟暂停) |
代码如下(示例):
3.3 R型指令
R型指令有4位操作码,两个源寄存器选择码,右操作数选择码,目标寄存器选择码,功能码。R型指令操作码func都为0000,用功能码区别每个指令。具体如图1、表2、表3、表4所示。
# | 指令 | 15~12 | 11~10 | 9~8 | 7~6 | 5~3 | 2~0 | 指令功能 |
---|---|---|---|---|---|---|---|---|
1 | or | 0 | rs | rt | rd | 0 | 0 | $rd= $rs or $rt |
2 | and | 0 | rs | rt | rd | 0 | 1 | $rd = $rs & $rt |
3 | add | 0 | rs | rt | rd | 0 | 2 | $rd = $rs + $rt |
4 | sub | 0 | rs | rt | rd | 0 | 3 | $rd = $rs - $rt |
5 | sllv | 0 | rs | rt | rd | 0 | 4 | $rd = $rs - $rt |
6 | srlv | 0 | rs | rt | rd | 0 | 5 | $rd = $rs >> $rt |
7 | srav | 0 | rs | rt | rd | 0 | 6 | $rd = $rs >> $rt 算术右移 |
8 | slt | 0 | rs | rt | rd | 0 | 7 | r d = ( rd = ( rd=(rs < $rt) ? 1 :0 |
指令 | op | func | 功能说明 | 指令操作结果 |
---|---|---|---|---|
or | 0000 | 0000 | $rd = $rs or $rt | 运算结果返回目标寄存器rd |
and | 0000 | 0001 | $rd = $rs & $rt | 运算结果返回目标寄存器rd |
add | 0000 | 0010 | $rd = $rs + $rt | 运算结果返回目标寄存器rd |
sub | 0000 | 0011 | $rd = $rs - $rt | 运算结果返回目标寄存器rd |
sllv | 0000 | 0100 | rt寄存器数据逻辑左移位rs位,回写到rd | 运算结果返回目标寄存器rd |
srlv | 0000 | 0101 | rt寄存器数据逻辑右移位rs位,回写到rd | 运算结果返回目标寄存器rd |
srav | 0000 | 0110 | rt寄存器数据算数右移位rs位,回写到rd | 运算结果返回目标寄存器rd |
slt | 0000 | 0111 | r d = ( rd = ( rd=(rs < $rt) ? 1 :0 | 运算结果返回目标寄存器rd |
汇编码 | 预期执行结果 |
---|---|
add $r0 $r1 #r0 | $r0=0x000A |
sub $r2 $r1 #r2 | $r2=0x0000 |
or $r3 $r1 #r2 | $r2=0x0005 |
and $r1 $r3 #r0 | $r0=0x0005 |
sllv $r0 $r2 #r3 | $r3=0x0100 |
srlv $r1 $r2 #r3 | $r3=0x0000 |
srav $r0 $r2 #r3 | $r2=0x0005 |
srav $r0 $r2 #r3 | $r2=0x0005 |
3.4 I型指令
I型指令有4位操作码,一个源寄存器选择码,目标寄存器选择码,八位立即数。I型指令与立即数进行与、或、加、位移运算。具体如图2、表5、表6、表7所示。
|#| 指令 |15~12| 11~10| 9~8| 7~0| 指令功能|
|–|–|–|–|–|–|–|–|
|9| lui |1 |0 |rt| immediate-u | r t = i m m < < 8 ∣ 10 ∣ o r i ∣ 2 ∣ r s ∣ r t ∣ i m m e d i a t e − u ∣ rt = imm << 8 |10| ori |2| rs| rt |immediate-u | rt=imm<<8∣10∣ori∣2∣rs∣rt∣immediate−u∣rt = $rs | imm
|11| andi| 3| rs| rt |immediate-u| $rt = $rs & imm
|12| addi| 4| rs| rt| immediate-s| $rt = $rs + imm
指令 | op | 功能说明 | 执行结果 |
---|---|---|---|
lui | 0001 | $rt = imm << 8 | 运算结果回写寄存器rt |
ori | 0010 | $rt = $rs imm | 运算结果回写寄存器rt |
andi | 0011 | $rt = $rs & imm | 运算结果回写寄存器rt |
addi | 0100 | $rt = $rs + imm | 运算结果回写寄存器rt |
汇编码 | 预期执行结果 |
---|---|
add $r0 $r1 #r0 | $r0=0x000A |
sub $r2 $r1 #r2 | $r2=0x0000 |
or $r3 $r1 #r2 | $r2=0x0005 |
and $r1 $r3 #r0 | $r0=0x0005 |
3.5 LOAD指令
# | 指令 | 15~12 | 11~10 | 9~8 | 7~0 | 指令功能 |
---|---|---|---|---|---|---|
13 | lw | 0101 | 00 | 10 | immediate-s | r t = M E M [ rt = MEM[ rt=MEM[rs + imm] |
|lw| 0101 | r t = M E M [ rt = MEM[ rt=MEM[rs + imm] |read data from ram to $rt
|–|–|–|-|–|
汇编码 | 预期执行结果 |
---|---|
Load $r0 $r1 #r0 | $r0=0xFF01 |
3.6 STO指令
将源寄存器RS中的值和有符号立即数0x0000进行相加作为地址,将RT中的值写入RAM中对应位置去。具体如图4、表11、表12、表13所示。
# | 指令 | 15~12 | 11~10 | 9~8 | 7~0 | 指令功能 |
---|---|---|---|---|---|---|
14 | sw | 0110 | 00 | 10 | immediate-s | MEM[$rs+imm] = $rt |
sw | 0101 | r t = M E M [ rt = MEM[ |
---|
版权声明:本文标题:基于FPGA的实验平台Altera Quatars II的16位单周期CPU设计 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727170733a1100207.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论