赞
踩
2023-6-1 17:10:46
答辩主要讲的是设计思路
代码测试可以看具体文章
以下内容源自《【FPGA模型机课程设计】》
仅供学习交流使用
小组:孤星独吟
所有资料均参考于老师的教学资料
所有代码均为自己手敲
所有内容均已发布到CSDN@日星月云
答辩PPT中主要讲了设计框图
本来不准备配文字的
但是对于
做了必要的代码贴图和文字说明
本篇博客做了详细的文字说明
代码测试与结果可以在其余博客中体现
本篇博客中其余的测试结果波形在推荐中的其余博客体现
现在设计到
5模型机整体的联调【FPGA模型机课程设计】
单周期-开发过程【FPGA模型机课程设计】
单周期CPU模型机下载-实机测试【FPGA模型机课程设计】
流水线-开发过程【FPGA模型机课程设计】
小组:孤星独吟
第二周周五:
课程设计收尾及优秀作品展示答辩
学生小组在通过验收后,录制模型机演示视频(一般<3min),优秀设计者需制作答辩讲解ppt。模型机演示视频应包括:所设计的指令集、模型机架构、程序运行演示和对运行结果的说明;曾经出现的问题及解决办法;每位成员在设计开发团队中起到的作用。所录视频为mp4格式,要求屏幕视角大,图像清晰,声音洪亮,演示运行过程清楚明了,运行结果是否正确有解释说明。视频最好有字幕提示。
重点:讲1.3异常中断设计与3流水线CPU的设计
定长指令
操作码+操作数
操作码+源地址+目的地址+立即数
目的数据=源数据 op 立即数(扩展)
IF取指:
InstMem指令存储器:
ID译码:
RegFile寄存器文件:
EX执行
IF
ID
ID译码
EX执行
MEM访存:
- lw
wtData = `Zero;
memWr = `RamUnWrite;
memCe = `RamEnable;
- sw
wtData = memData
memWr = `RamWrite
memCe = `RamEnable
DataMem访存:
ID译码:
EX执行:
HiLo寄存器
增加HiLo寄存器
ID
MEM
LLbit寄存器
增加了LLbit
全译码 二次译码
异常或中断处理过程如下:
(1)ID 模块根据译码结果,
通过 excptype 收集 Syscall 和 Eret 指令,检测是否有对应的异常发生。
协处理器CP0模块
中断设置
读写CP0寄存器
控制Ctrl模块
主要是在查询方式下,提供异常或中断服务程序的首地址。
IF
ID:
EX
在代码设计中,选用Cause寄存器的IP[2]对应的0号硬件中断,即定时中断intimer输出到IP[2]上,然后在执行EX模块检测IP[2]这位是否为1,并且是否允许中断,从而确定定时中断是否有效。若异常或中断有效,则当前指令不会被继续执行,后面的操作都设为无效。
CP0
读写5个寄存器
Ctrl
控制Ctrl模块为新增加模块,主要是在查询方式下,提供异常或中断服务程序的首地址。
增加CP0与Ctrl模块
首先,需要把rst值置为有效
在约束文件中
可以看到rst连接的是P3
也就是SW2
之后把rst置为无效
之后就可以正常运行了
当开关0和1为2’b00时
灯从左往右是16’h0000
当开关0和1为2’b01时
灯从左往右是16’h5555
当开关0和1为2’b10时
灯从左往右是16’haaaa
当开关0和1为2’b11时
灯从左往右是16’h5555
简单的流水灯
初始化
循环只需把r3进行移位操作,sw给Led的送数据即可
控制的流水灯
初始化
循环读入开关,判断控制信号
跳转到不同的分支地址
来对R3进行不同的操作,sw到Led中即可
定时器
可以使用定时中断
把led从低位到高位进行赋值
有效地址计算提前到了ID中进行
给jCe jAddr传送到IF中
按我的理解是:
流水寄存器中输入输出的信号与前后两个模块相关
比如IF_ID:
输入信号:就是原IF给原ID传递的信号
输出信号:就是原ID接受原IF的信号
另外添加:clk与rst控制与存储inst取到的指令
所以流水寄存器
的引脚设计即为这样
功能设计类似与D触发器
MIPS
需要把相邻两个模块拆开,用流水寄存器
相联
举例:说明怎么修改
比如:ID ID_EX EX
原来:ID输出–>EX输入
(一条线连接)
修改:
把原ID输出的信号–>ID_EX输入
把ID_EX的输出信号–>原EX输入
(两条线连接)
对比来看,把原EX输入信号量与ID_EX
输入相连
并且新增连线
把ID_EX的输出信号与原EX输入连接起来
原来的单周期CPU的波形
一个周期产生一个数据
现在的流水CPU的设计波形
流水线满载(C)后,一个周期产生一个数据
可以看到inst[1]和inst[4],中间隔离两条命令,所以有了数据冲突
当inst1执行到MEM时,准备写回R2时
inst4在ID段读出R2,还是没有值的,所以它的R5结果不对
但是inst5的R6结果是对的,因为这个时候R2的结果已经写入进去了
发现R5 没有结果,因为有数据冲突
pc=14时
可以看到inst4在ID段
但是inst1在WB段
在时钟上升沿
真正写入regFile
数据冲突的分析
对于相邻WAR冲突
问题1:所以ID段的引脚设计需要怎么设计?
回答1:需要增加一个反馈接口从EX输出到ID输入
对于相隔一条WAR冲突
问题2:所以ID段和MEM的连线设计需要怎么设计?
回答2:需要增加一个反馈接口从MEM输出到ID输入
对于相隔两条WAR冲突
问题3:所以MEM段和regFIle的连线设计需要怎么设计?
回答3:需要增加一个反向器连接regFile的clk输入
对于相邻Load相关
判断是否是Load冲突,停顿
测试代码
结果如下
load相关结果有点问题
load处理类似于
因为在pc=28时
or的ID段停顿了
但是regaData和regaRd清0了
导致结果有问题
2023-6-1 22:10:34
所有资料均参考于老师的教学资料
所有代码均为自己手敲
所有内容均已发布到CSDN@日星月云
你对我百般注视,
并不能构成万分之一的我,
却是一览无余的你。
祝大家逢考必过
点赞收藏关注哦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。