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晔大佬教程学习(1):背景与项目设计目标的更多相关文章

  1. MapServer Tutorial——MapServer7.2.1教程学习——教程背景

    MapServer Tutorial——MapServer7.2.1教程学习——教程背景 一.前言 目前处于MapServer学习入门阶段,所以每一步都需要打下扎实基础.尽自己最大的努力,去学习知识的 ...

  2. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.7 Adding a wms layer

    MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.7 Adding a wms layer 前言 Add OGC WMS Layers( ...

  3. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.5 Adding a raster layer

    MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.5 Adding a  raster layer 一.前言 MapServer不仅支持 ...

  4. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example 1.4 Labeling the Map

    MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example 1.4 Labeling the Map 一.前言 MapServer拥有非常灵活的标签 ...

  5. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.1 A map with single layer

    MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.1 A map with single layer 一.前言 开始MapServer用 ...

  6. MapServer Tutorial——MapServer7.2.1教程学习——第一节:MapServer的基本配置管理,静态地图应用以及MapFile文件

    MapServer Tutorial——MapServer7.2.1教程学习——第一节:MapServer的基本配置管理,静态地图应用以及MapFile文件 前言 万事开头难,有了<MapSer ...

  7. MapServer Tutorial——MapServer7.2.1教程学习(大纲)

    MapServer Tutorial——MapServer7.2.1教程学习(大纲) 前言 最近在学习Gis方面的知识,因为电脑硬件配置偏低,顾选择MapServer入手.网上搜索MapServer系 ...

  8. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一)

    原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一) 写下此文章只为了记录Surging微服务学习过程,并且分享给广大想学习surging的基友,方便广大 ...

  9. .Net程序员之Python基础教程学习----列表和元组 [First Day]

    一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...

  10. objective-c基础教程——学习小结

    objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...

随机推荐

  1. Linux校验文件MD5和SHA值的方法

    1.需求背景 下载或传输文件后,需要计算文件的MD5.SHA256等校验值,以确保下载或传输后的文件和源文件一致 2.校验方法 如上图所示,可以使用Linux自带的校验命令来计算一个文件的校验值 Li ...

  2. 《Python魔法大冒险》007 被困的精灵:数据类型的解救

    小鱼和魔法师深入魔法森林,树木之间流淌着神秘的光芒,每一片叶子都似乎在低语着古老的咒语.不久,他们来到了一个小湖旁,湖中央有一个小岛,岛上困着一个透明的泡泡,里面有一个悲伤的精灵. 小鱼看着那个精灵, ...

  3. 杰哥教你面试之一百问系列:java中高级多线程concurrent的使用

    目录 问题1:什么是ConcurrentHashMap?它与HashMap的区别是什么? 问题2:什么是CopyOnWriteArrayList?它适用于什么样的场景? 问题3:什么是Blocking ...

  4. 正则表达式快速入门三: python re module + regex 匹配示例

    使用 Python 实现不同的正则匹配(从literal character到 其他常见用例) reference python regular expression tutorial 目录 impo ...

  5. 关于关闭Sublime Text自动更新提示

    Sublime Text默认提示自动更新,实在让人烦不胜烦,那么有没有办法解决嘞,那当然是有的,下面就教你如何关闭Sublime Text自动更新提示 首先注册,不注册的话,一切操作都没有用:(注册码 ...

  6. Building-Mobile-Apps-with-Ionic-2中文翻译工作

    最近没啥工作量, 然后学完了这本书, 接着又茫然找不到该干啥, 所以想着何不翻译这个书呢. 这本书首先给我们普及了Ionic 2的基础知识, Ionic 2和Ionic 1有本质上的区别, Ionic ...

  7. JavaAgent寄生在目标进程中引起的ClassNotFoundException

    今天有解决方案部的小伙伴反映,我公司XWind产品在分析客户应用程序的潜在性能问题时,总是显现诊断任务异常,为了定位问题的根因,我们马上要求解决方案部的小伙伴提供XWind相关的日志,从日志中找到了如 ...

  8. Solution -「CF 959E」Mahmoud and Ehab and the xor-MST

    Description Link. 一完全图有 \(n\) 个节点 \(0,...,n-1\),其中边 \((i,j)\) 的权值为 \(i\oplus j\),其中 \(\oplus\) 为位异或操 ...

  9. Centos7中防火墙打开3306端口(亲测)

    开放3306端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent     开启防火墙 systemctl start firewa ...

  10. 前端三件套系例之BootStrap—— BootStrap组件、BootStrap插件

    文章目录 1 BootStrap组件 1 Glyphicons 字体图标 2 下拉菜单 2.1 基本使用 2.2 对齐 2.3 标题 2.4 分割线 2.5 禁用的菜单项 3 按钮组 3.1 基本使用 ...