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

news2024/12/25 2:46:39

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@日星月云

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云推出工作学习 AI 助手“通义听悟”;谷歌发布 PaLM2;吴恩达推出了三门课

&#x1f989; AI新闻 &#x1f680; 阿里云推出工作学习 AI 助手“通义听悟” 摘要&#xff1a;阿里云峰会・粤港澳大湾区上&#xff0c;阿里云宣布推出最新产品“通义听悟”&#xff0c;该产品能用于会议讨论、教学培训、调研访谈、视频观看等场景&#xff0c;依托大模型&a…

CDS Core Data Services S4 CDS view--1

下一代的数据库视图。比DDIC view能干。 也就是S4上了之后就用这个CDS view了。 目录 1. 软件安装 2. CDS view 是啥 3. 怎么去建CDS view 4. 如何修改一个CDS view&#xff0c;添加association关联 5. 一些有用的功能 6. 基础语法 6.1 Case 6.2 Cast 6.3 String 6…

【程序】基于matlab使用线性 FM 脉冲波形拉伸处理进行距离估计

一、前言 此示例展示了如何在使用线性 FM 脉冲波形的雷达系统中使用拉伸处理来估计目标的范围。 二、介绍 线性FM波形是现代雷达系统中的热门选择&#xff0c;因为它可以通过扫描宽带宽来实现高范围分辨率。然而&#xff0c;当带宽达到数百兆赫甚至千兆赫兹时&#xff0c;在数字…

【C进阶】文件操作(下)(详解--适合初学者入门)

目录 补充的知识点:> 标准流 FILE型 fopen(打开文件) fclose(关闭文件) 5.文件的随机读写&#x1f4bb; 5.1 fwrite&#x1f4c2; 5.2fread&#x1f4c2; 5.3fseek&#x1f4c2; 5.4 ftell&#x1f4c2; 5.5 rewind&#x1f4c2; 6.文本文件和二进制文件&#x1f4bb; 7.文件…

如何做好网站建设定制开发

随着互联网的发展&#xff0c;如今的网站建设技术越来越先进&#xff0c;所以在网站建设定制开发中就出现了很多的模版&#xff0c;如&#xff1a;企业类型、产品信息、品牌介绍等。当然网站建设定制开发不是说只要模版就行了&#xff0c;对于网站建设而言&#xff0c;模版只是…

【送书福利-第八期】《硅基物语.AI大爆炸: ChatGPT→AIGC→GPT-X→AGI进化→魔法时代→人类未来》

大家好&#xff0c;我是洲洲&#xff0c;欢迎关注&#xff0c;一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我&#xff01; 本文目录 一、前言二、内容介绍三、作者介…

如何进行网站建设定制开发

如今&#xff0c;由于互联网的迅速发展&#xff0c;市场竞争越来越激烈&#xff0c;企业想要在市场中保持竞争力&#xff0c;就必须要有自己的品牌形象。而网站建设则是品牌建设的重要组成部分&#xff0c;一个好的网站能够有效提升企业品牌形象&#xff0c;提高客户满意度和忠…

Linux LNMP(Linux NGINX MySQL PHP)

NGINX处理静态页面性能出色&#xff0c;但是动态页面几乎没有处理能力&#xff0c;比Apache还差 所以涉及动态页面的场合一般由PHP Python Java&#xff08;后缀php&#xff0c;py&#xff0c;jsp&#xff09;等处理 静态页面请求 客户端 -> nginx动态页面请求 …

【工具推荐】使用D3.js制作网页版网络拓扑图,可拖转可跳转链接

文章目录 一、有哪些工具可以生成带链接的网络拓扑图二、推荐使用D3.js三、写个 demo吧四、d3.js相关学习资料1.官方网站2.D3.js 教程3.D3.js 教程 一、有哪些工具可以生成带链接的网络拓扑图 有一些 JavaScript 库可以帮助你创建网络拓扑图&#xff0c;并且支持将每个节点作为…

chatgpt赋能python:Python函数相加:如何使用函数进行数学计算

Python函数相加&#xff1a;如何使用函数进行数学计算 在Python编程中&#xff0c;函数是一种非常有用的工具&#xff0c;可以将代码组织成可重复使用的块。函数可以接受输入并产生输出&#xff0c;也可以执行任何数量的操作。在本文中&#xff0c;我们将介绍如何使用Python函…

美创科技新一代 灾备一体化平台(DRCC v3.0)发布

随着数字化转型浪潮的迅速推进&#xff0c;关键基础设施的运行安全和业务连续性保证成为数字化建设的基石。 云计算时代带来的资产复杂性和灾备技术多态性&#xff0c;给灾备能力建设、灾备资源高效利用和日常灾备运营提出了新挑战。灾备建设如何“简单又弹性”、灾备运营如何“…

Cloudflare 的 Kafka 故事:在处理 1 万亿条消息的过程中吸取的经验教训

关键要点 Cloudflare在处理大量数据时使用Kafka集群&#xff0c;开发了一个通用的消息总线集群&#xff0c;以解耦团队、有效扩展和处理数万亿条消息。 为了解决事件驱动系统中无结构通信的问题&#xff0c;应建立一个强有力的契约&#xff1a;跨平台数据格式Protobuf帮助Cl…

【教程】路由器自动定时登录校园网

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 前景提要 Python脚本 Shell脚本(推荐) 路由器挂机 实现效果 前景提要 小米路由R4A千兆版安装breedOpenWRT教程以及救砖&#xff08;全脚本无需硬改&#xff09;【教程】保姆级红米AX6000刷UBoot和OpenW…

【Shiro】使用org.crazycake依赖的ShiroConfig

前言 整个Shiro专题中&#xff0c;这个部分是最早需要开始看的&#xff0c;主要先了解ShiroConfig都有哪些东西&#xff1b;由于这个项目使用的redis依赖是org.crazycake的shiro-redis&#xff0c;与我后面所用的不同&#xff0c;所以该部分只是简单的梳理了一下。 PS&#xf…

Hadoop高可用集群

HA高可用集群 HA介绍 什么是HA HA: High Availability&#xff0c;高可用集群&#xff0c;指的是集群7*24小时不间断服务。 为什么需要HA 在HDFS中&#xff0c;有NameNode、DataNode和SecondaryNameNode角色的分布&#xff0c;客户端所有的操作都是要与NameNode交互的&#xff…

PG数据库提示: FATAL: sorry, too many clients already

目录 场景&#xff1a; idea启动提示如下错误 翻译&#xff1a; 连接数相关查询&#xff1a; 原因分析&#xff1a; 解决方法&#xff1a; 场景&#xff1a; idea启动提示如下错误 org.postgresql.util.PSQLException: FATAL: sorry, too many clients alreadyat org.pos…

运维小白必学篇之基础篇第四集:vim文本编辑器实验

vim文本编辑器实验 1、创建a.txt文件&#xff0c;并复制到/tmp/file/目录下 2、创建1.txt文件的软链接文件11.txt 3、移动a.txt文件到/mnt目录下并改名为abc.txt 4、创建d1、d2目录&#xff0c;并在d1目录中创建文件a1、a2 5、删除d1目录和d2目录 6、查看/etc/man_db.conf文件的…

DPCNN:深度金字塔 CNN 文本分类网络

DPCNN&#xff08;Deep Pyramid CNN&#xff09;&#xff0c;是2017年腾讯AI-Lab提出的一种用于文本分类的网络&#xff0c;可以称之为"深度金字塔卷积神经网络"。 论文&#xff1a;Deep Pyramid Convolutional Neural Networks for Text Categorization 在之前的博…

运维小白必学篇之基础篇第五集:用户和组实验

用户和组实验 实验者&#xff1a;胡 阳 1、创建u1用户&#xff0c;指定UID为1050&#xff0c;并为该用户设置密码 2、创建u2用户&#xff0c;设置其不能登录操作系统 3、创建u3用户&#xff0c;指定其家目录为/mnt/u3 4、将u1用户改名为s1 5、创建用户u1&#xff0c;指定其UID…

为什么企业都需要一个ERP系统?对公司管理和业务增长都太重要了

什么是ERP系统&#xff1f; ERP&#xff08;Enterprise Resource Planning&#xff0c;企业资源计划&#xff09;系统是一种应用软件&#xff0c;它通过集成管理企业内部系统和外部合作伙伴系统的各种业务过程&#xff0c;来实现企业资源的最优化配置和利用。ERP系统涵盖了企业…