蜂鸟学习笔记E203(七)——写回、存储器和ICB总线

news2024/11/20 23:39:52

一、 蜂鸟E203处理器的写回硬件实现

核心思想如下

  • 将指令划分为单周期指令和长指令两大类
  • 将长指令的交付和写回分开,使得即使执行力多周期的长指令也不会阻塞流水线,妨碍单指令

主要包含最终写回仲裁、长指令写回仲裁
在这里插入图片描述

最终写回仲裁

长指令的写回比单周期指令的写回具有更高的优先级,在没有长指令写回的空闲周期,后面的单周期指令可以随时写回,乱序写回。
最终写回仲裁的部分源代码如下所示

module e203_exu_wbck(

  //////////////////////////////////////////////////////////////
  // The ALU Write-Back Interface
  input  alu_wbck_i_valid, // Handshake valid //alu表明有指令需要写回
  output alu_wbck_i_ready, // Handshake ready //wbck向alu返回读写反馈请求
  input  [`E203_XLEN-1:0] alu_wbck_i_wdat, // 从alu写回的数据值
  input  [`E203_RFIDX_WIDTH-1:0] alu_wbck_i_rdidx, // 写回的寄存器索引值
  // If ALU have error, it will not generate the wback_valid to wback module
      // so we dont need the alu_wbck_i_err here

  //////////////////////////////////////////////////////////////
  // The Longp Write-Back Interface
  input  longp_wbck_i_valid, // Handshake valid //表明有长指令需要写回
  output longp_wbck_i_ready, // Handshake ready //wbck向longpwbck返回读写反馈请求
  input  [`E203_FLEN-1:0] longp_wbck_i_wdat, // 从longpwbck写回的数据值
  input  [5-1:0] longp_wbck_i_flags, // 从longpwbck写回标志
  input  [`E203_RFIDX_WIDTH-1:0] longp_wbck_i_rdidx, // 从longpwbck写回的寄存器索引
  input  longp_wbck_i_rdfpu, // 从longpwbck写回到FPU的标志

  //////////////////////////////////////////////////////////////
  // The Final arbitrated Write-Back Interface to Regfile
  output  rf_wbck_o_ena, // 写使能
  output  [`E203_XLEN-1:0] rf_wbck_o_wdat, // 写回的数据值
  output  [`E203_RFIDX_WIDTH-1:0] rf_wbck_o_rdidx,  // 写回的寄存器索引


  
  input  clk,
  input  rst_n
  );

OITF模块和长治零写回仲裁模块

这两个模块完成所有长指令的写回操作。
执行不同的长指令所需要的周期数不同,我们使用OITF来纪录长治零的先后关系。OITF红的每个表项都带有一个指针(Instruction Tag),每个长指令都会带着这个ITAG。只要没有发生寄存器冲突都可以乱序写回,但是会增加硬件设计。

总结

E203如果只考虑单周期指令则为“顺序发射、执行写回”
如果仅讨论长指令“顺序发射、乱序执行、顺序写回”
如果都考虑“顺序发射、乱序执行、乱序写回”

二、 蜂鸟E203处理器的存储器

没有缓存

有一些低功耗处理器是不使用缓存的主要有以下几个原因

  • 无法保证实时性。有可能发生缓存不命中(cache miss),这就需要到外部存储器读取数据,所以一般使用ITCM和DTCM
  • 代码量较少
  • 面积和功耗考虑

ARM CortexM0、3、4都没有配备缓存 7配有缓存,是双发射6级流水线的CPU

一定要有存储器

哈佛体系结构特点

  • 将程序和数据存储在不同的存储空间中国,每个存储器独立编址,独立访问
  • 与两个存储器相对应的是两条独立的指令总线和数据总线。这样可以使得处理器在一个时钟周期内同时获得指令字和操作数
  • 取址和执行可以并行执行

ITCM和DTCM

M3和M4就配置了这两个,原因如下

  • 能够保证实时性,不存在缓存不命中的情况,延迟是可知的
  • 满足代码量要求
  • 面积功耗小

RISC-V对于存储器访问指令的简化

  1. 仅支持小端格式
  2. 无地址自增自减模式
  3. 无一次读多个数据和一次写多个数据的指令

在这里插入图片描述

AGU:负责读和写指令,以及A拓展指令集生成存储器访问地址
LSU:主要作为存储器访问的控制模块

三、 ICB总线

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

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

相关文章

Python的数据结构- 序列(sequence)

数据结构 - 序列(sequence) 序列的一个特点就是根据索引(index,即元素的位置)来获取序列中的元素,第一个索引是 0,第二个索引是 1,以此类推。 所有序列类型都可以进行某些通用的操作…

ChatGPT教我面试

​持续坚持原创输出,点击蓝字关注我吧 最近ChatGPT爆火,ChatGPT能干什么呢?想必已经看过很多文章了,例如ChatGPT通过美国高考、ChatGPT开发游戏、调试代码、写文章等等。 哈哈,作为一个软件测试博主,我怎么…

frp内网穿透SSH

参考博客: 博客1(推荐): https://sspai.com/post/52523 博客2: https://blog.csdn.net/qq_36981760/article/details/115713179 博客3: https://blog.csdn.net/qq_36981760/article/details/115713179 参考视频 (推荐,比较详细): https://www.bilibili.com/video/BV…

谈谈inline(内联函数)

目录1、例子抛出2、 了解inline2.1 宏替换的副作用2.2 内联函数2.3 有意思的点3、总结4、 感谢您的阅读!1、例子抛出 我们知道可以用宏定义来代替一个变量或者函数块: #define A 20 #define MYFUNC(a,b) ((a) > (…

Kubernetes双主集群的部署(二)

Kubernetes单主集群的部署(一)_Evens7xxX的博客-CSDN博客 上期完成了单主架构集群的部署,本期将在单主架构的基础上添加Master和负载均衡器 目录 二、k8s双主架构集群的部署 1.另一台Master同样做初始化配置 2.配置 Master02 3.配置负载均…

算法与数据结构31:DC3算法生成后缀数组

算法与数据结构31:DC3算法生成后缀数组什么是后缀数组引出DC3算法DC3算法具体实现DC3算法模板DC3模板的用法一个可以使用DC3的题什么是后缀数组 假设有字符串 aabaabaa 那么从每个位置开始,到结尾位置,截取后缀串,可得 a aa baa …

四面阿里巴巴如愿拿到offer定级P7,为此我筹备了半年

前言 每个程序员都有一个大厂的梦,而互联网大厂首当其冲自然是阿里巴巴最吃香,今天小编就来分享一个小伙进阿里巴巴的面经! “不想进大厂的程序员不是好程序员”哈哈哈 春节过后,本是金三银四之际,大部分人也都准备好…

【RealSense】L515学习记录

Intel RealSense™ SDK 2.0的安装 1、注册服务器的公钥: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8…

ChatGPT:chatGPT本地部署、运行和接口调用

文章目录从 github 下载环境配置conda 创建虚拟环境官方步骤配置环境安装 revChatGPT更改 config.json.example -> config.json将 config.json 移动到 revChatGPT 路径下cookie 信息写入 config.json方式1:使用账号密码作为登录的方法方式2: 使用 ses…

软件测试期末测试题及解析(五套试题共两万余字)

软件测试期末考试复习题题目软件测试期末考试复习题(一)一、单项选择题:二、判断题:三、简答题期末考试复习题(二)一、单项选择题:二、判断题:三、简答题期末考试复习题(…

并查集最重要的优化:路径压缩

本文章将直接讲解优化,对并查集还不理解或忘记的同学可以看以下两篇文章 并查集基础 优化:启发式合并 先赞后看好习惯 今天我们要来说另一种对并查集的优化:路径压缩 也许有些同学看了启发式合并会说:其实优化的也不多啊&…

定时器: Timer (Java)

定时器: Timer一、定时器是什么二、标准库中的定时器三、实现定时器3.1 定时器的构成3.2 实现细节3.3 完整代码一、定时器是什么 定时器也是软件开发中的一个重要组件。类似于一个 “闹钟”,即达到一个设定的时间之后,就执行某个指定好的代码。 定时器…

收藏 | 自然语言处理(NLP)数据集汇总(附下载链接)

🎄🎄【自然语言处理NLP】简介 🎄🎄 自然语言处理(Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门…

自制CPU

CPU是计算机的核心部件,其发展历程就是人类文明的发展史。 随着计算机技术的不断发展, CPU也从一开始的功能简单,到现在已经变成功能强大、应用广泛的芯片。 但要想更深入了解 CPU,你需要知道它是如何工作以及为什么这么做的。 你…

数据结构003:有效的数独

原文链接:数据结构003:有效的数独 题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3…

Lecture7:随机梯度下降算法问题及解决、dropout正则化、学习率的选择、迁移学习

目录 1.随机梯度下降算法问题及解决 1.1 随机梯度下降算法SGD的问题 1.2 具有动量的梯度下降算法SGDMomentum 1.3 Nesterov加速梯度法 1.4 AdaGrad 1.5 RMSProp 1.6 融合!Adam算法 2. 学习率的选取 3. 正则化 3.1 dropout正则化 4. 迁移学习 1.随机梯度下…

一篇文章带你了解python数据分析岗位怎么样

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 分析目标 各城市对数据分析岗位的需求情况 不同细分领域对数据分析岗的需求情况 数据分析岗位的薪资状况 工作经验与薪水的关系 公司都要求什么掌握什么技能 岗位的学历要求高吗 不同规模的…

详解C语言中的自定义类型(结构体,枚举,联合)

目录 1. 结构体 1.1 结构的声明 1.2 结构的自引用 1.3 结构体变量的定义和初始化 1.4 结构体内存对齐 (计算结构体的大小) 1.5 结构体传参 2. 位段(结构体实现位段) 2.1 什么是位段 2.2 位段的内存分配 2.3 位段的跨平台问题 3. 枚举 …

node.js-http模块学习

目录 1.什么是 http 模块 2.进一步理解 http 模块的作用 3.用node.js创建最基本的 web 服务器 req 请求对象: res 响应对象: 解决中文乱码问题: 根据不同的url响应 不同的html页面 1.什么是 http 模块 http 模块是 Node.js 官方提供的、…

3.Nacos系列之配置管理

上文中我们学习到服务的注册&#xff0c;本文我们进行服务的调用及配置管理相关的实践 1. 服务调用实践 接着上篇文章的代码&#xff0c;我们新建模块nacos-service-consumer 在pom.xml目录下新增依赖 <dependencies><dependency><groupId>org.springfra…