首页 > 其他分享 >Rong晔大佬教程学习(1):背景与项目设计目标

Rong晔大佬教程学习(1):背景与项目设计目标

时间:2023-12-13 15:58:24浏览次数:30  
标签:教程 Rong 立即 指令 处理器 指令集 寄存器 设计 大佬

  riscv实际上是一种ISA的指令集,而处理器的设计的基本结构是不变的(如下所示),其区别在于所选用的指令集的类型,一般有ARM、RISCV、MIPS等,采用了不同的引擎,那么车的外观、系统等也会随之发生变化。

  采用RISCV,是因为它简洁、开源、明了,确定处理器设计的指令集后,我们还要对其进行硬件设计,因为指令又不是虚空的,不可能凭空就执行某一项操作,例如我们要进行加法运算,那就必须要有一个加法器来实现,而加法器的实现,就需要用到我们之前所学的硬件描述语言。

  要设计一款处理器,最重要是理解处理器的结构,同时理解每一个模块的作用,因此,本项目设计的处理器是单周期、单指令(add)的非常简单的处理器。

  开始设计处理器之前,首先对指令集进行讲解:RV32/64代表它是32位/64位的指令集,后面加上的IEMFDACQ代表每一种模块,其中RV32I是最简单、最基本的整数指令集,

   之前我们说的,设计的处理器只是单指令(add)的,而要通过add的指令测试,我们其实需要总共设计五个指令,分别是:

  1.ADD:R型,寄存器加法,将两个寄存器值相加;

  2.ADDI:I型,立即数加法,将一个寄存器值和一个立即数相加;

  3.BNE:B型,分支跳转,如果两个数不相等则进行一个指令的跳转;

  4.JAL:J型,跳转和链接,跳转指令,同时将下一个指令的地址存储下来;

  5.LUI:U型,高位立即数加载,将一个立即数作为高位存在寄存器中。

  在了解了指令后,我们需要了解处理器的结构,RISCV处理器是典型的哈弗结构:特征是指令存储和数据存储分离

   该项目实现的处理器结构如下:

   其中:

  1.inst_mem和data_mem分别代表指令存储器和数据存储器,由于该项目没有设计数据的存储,因此data_mem暂时没有用上;

  2.pc_reg:决定读哪一条指令;

  3.ctrl:分析指令,进行译码;给其他模块提供控制信号、地址信号和立即数值;

  4.reg_file:存储器堆;

  5.imm_gen:立即数扩展;从指令中取出的立即数不能直接用,需要根据指令结构的不同扩展为不同的32位立即数值,这个才是我们真正运算的数;

  6.ALU(arithmetic and logic unit):运算模块,使用寄存器值和立即数值进行相应的算数运算;

  5.由于不涉及数据存储,因此ALU计算结果会写会寄存器堆中;

  6.运算结束后还会有一些信号流回pc_reg中,从而确定下一条执行的指令。

标签:教程,Rong,立即,指令,处理器,指令集,寄存器,设计,大佬
From: https://www.cnblogs.com/liwilling/p/17899211.html

相关文章

  • 无涯教程-Java - xxxValue()函数
    该方法将调用该方法的Number对象的值转换为从该方法返回的原始数据类型。xxxValue()-语法这是每种原始数据类型的单独方法-bytebyteValue()shortshortValue()intintValue()longlongValue()floatfloatValue()doubledoubleValue()xxxValue()-返回值此方法返回......
  • 【教程】浅谈ios混淆和加固加密
    ​混淆:针对项目代码,代码混淆通常将代码中的各种元素(变量、函数、类名等)改为无意义的名字,使得阅读的人无法通过名称猜测其用途,增大反编译者的理解难度。虽然代码混淆可以提高反编译的门槛,但是对开发者本身也增大了调试除错的难度。开发人员通常需要保留原始未混淆代码用于调试。......
  • 【Python爬虫】Python爬虫入门教程&注意事项
    ​一、引言        随着互联网的快速发展,网络数据已经成为人们获取信息的重要来源。而爬虫技术作为获取网络数据的重要手段,越来越受到人们的关注。在众多编程语言中,Python因其易学易用、库丰富、社区活跃等优势,成为爬虫开发的首选。本文将带你走进Python爬虫的世界,让你......
  • cesium.js入门基础教程二 (影像和标注)
    影像简介Cesium加载大的虚拟地球默认是有影像的,如图:默认使用的影像是“BingMapsAerial”:影像提供者ImageryProvider除了途中列出的一些影像,开发者可以通过Cesium中的ImagerProvider影像提供者类创建所需的影像,Cesium中提供了很多种ImageryProvider影像提供类(不包括抽象......
  • 【UVCAD】- 多段线教程,及与线段的区别
    【UVCAD】手机二维CAD建模,不止是看图UVCAD专注于二维(2D)的移动计算机辅助绘图(CAD)。UVCAD具有触摸优化的直观界面和工具。使用UVCAD,您可以在触摸屏上用手指或铅笔进行真正的2D绘图、2D建模和2D设计。对于需要易于使用的工具来更快、更精确地创建图纸的设计师和绘图员来说,UVC......
  • 无涯教程-Java - 嵌套 if 语句函数
    nestedif-else嵌套语句这意味着您可以在另一个iforelseif语句中使用一个iforelseif语句。nestedif-语法if(Boolean_expression1){//当布尔表达式1为true时执行if(Boolean_expression2){//当布尔表达式2为true时执行}}nestedif-示例......
  • 智能AI问答系统ChatGPT网站系统源码(附系统部署教程)
    chatGPTGPT4.0,Midjourney绘画,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。然而,GPT-4对普通用户来说都是需要额外付费才可以使用。所以今天小编就整理一个真正免费的AI工具。不是一......
  • Rong晔大佬教程学习(0):前言
    2023-12-13在安装了tinyriscv的工具链之后,本想着说去看那个技术文档,但是那个技术文档只是相当于一个“使用手册”,而不是技术教程,所以说还是得去补一补计组的知识。前几天买了本riscv的书,想配合着b站的计组教程刷一刷,但是几天了书还在路上,万幸的是在b站看到了Rong晔......
  • JavaWeb教程
    JavaScriptJS是一门弱类型的语言,变量的数据类型由后面的赋值的类型决定。==是等于,做简单的字面值的比较;===是全等于,除了做字面值的比较外,还会比较两个变量的数据类型。vara="12";varb=12;a==b;//truea===b;//false在JavaScript中,所有的变量都可以作为一个布尔类型的......
  • Spring6教程
    入门使用Maven引入Spring6基础依赖环境:<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.2</version>......