【头歌实训】【基于 Logisim 的 RISC-V 处理器设计 · 终】

news2024/11/26 10:44:40

真的恶心,我哭死

目录

前言

一、说明

1、参考 

2、建议

二、处理器设计

三、Control器件设计

1、加速经常性事件,提高效率 

2、控制信号设置

1.RegWEn

2.IMMSel

3.BSel 

4.ALUSel & WBSel

5.MemWEn 

6.PCSel & ASel

7.ALUB

总结 


前言

为了能够加深我们的理解,教员开启了基于Logism的RISC-V处理器的实现

总体而言, 实验是逐步加深的,然而每一关的难度确实大(主要来自于这么多接线,一点点错误就会导致死循环/报错),最终还是做完了。

实验共9关,从第四关开始(印象中是),后面的几关都是基于前面的完成的部分,不断添加功能(所以后面每一关都是复制粘贴前一关后,再新加内容),最后一关可以说集成了从第四关开始的所有功能——第九关向前兼容。理论上说,第九关的结果(代码),可以秒杀从第四关起的所有关卡。

而第九关确实基本实现了RISC-V的处理器设计,所以,作为总结,也便于同学们参考,将第九关的线路图,代码不会开源(有图实际上是开源的,但总不能什么都不练习吧)


一、说明

1、参考 

参考了一个大佬的博客,大佬提供了1~9关的详细思路。

实训——基于 Logisim 的 RISC-V 处理器设计_不知地下宫阙的博客-CSDN博客

好的博客不应该被埋没!!

2、建议

从第四关开始的处理器设计中,更为困难的是control部件的排布。大佬将线连的十分美观 ,然而本蒟蒻知识比较浅薄,采用了对照表格分点实现的理念。虽然丑陋且大量,但是清晰且容易后期的修改。

二、处理器设计

三、Control器件设计

1、加速经常性事件,提高效率 

加速经常事件是一个重要的原理 ,所以单独将opcode和func3取出。此外,将opcode和指令类型的比较也是经常性的,这个结构也可以反复复制粘贴进行复用。


2、控制信号设置

核心功能对照表格:

控制信号名取值
RegWEnI 类型指令、R 类型指令、 J 类型跳转指令、U 类型指令为 1'b1;
其余指令设置为 1'b0
IMMSelI 类型计算指令设置为 5'b00001;
S 类型写入内存指令设置为 5'b00010;
B 类型跳转指令设置为 5'b00100;
J 类型指令设置为 5'b01000;
U 类型指令设置为 5'b10000;
该控制信号不影响 R 类型计算类指令运行结果
BSelR类型计算类指令设置为 1'b0;
其余指令设置为 1'b1
ALUSelI 类型计算指令、R 类型计算类指令为 funct3 字段与指令次高位拼接得到;
I 类型加载内存指令、S 类型写入内存指令、B 类型跳转指令、J 类型跳转指令、I 类型 JALR 指令、U 类型指令设置为 4'b0000(在本关卡设置下,该选项不影响 LUI 指令执行,但为了统一评测标准,请将 LUI 指令运行时的 ALUSel 信号也设置为 4'b0000)
MemWEnS 类型写入内存指令设置为 1'b1;
其余指令设置为 1'b0
WBSelI 类型计算指令、R 类型计算类指令设置为 2'b00;
I 类型加载内存指令设置为 2'b01;
I 类型 JALR 指令、J 类型 JAL 指令设置为 2'b10;
该控制信号不影响 S 类型写入内存指令、B 类型跳转指令、U 类型指令的运行结果(为便于评测,请在电路中将 S 类型、B 类型、U 类型三种指令的 WBSel 值设置为 1'b0)
PCSel满足跳转条件的 B 类型跳转指令、J 类型无条件跳转指令、I 类型 JALR 指令设置为 1'b1;
其余指令设置为 1'b0
ASelB 类型跳转指令、J 类型无条件跳转指令、U 类型 AUIPC 指令设置为 1'b1;
其余指令设置为 1'b0
(在本关卡设置下,该选项不影响 LUI 指令执行,但为了统一评测标准,请将 LUI 指令运行时的 ASel 信号设置为 1' b0)
ALUBU 类型 LUI 指令设置为 1'b1;
其余指令设置为 1'b0

1.RegWEn

2.IMMSel

3.BSel 

4.ALUSel & WBSel

5.MemWEn 

6.PCSel & ASel

7.ALUB

  

至此,完毕。 


总结

很有难度,但是题目总是要做的嘛。

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

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

相关文章

【C语言】标准库(头文件、静态库、动态库),windows与Linux平台下的常用C语言标准库

一、Introduction1.1 C语言标准库1.2 历代C语言标准1.3 主流C语言编译器 二、C语言标准库2.1 常用标准头文件2.2 常用标准静态库 三、windows平台四、Linux平台五、常用头文件功能速览5.1 通用常用头文件01. stdio.h——标准输入输出02. stdlib.h——内存管理与分配、随机数、字…

Git常用命令reset和revert

Git常用命令reset和revert 1、reset 用于回退版本,可以指定退回某一次提交的版本。 checkout 可以撤销工作区的文件,reset 可以撤销工作区/暂存区的文件。 reset 和 checkout 可以作用于 commit 或者文件,revert 只能作用于 commit。 命…

为什么 String#equals 方法在做比较时没有使用 hashCode

一个疑问的引入 我之前出于优化常数项时间的考虑,想当然的认为 String#equals 会事先使用 hashCode 进行过滤 我想像中的算法是这样的 当两个 hashCode 不等时,直接返回 false(对 hash 而言,相同的输入会得到相同的输出&#x…

数据安全复合治理框架和模型解读(0)

数据治理,数据安全治理行业在发展,在实践,所以很多东西是实践出来的,哪有什么神仙理论指导,即使有也是一家之说,但为了提高企业投产比,必要的认知是必须的,当前和未来更需要专业和创新。数据安全治理要充分考虑现实数据场景,强化业务安全与数据安全治理,统一来治理,…

学会了程序替换,我决定手写一个简易版shell玩一玩...

文章目录 💐专栏导读💐文章导读🐧程序进程替换🐦替换原理🐦替换函数🐔观察与结论🐔函数命名理解 🐧myshell编写🔔代码展示🔔效果展示 🐧myshell_p…

Vue电商项目--分页器制作

分页器静态组件 分页这个组件&#xff0c;不单单是一个页面用到了。多个页面同时用它,因此我们可以封装成一个全局组件 需要将这个分页结构拆分到components 通用的分页组件Pagination <template><div class"pagination"><button>1</butto…

【C语言】函数规则及入门知识

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 ⚡注&#xff1a;此篇文章的 部分内容 将根据《高质量 C/C 编程指南》 —— 林锐 进行说明。该部分将用橙色表示。 &#x1f525;该篇…

新手建站:使用腾讯云轻量服务器宝塔面板搭建WP博客教程

腾讯云轻量应用服务器怎么搭建网站&#xff1f;太简单了&#xff0c;轻量服务器选择宝塔Linux镜像&#xff0c;然后在宝塔面板上添加站点&#xff0c;以WordPress建站为例&#xff0c;腾讯云服务器网来详细说下腾讯云轻量应用服务器搭建网站全流程&#xff0c;包括轻量服务器配…

html5视频播放器代码实例(含倍速、清晰度切换、续播)

本文将对视频播放相关的功能进行说明&#xff08;基于云平台&#xff09;&#xff0c;包括初始化播放器、播放器尺寸设置、视频切换、倍速切换、视频预览、自定义视频播放的开始/结束时间、禁止拖拽进度、播放器皮肤、控件按钮以及播放控制等。 图 / html5视频播放器调用效果&a…

java web 基础springboot

1.SprintBootj集成mybaits 连接数据库 pom.xml文件添加依赖 <!-- mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!-- …

学习HCIP的day.09

目录 一、BGP&#xff1a;边界网关路由协议 二、BGP特点&#xff1a; 三、BGP数据包 四、BGP的工作过程 五、名词注解 六、BGP的路由黑洞 七、BGP的防环机制—水平分割 八、BGP的基本配置 一、BGP&#xff1a;边界网关路由协议 是一种动态路由协议&#xff0c;且是…

花果山博客

1&#xff1a;前言 2&#xff1a;项目介绍 3&#xff1a;统一返回结果 4&#xff1a;登录功能实现 前言 简单介绍一个写这个博客的目的。 因为之前学开发都是学完所需的知识点再去做项目&#xff0c;但是这时候在做项目的过程中发现以前学过的全忘了&#xff0c;所以为了减少这…

Vue3导入Element-plus方法

先引入依赖 npm install element-plus --savemain.js中要引入两个依赖 import ElementPlus from element-plus; import "element-plus/dist/index.css";然后 这个东西 我们最好还是挂载vue上 所以 还是 createApp(App).use(ElementPlus)然后 我们可以在组件上试一…

腾讯云轻量服务器镜像安装宝塔Linux面板怎么使用?

腾讯云轻量应用服务器宝塔面板怎么用&#xff1f;轻量应用服务器如何安装宝塔面板&#xff1f;在镜像中选择宝塔Linux面板腾讯云专享版&#xff0c;在轻量服务器防火墙中开启8888端口号&#xff0c;然后远程连接到轻量服务器执行宝塔面板账号密码查询命令&#xff0c;最后登录和…

从零搭建微服务-认证中心(二)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff1a;https://gitee.com/csps/mingyue 文档地址&#xff1a;https://gitee.com/csps/mingyue/wikis 创建新项目 MingYue Idea 创建 maven 项目这…

操作系统第五章——输入输出管理(下)

提示&#xff1a;枕上诗书闲处好&#xff0c;门前风景雨来佳。 文章目录 5.3.1 磁盘的结构知识总览磁盘 磁道 扇区如何从磁盘中读/写数据盘面 柱面磁盘的物理地址磁盘的分类知识回顾 磁盘调度算法知识总览磁盘的读写操作需要的时间先来先服务算法FCFS最短寻找时间优先SSTF扫描算…

SVG图形滤镜

SVG有提供Filter(滤镜)这个东西&#xff0c;可以用来在SVG图形上加入特殊的效果&#xff0c;像是图形模糊化、产生图形阴影、将杂讯加入图形等。以下介绍的是图形模糊化、产生图形阴影这2个滤镜效果。 浏览器对于SVG Filter的支援 SVG : 滤镜 (仅列出部分有使用到的属性) <…

【数据结构】超详细之实现栈

栈的实现步骤 栈的介绍栈的初始化栈的插入(入栈)栈的出栈获取栈顶元素获取栈中有效元素个数检测栈是否为空销毁栈栈元素打印 栈的介绍 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xf…

快捷转换/互转 Markdown 文档和 TypeScript/TypeDoc 注释

背景 作为文档工具人&#xff0c;经常需要把代码里面的注释转换成语义化的 Markdown 文档&#xff0c;有时也需要进行反向操作。以前是写正则表达式全局匹配&#xff0c;时间长了这种方式也变得繁琐乏味。所以写了脚本来互转&#xff0c;增加一些便捷性。 解决方案 注释转 M…

【C++】初遇C++

认识C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机界提出了OOP(object orient…