RSIC-V“一芯”学习笔记(一)——概述
考研的文章和资料之后想写的时候再写怕趴
文章目录
- 一、阶段设计
- 二、环境、开发语言和工具
- 三、最重要的两个观念
- 四、处理器芯片设计
- 五、处理器芯片设计包含很多软件问题
- 六、处理器芯片的评价指标
- 七、复杂系统的构建和维护
- 八、专业世界观
- 九,提问的艺术(提问模板)
- 十、考核情况
一、阶段设计
- B阶段:以RVE为主、将RT-Thread移植到AM、在给定的面积预算内优化处理器设计
- A阶段:从RVE转到RV64IMAC、最终运行Linux发行版
- 开源EDA

二、环境、开发语言和工具
Linux环境:我准备直接用虚拟机了
软件:C语言、C++(少量)、gcc编译器。
(幸好之前苏嵌学过gcc、makefile等基础知识,底子打的好)
硬件开发:verilog 开源verilator仿真器+开源gtkwave波形查看器
(对于verilog,看了看之前学fpga的时候,倒是了解过一点,但是学的不是很深入)
硬件配置:笔记本电脑就行,无需FPGA
(当然自己设计的处理器放在上面跑也是可以的)
这里比较推荐的是ASIC
三、最重要的两个观念
1.硬件需要软件的支持才能发挥作用
狭义的处理器芯片设计: RTL开发
广义的处理器芯片设计:计算机系统软硬件协同设计
2.复杂系统是迭代演进的(多周期->流水线->超标量->乱序执行)
做事规律-从易到难,逐步推进
推荐阅读:《 系统设计黄金法则:简单之美》,包云岗
KISS法则- Keep It Simple, Stupid
四、处理器芯片设计
本质:实例化和连续
可以用面包板开发,但是逐渐转成RTL开发(效率高、更方便)
补充:RTL级和Verilog语言
RTL:寄存器传输级
Verilog可以从五个层次对电路(系统)进行描述,包括:系统级、算法级、寄存器传输级(即RTL级)、门级、开关级。我们平时用的最多的为RTL级,故Verilog代码也经常被称为RTL代码。
入门verilog文章–想学verilog的,可以看看这篇文章
五、处理器芯片设计包含很多软件问题
两个本质原因
- 处理器芯片和其他芯片不同,离开软件就无法工作.
- 代码即软件- RTL代码也是,即使它描述的是硬件
需要使用合适的软件技术管理/维护/测试/评估/优化代码
软件怎么在处理器上运行?等等
六、处理器芯片的评价指标
- 正确性-最基本。运行100000000次后,是否也能正常运行?
- 软件支持–你设计的芯片只能运行排序程序,还是能启动Linux
- 微结构复杂度 - 单周期 复杂度 cache 分支预测
- PPA(性能(IPC主频)、功耗、面积)
- 可配置性
- 代码可读性、可维护性
七、复杂系统的构建和维护
- 了解全系统的每一处细节,为调bug有大方向
- 先完成后完美,体会每一项技术对系统带来的性能提升
- 构建正确的工具,提升开发速率
- 经验总结
八、专业世界观
- 代码要独立完成

九,提问的艺术(提问模板)
模板:
请回答以下问题:
- 你认为本问题是否属于能力训练的范畴?
- 是, 我应该尽最大努力解决这个问题来得到训练
- 否, 我要汇报讲义或框架代码中的问题, 或提供改进的建议
- 其他, 请补充说明
- 这个问题是否可以通过自己动手试一试来了解答案? (例如类似"执行ls会发生什么"/“C语言中除0会发生什么”/“Cache是直接相联更好还是组相联更好”)
- 是, 我试一试就可以知道答案
- 否, 这个问题不属于此类别
- 是否已经阅读并理解相关的报错信息
- 是
- 否
- 不适用, 这个问题没有报错信息
- 是否已经仔细阅读了讲义, 并确认讲义中没有提到相关信息
- 是
- 否
- 不适用, 这个问题属于调试的训练, 需要我独立解决
- 是否可以通过重新编译解决问题?
- 是
- 否
- 不适用, 这个问题和代码无关
- 是否已经尝试STFW?
- 是
- 否
- 不适用, 这个问题和我的代码强相关, 无法在网上直接搜索到相关信息
- 是否已经尝试RTFM?
是
- 否
- 不适用, 这个问题和手册无关
- 是否已经尝试RTFSC(包括Makefile等脚本和相关配置文件)?
- 是
- 否
- 不适用, 这个问题和代码无关
- 这个问题是否可以稳定复现?
- 是
- 否
-
请列出你认为对解决问题有帮助的版本信息, 可以是系统/工具/代码等版本.
-
请详细描述复现这个问题的具体步骤(需要的时候附上截图).
-
请描述你期望看到的结果.
-
请阐述你尝试的过程和得到的结果, 并针对这些尝试结果进行分析, 给出自己的思考(需要的时候附上截图).
十、考核情况
在所提交的项目里面随机注入三个bug,
覆盖软件、硬件、环境
约45分钟找出bug
相关文章:
RSIC-V“一芯”学习笔记(一)——概述
考研的文章和资料之后想写的时候再写怕趴 文章目录 一、阶段设计二、环境、开发语言和工具三、最重要的两个观念四、处理器芯片设计五、处理器芯片设计包含很多软件问题六、处理器芯片的评价指标七、复杂系统的构建和维护八、专业世界观九,提问的艺术(提问模板)十、…...
MATLAB读取图片并转换为二进制数据格式
文章目录 前言一、MATLAB 文件读取方法1、文本文件读取2、二进制文件读取3、 图像文件读取4、其他文件读取 二、常用的图像处理标准图片链接三、MATLAB读取图片并转换为二进制数据格式1、matlab 源码2、运行结果 前言 本文记录使用 MATLAB 读取图片并转换为二进制数据格式的方…...
时序数据库
SELECT *,max(lp_index) FROM lp.tdm_lp_original_data where ts > 2023-12-28 18:11:33.521 and ts < 2023-12-29 19:03:12.148 INTERVAL(2s) FILL(PREV) 在时间序列数据库TDengine中,FILL函数与GROUP BY子句结合使用,提供了对于在指定间隔内…...
【第一次使用finalshell连接虚拟机内的centos】小白处理方式
第一次使用finalshell连接centos7的时候,因为都是新环境什么都没有配置,所以就需要安装finalshell和对新的centos7 进行一些配置。 安装finalshel,默认不安装d盘,就需要对安装路径做一下调整,其余都是下一步默认安装的…...
Pinia 踩坑记录
1、子store中如何使用router 以user.ts 这个store为例 错误写法 // 说明:不能使用插件实例化router,否则获取不到router的函数 // 错误写法如下:import { useRouter } from "vue-router"actions:{login(){const router useRout…...
在ASP.NET MVC中使用JQuery提供的弹出窗口(模态窗口)
在ASP.NET MVC中使用JQuery提供的弹出窗口(模态窗口) 原理 使用<div>图层灵活显示在浏览器的任何位置。默认情况下指定<div>不可见 引用 样式表 在JQuery的官方网站可以下载对应的css样式表。打开官网的样例页。 找到样式表引用路径 …...
基本工具配置
github加速 github.ur1.fun java # ubuntu20.04 安装 openjdk-17-jdk sudo apt install openjdk-17-jdk java -version javac -version which java参考 openjdk gradle换源 修改gradle-wrapper.properties distributionBaseGRADLE_USER_HOME distributionPathwrapper/dis…...
计算机网络——应用层(3)
计算机网络——应用层(3) 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 点对点(P2P)P2P网络一般用途优点缺点总结 套接字编程基本步骤UDP套接字TCP套接字基本步骤 二者对比 小程一言 我的计算机网络专栏,是自…...
配置ssh实现互相免密登陆
一、实验要求 通过两台linux主机 配置ssh 实现互相免密登陆 的操作 二、实验思路 免密登录我们可以理解为使用公钥登录,这里分别使用两台主机(client)和(server)作为实验主机。 首先让client免密登录server&#x…...
【UEFI基础】EDK网络框架(ARP)
ARP ARP协议说明 从这里开始涉及到的网络协议都是比较通用的了,在一般的TCP/IP四层模型中都能够看到这些内容,不过这里主要介绍的还是其在BIOS下的实现,但是在此之前还是需要先说明ARP的作用。 ARP的全称是Address Resolution Protocol&am…...
Linux进阶课:目录(文件夹)与文件操作
1、ls与cat的区别是是什么? 答:ls命令的含义是list,显示当前目录中内容。不加参数时它显示当前目录中除隐藏文件外的所有文件及目录的名字。 cat命令是linux下的一个文本输出命令,通常是用于查看某个文件的内容的。 2、[abc]这个…...
Flink自定义Source模拟数据流
maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…...
[易语言]使用易语言部署工业级人脸检测模型
【框架地址】 https://github.com/ShiqiYu/libfacedetection 【算法介绍】 Libfacedetection是一个开源的计算机视觉库,主要用于实时的人脸检测。它利用深度学习技术,特别是卷积神经网络(CNN),实现了高精度的脸部定位…...
2024年海外推广怎么做?
要说如何做海外推广,绝大多数的外贸小伙伴都能说上一些,但是大部分人对于推广系统知识略知一二,没有构建一个系统化的知识框架。 海外推广的几大步骤 1.定策略 做海外推广前,我们需要制定一套营销策略,需要去定义一…...
Redis分布式锁--java实现
文章目录 Redis分布式锁方案:SETNX EXPIRE基本原理比较好的实现会产生四个问题 几种解决原子性的方案方案:SETNX value值是(系统时间过期时间)方案:使用Lua脚本(包含SETNX EXPIRE两条指令)方案:SET的扩展…...
好消息,Linux Kernel 6.7正式发布!
据有关资料显示,该版本是有史以来合并数最多的版本之一,包含 17k 个非合并 commit,实际合并的超过1K个。 那么该版本主要有哪边变化呢?下面我来一一列举一下: Bcachefs文件系统已被合并到主线内核,这是一款…...
【k8s】Kubernetes 声明式 API、命令式
1. 资源管理方式: 1>. 命令式对象管理∶直接使用命令去操作kubernetes资源 kubectl run nginx-pod --imagenginx:1.17.1 --port802>. 命令式对象配置∶通过命令配置和配置文件去操作kubernetes资源 kubectl create/patch -f nginx-pod.yaml3>. 声明式对…...
解锁营销新高度:幽灵鲨CRM推广平台线索对接功能详解
数字营销时代,线索对接是推动业务增长的关键。你是否为线索分布在不同的平台而来回切换?你是否为无法及时联系客户而错失商机?幽灵鲨CRM系统作为一款领先的客户关系管理解决方案,不仅实现了对主流推广平台的全面对接,更…...
uniapp 创建组件
组件:用于将某个功能的 HTML、CSS、JS 封装到一个文件中,提高代码的复用性和可维护性。 创建组件 一、在根目录中创建 components 文件夹,右键点击新建组件。 二、输入组件名称、选择默认模板、点击创建组件。 三、在组件中正常编写内容即可…...
Linux--部署 Tomcat 及其负载均衡
1.案例前置知识点 1)Tomcat简介 名称由来:Tomcat最初是由 Sun的软件构架师詹姆斯邓肯戴维森开发的。后来他帮助将其变 为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目OReilly都会出一本相关的 书,并且将其封面设…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
