10课程设计收尾及优秀作品展示答辩【FPGA模型机课程设计】

10课程设计收尾及优秀作品展示答辩【FPGA模型机课程设计】

  • 前言
  • 说明
  • 推荐
  • 10课程设计收尾及优秀作品展示答辩
    • 安排
  • 目录
  • 一、单周期CPU的设计过程
    • 1、基本的20条指令
      • 固定指令格式设计
      • I 型指令设计
      • J型指令设计
      • lw sw指令设计
    • 2、扩展的20条指令
      • J型扩展指令设计
      • 乘法除法指令格式
    • 3、实现中断异常相关指令
      • 原子指令设计
      • 中断与异常相关指令
  • 二、单周期CPU的下板过程
    • 设计
    • 实机测试
    • 其余设计
  • 三、流水CPU的设计
    • MIPS的一种简单实现
    • 五段流水线CPU通路基本构成
    • 1 测试指令流水
    • 2解决数据冲突
    • ID的关于数据冲突的处理
  • 附录
    • 表1 20条MIPS整数指令
    • 表2 MIPS 12条整数指令
    • 表3 MIPS 与中断异常相关6条指令
  • 最后

前言

2023-6-1 17:10:46

答辩主要讲的是设计思路
代码测试可以看具体文章

以下内容源自《【FPGA模型机课程设计】》
仅供学习交流使用

小组:孤星独吟
所有资料均参考于老师的教学资料
所有代码均为自己手敲
所有内容均已发布到CSDN@日星月云

说明

答辩PPT中主要讲了设计框图

本来不准备配文字的
但是对于

  • 1.3中断异常实现
  • 3流水线CPU的设计

做了必要的代码贴图和文字说明

本篇博客做了详细的文字说明

代码测试与结果可以在其余博客中体现

本篇博客中其余的测试结果波形在推荐中的其余博客体现

现在设计到

  • 单周期CPU中异常调用的功能不完善LLbit<-0,未给出相关测试
  • 单周期下板√
  • 流水线的WAR冲突解决√
  • 流水线的Load相关有点问题
  • 流水线延迟分支未实现
  • 流水线中断异常未实现

推荐

0集中实践环节计划书【FPGA模型机课程设计】

5模型机整体的联调【FPGA模型机课程设计】
单周期-开发过程【FPGA模型机课程设计】
单周期CPU模型机下载-实机测试【FPGA模型机课程设计】
流水线-开发过程【FPGA模型机课程设计】

10课程设计收尾及优秀作品展示答辩

小组:孤星独吟

安排

第二周周五:

课程设计收尾及优秀作品展示答辩
学生小组在通过验收后,录制模型机演示视频(一般<3min),优秀设计者需制作答辩讲解ppt。模型机演示视频应包括:所设计的指令集、模型机架构、程序运行演示和对运行结果的说明;曾经出现的问题及解决办法;每位成员在设计开发团队中起到的作用。所录视频为mp4格式,要求屏幕视角大,图像清晰,声音洪亮,演示运行过程清楚明了,运行结果是否正确有解释说明。视频最好有字幕提示。

目录

  • 01单周期CPU的设计
  • 02.单周期CPU的下板
  • 03.流水线CPU的设计
  • 04.附录

重点:讲1.3异常中断设计与3流水线CPU的设计

一、单周期CPU的设计过程

1、基本的20条指令

固定指令格式设计

定长指令

操作码+操作数
在这里插入图片描述

I 型指令设计

操作码+源地址+目的地址+立即数

目的数据=源数据 op 立即数(扩展)
在这里插入图片描述

IF取指:

  • 输入 clk rst
  • 操作
    pc=0和romCe=无效(复位有效)
    pc+=4和romCe=有效
  • 输出 romCe 片选信号和pc

InstMem指令存储器:

  • 输入 ce addr
  • 内部存储 reg [31:0] instmem [1023 : 0];
  • 输出 data = instmem[addr[11 : 2]];

ID译码:

  • 输入 rst和inst和regaData_i regbData_i
  • 操作
    通过对op的判断I指令和R型指令
    准备数据regaData(从regaData_i和imm中二选一)、regbData、regcWr、regcAddr
  • 输出 op regaRd regaAddr regbRd regbAddr

RegFile寄存器文件:

  • 输入 clk rst和regaRd regaAddr regbRd regbAddr和we wAddr wData
  • 内部存储 reg [31:0] reg32 [31 : 0];
  • 操作
  • 读regaData = reg32[regaAddr] regbData = reg32[regbAddr];
  • 写reg32[waddr] = wdata;
  • 输出 regaData regbData

EX执行

  • 输入 op regaData regbData、regcWr_i、regcAddr_i
  • 操作
    regcData=regaData (op) regbData
  • 输出regcData regcAddr regcWr
    在这里插入图片描述

J型指令设计

在这里插入图片描述

IF

  • 输入 jAddr jCe
    操作 如果jCe有效,pc=jAddr

ID

  • 操作
    如果是j型指令,jCe有效,jAddr=跳转地址
  • 输出 jAddr jCe
    在这里插入图片描述

lw sw指令设计

在这里插入图片描述

ID译码

  • 操作
    如果指令是访存指令,regaData = regaData_i + imm;

EX执行

  • 操作
    memAddr=regaData
    memData=regbData
  • 输出:memAddr memData

MEM访存:

  • 输入op regcData regcAdd rregcWr memAddr memData和rdData
  • 操作
	- lw
	wtData = `Zero;
	 memWr = `RamUnWrite;                     
	memCe = `RamEnable;  

	- sw
	wtData = memData       
	memWr = `RamWrite
	memCe = `RamEnable
  • 输出 regData regAddr regWr和memAddr wtData memWr memCe

DataMem访存:

  • 输入:clk和ce we wtData addr
    内部存储: reg [31:0] datamem [1023 : 0];
  • 操作:
    读rdData = datamem[addr[11 : 2]];
    写datamem[addr[11 : 2]] = wtData;
  • 输出 rdData
    在这里插入图片描述

2、扩展的20条指令

J型扩展指令设计

在这里插入图片描述

乘法除法指令格式

在这里插入图片描述

ID译码:

  • 准备乘除的操作数

EX执行:

  • 输入:rHiData和rLoData
  • 操作
    Hi:高位或余数
    Lo:低位或商
  • 输出 whi wHiData wlo wLoData

HiLo寄存器

  • 操作
    内部存储reg [31:0]hi,lo;
    读写HiLo寄存器

增加HiLo寄存器
在这里插入图片描述

3、实现中断异常相关指令

原子指令设计

在这里插入图片描述

在这里插入图片描述

ID

  • 准备数据

MEM

  • 操作:
    • LL:
      rt <-datamem[addr]
      LLbit<-1
    • SC:
      if(LLbit ==1){
      datamem[addr]<-rt
      rt<-1
      LLbit<-0}
      else
      rt<-0

LLbit寄存器

  • 操作
    内部存储reg LLbit;
    读写LLbit值

增加了LLbit
在这里插入图片描述

中断与异常相关指令

全译码 二次译码
在这里插入图片描述

异常或中断处理过程如下:

(1)ID 模块根据译码结果,
通过 excptype 收集 Syscall 和 Eret 指令,检测是否有对应的异常发生。
在这里插入图片描述
在这里插入图片描述
协处理器CP0模块

中断设置
在这里插入图片描述
读写CP0寄存器
在这里插入图片描述
控制Ctrl模块

主要是在查询方式下,提供异常或中断服务程序的首地址。

在这里插入图片描述

IF

  • 输入:ejpc excpt
  • 操作:pc=ejpc

ID:

  • 操作
    首先判断是不是中断与异常相关指令
  • 输出 ID给EX传送异常类型excptype

EX
在代码设计中,选用Cause寄存器的IP[2]对应的0号硬件中断,即定时中断intimer输出到IP[2]上,然后在执行EX模块检测IP[2]这位是否为1,并且是否允许中断,从而确定定时中断是否有效。若异常或中断有效,则当前指令不会被继续执行,后面的操作都设为无效。

CP0
读写5个寄存器

Ctrl
控制Ctrl模块为新增加模块,主要是在查询方式下,提供异常或中断服务程序的首地址。

增加CP0与Ctrl模块

在这里插入图片描述

二、单周期CPU的下板过程

设计

在这里插入图片描述

在这里插入图片描述

实机测试

首先,需要把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从低位到高位进行赋值

三、流水CPU的设计

MIPS的一种简单实现

有效地址计算提前到了ID中进行
给jCe jAddr传送到IF中
在这里插入图片描述

五段流水线CPU通路基本构成

在这里插入图片描述

1 测试指令流水

按我的理解是:
流水寄存器中输入输出的信号与前后两个模块相关

比如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

在这里插入图片描述

2解决数据冲突

数据冲突的分析

对于相邻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了
导致结果有问题
在这里插入图片描述

ID的关于数据冲突的处理

在这里插入图片描述

附录

表1 20条MIPS整数指令

在这里插入图片描述

表2 MIPS 12条整数指令

在这里插入图片描述

表3 MIPS 与中断异常相关6条指令

在这里插入图片描述

最后

2023-6-1 22:10:34

所有资料均参考于老师的教学资料
所有代码均为自己手敲
所有内容均已发布到CSDN@日星月云

你对我百般注视,
并不能构成万分之一的我,
却是一览无余的你。

祝大家逢考必过
点赞收藏关注哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/26510.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是lamp架构

LAMP架构介绍 LAMP动态网站架构 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。 1、LAMP分别代表什么&#xff1f; L代表服务器操作系统使用LinuxA代表网站服务使用的是Apache软件基金会中的httpd软件M代表网站后台使用的数据库是MySQL数据库…

springboot 2.6.12 自定义解析 yaml 加密数据

文章目录 一、简介二、yaml 默认解析简单说明三、自定义 yaml 解密解析器四、配置 PropertySourceLoader五、简单测试 一、简介 为了保证项目的配置文件的安全性&#xff0c;需要对第三方组件 mysql、redis、es、mq 等用户名密码进行加密处理&#xff0c;可以使用现成的三方包…

项目经验分享:LVGL编程举例

本文介绍如何在成功移植LVGL的基础之上&#xff0c;编写自己的LVGL GUI程序。 文章目录 1. LVGL组件简介与LVGL仿真1.1 LVGL组件1.2 LVGL仿真 2. 代码结构3. 编程目标4. 编程前的准备5. LVGL编程基础5.1 简单示例代码5.2 设置组件位置5.3 图片的显示5.4 组件的事件响应5.5 设置…

【论文阅读】Twin Neural Network Regression

论文下载 GitHub bib: ARTICLE{SebastianKevin2022Twin,title {Twin neural network regression},author {Sebastian Johann Wetzel and Kevin Ryczko and Roger Gordon Melko and Isaac Tamblyn},journal {Applied AI Letters},year {2022},volume {3},number …

【LeetCode】260. 只出现一次的数字 III

260. 只出现一次的数字 III&#xff08;中等&#xff09; 思路 这道题是136. 只出现一次的数字 的进阶版&#xff0c;需要找出两个仅出现一次的元素。有了上一题的基础&#xff0c;我们很容易就想到要用异或来解决&#xff0c;但是由于这题最终会剩下两个不同的元素&#xff0…

5.31串讲Spring、Vue相关问题

5.31串讲 SSM相关问题 文章目录 5.31串讲 SSM相关问题Spring Security&#xff08;Shiro&#xff09;Security框架认证流程Security流程图展示 Vue相关指令四个阶段 axios Spring Security&#xff08;Shiro&#xff09; Spring Security是一个基于Spring 的安全框架&#xff…

软考A计划-电子商务设计师-电子商务系统规划

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

ChatGPT浪潮席卷,维智科技以时空AI赋能数实融合的未来城市

作者 | 伍杏玲 出品 | CSDN 每个时代都有新的技术浪潮&#xff0c;但在短短两年时间里见证两项颠覆全球的技术发展&#xff0c;实在出人意料之外&#xff1a;2021年以来&#xff0c;元宇宙成为互联网产业新风口&#xff0c;今年ChatGPT成为IT圈“顶流”&#xff0c;这两者为地…

数据在内存中的存储

目录 简介数据在内存中的存储方式 整形 有符号整形(signed) 无符号整形(unsigned) 原码、反码、补码 大端小端 整形提升 数据截断 浮点数在内存中的存储 S、E、M S M E double和float的存储模型 简介数据在内存中的存储方式 在讨论数据在内存中的存储方式之前&am…

类脑计算讲解

当前&#xff0c;人工智能的发展有两个主要路径&#xff0c;一个是沿计算机科学发展而来的深度学习途径&#xff0c;另一个是沿着模仿人脑发展而来的类脑计算途径。 类脑计算途径 这个方向是以模拟人脑神经网络计算为基础而发展出的一种新型芯片&#xff0c;通过模拟神经元和…

在线教育机构的视频如何做防下载和防盗录?

在线教育平台付费课程、企业内训的培训课程&#xff0c;这类视频课程内容是如何做防下载和防盗录的&#xff1f; 1.AI隐形溯源水印 这个功能能够将水印隐藏在视频中&#xff0c;不会影响观看体验&#xff0c;但却能够帮助企业很好的视频版权保护。更重要的是&#xff0c;对于盗…

【优化调度】基于改进遗传算法的公交车调度排班优化的研究与实现(Matlab代码实现)

目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 本文对当前公交企业调度系统进行了分析&#xff0c;建立了公交排班的数学模型。本文基于数据挖掘分析的结果上&#xff0c;使用截面客流量数据对模型进行约束&#xff0c;得出了公交客流出行的空间分布规律。再以…

ShareX_一款好用的截图工具安装- Window

择心】向大家介绍and安装ShareX ShareX 免费、开源、轻量多区域截图无缝处理截图屏幕录制、文件共享各种实用工具&#xff08;如拾色器&#xff0c;屏幕拾色器&#xff0c;尺子&#xff0c;图像编辑器&#xff0c;图像合并&#xff0c;图像分割器&#xff0c;生成图像缩略图&am…

三波混频下的相位失配原理

原理推导 在四波混频情况下&#xff0c;实现零相位失配是一件很困难的事情。因为在四波混频中&#xff0c;相位调制和增益都依赖于相同的参数&#xff0c;即克尔非线性 γ \gamma γ。这个问题可以用嵌入在传输线上的辅助共振元件的复杂色散工程来部分解决。 但是在三波混频中…

离散数学_十章-图 ( 5 ):连通性 - 上

&#x1f4f7;10.5 图的连通性 1. 通路1.1 通路1.2 回路1.3 其他术语 2. 无向图的连通性2.1 无向图的连通与不连通2.2 定理2.3 连通分支 3. 图是如何连通的3.1 割点&#xff08; 关节点&#xff09;3.2 割边&#xff08; 桥&#xff09;3.3 不可分割图3.4 &#x1d458;(&#…

华为OD机试真题 Java 实现【跳格子2】【2023 B卷 100分】,附详细解题思路

一、题目描述 小明和朋友玩跳格子游戏&#xff0c;有n个连续格子组成的圆圈&#xff0c;每个格子有不同的分数&#xff0c;小朋友可以选择从任意格子起跳&#xff0c;但是不能跳连续的格子&#xff0c;不能回头跳&#xff0c;也不能超过一圈。 给定一代表每个格子得分的非负整…

3.9 流水作业调度问题

博主简介&#xff1a;一个爱打游戏的计算机专业学生博主主页&#xff1a; 夏驰和徐策所属专栏&#xff1a;算法设计与分析 1.我对流水调度问题的理解 流水作业调度问题是动态规划中的一个经典问题&#xff0c;它涉及将一系列作业分配给多个工作站以最小化总完成时间。该问题的…

练习:有限状态机测试

练习&#xff1a;有限状态机测试 1 FSM 示例 在练习中&#xff0c;我们将使用两个 FSM。 两者都有输入字母 X {a, b} 和输出字母 Y {0,1}。 第一个 FSM 将称为 M1 并由以下有向图表示。 对于上面给出的每个 FSM Mi&#xff1a; 1.确定以下值&#xff0c;显示您的工作。 (a…

内存对齐原则

struct &#xff08;1&#xff09;结构体第一个数据成员放在offset为0的地方&#xff0c;后面每个成员相对于结构体首地址的偏移量&#xff08;offset&#xff09;都是成员大小&#xff08;该变量类型所占字节&#xff09;的整数倍&#xff0c;如有需要编译器会在成员之间加上填…

非煤矿山电子封条系统算法方案 opencv

非煤矿山电子封条系统算法部署方案是基于pythonopencv网络模型Ai视频图像识别技术&#xff0c;非煤矿山电子封条系统算法部署方案对出入井人员、人员变化及非煤矿山生产作业状态等状况&#xff0c;及时发现处理异常动态将自动发出警报。OpenCV的全称是Open Source Computer Vis…