【计算机组成原理】RISC-V模型机的有限状态控制器设计

news2025/1/17 14:02:17

目录

一、RISC-V模型机的目标指令集

二、RISC-V模型机的部件设计

三、运算及传送指令的数据通路设计

四、访存指令的数据通路设计

五、转移类指令的数据通路设计

六、RISC-V模型机控制单元CU的有限状态机设计


一、RISC-V模型机的目标指令集

取指令并译码:根据PC从内存取出指令,PC+4 -> PC,译码

执行指令:首先根据指令字的字段,取出1~2个寄存器(rs1,rs2)内容,再根据指令具体功能,做不同操作

  • 算术逻辑运算:ALU运算,写寄存器
  • 传送类指令:生成立即数,写寄存器
  • 访存指令:计算存储器地址(ALU运算),读/写存储器
  • 转移类指令:比较数据(ALU运算),PC+偏移量 -> PC

二、RISC-V模型机的部件设计

CPU性能的重要指标:CPU速度(执行时间)

CPU执行指标 = 程序指令数 × 每条指令的时钟周期数(CPI)× 时钟周期长度

  • 单周期CPU:CPI = 1,但是时钟周期很长
  • 多周期CPU:CPI > 1,但是时钟周期很短,且某些硬件部件可共享

从CPU效率指标考虑,我们设计的RV32I的25条核心指令集,采用:

  • 直接连接(无总线)
  • 多周期CPU(性能和硬件成本优于单周期CPU)
  • 哈佛结构(指令和数据分开存储)

1. 指令存储器及取指令部件——取指令IF

  • 程序计数器 PC:存放指令地址,32位,取指令后自增4个字节(独立加法器)
  • 指令寄存器 IR:存放指令代码,32位
  • Mem[PC] -> IR, PC+4 -> PC
  • clk上跳沿:取指令(读存储器)
  • clk下跳沿:指令置入IR,更新PC

2. 指令译码器与立即数生成器——指令译码ID

(1)指令译码器

  • 初级译码器 ID1:①指令字段与格式解析器;②立即数生成器
  • 二级译码器 ID2:产生指令信号、ALU_OP

(2)立即数生成器

  • 立即数拼接与生成器:按照各格式,对立即数进行拼接与拓展,产生6个32位立即数
  • 6选1多路选择器:按照当前指令的格式,在6个立即数中选择一个输出,记为imm32

(3)指令二级译码器

  • 输入:ID1产生的opcode、func3、func7
  • 输出:指令信息8个,运算码ALU_OP

3. 运算器部件——执行EX

(1)通用寄存器堆 Regs

  • 32×32位寄存器,寄存器地址5位
  • 三端口:两个读端口,一个写端口(同时读出2个寄存器,写入1个寄存器)
  • 读出无需时钟,写入需要时钟
  • 读出的数据写入暂存器A和B,时钟clk_RR控制打入

(2)多功能运算部件 ALU

  • 32位,进行算术、逻辑、比较置数、移位运算
  • 选择信号:运算功能码ALU_OP
  • 组合逻辑电路:无需时钟信号
  • clk_F:将运算结果打入暂存器F

(3)标志位寄存器 FR 及标志位产生部件 FlagU

  • 组合逻辑电路
  • 输入:运算结果ALU_F
  • 输出:ZF、SF、CF、OF
  • 标志位寄存器 FR:保存ZF、SF、CF、OF信号
  • clk_F:将ZF、SF、CF、OF打入FR

(4)暂存器A、B、F

  • 32位寄存器,在多周期CPU中,一个机器周期操作的结果要存到暂存器中,供下个机器周期操作使用

4. 数据存储器 DM

  • 地址32位,数据32位,按字节编址,小端存储
  • clk_dm上跳沿:Mem_Write=0(读);Mem_Write=1(写)
  • DM_Addr:字地址(30位)
  • M_R_Data:读出数据
  • M_W_Data:写入数据

三、运算及传送指令的数据通路设计

如何连接部件?建立数据通路

1. 运算型指令——R型指令

  • 指令存储器 IM:取指令,由PC提供地址,在clk的上跳沿完成读操作,在clk下跳沿将机器指令写入IR
  • PC的控制:自增通过专有加法器完成,不受时钟控制,更新在clk下跳沿完成(PC_Write=1)
  • IR的控制:更新在clk的下跳沿完成(IR_Write=1)
  • 指令初级译码器:读出32位指令,各字段分别送数据通路部件(rs1、rs2、rd送寄存器堆地址,opcode、func3、func7送二级译码器ID2译码)
  • 寄存器堆:2个读端地址(rs1、rs2),一个写端地址(rd),2个读数据输出端口(直接打入暂存器A、B保存),一个写数据输出端口(从暂存器F的输出端引入),写控制信号在clk下跳沿有效(Reg_Write)
  • ALU:10种运算功能,由4位ALU_OP指定,输入A、B由暂存器A、B的输出端提供,运算结果输出暂存器F

2. 运算型指令——I型指令

3. 传送类指令——U型指令

 

 

四、访存指令的数据通路设计

①访问DM时,地址DM_Addr从哪里来?

  • EA = Reg[rs1] + imm32,如何实现地址加法?
  • Reg[rs1] -> A,rs2_imm_s = 1,则 A + imm32 -> F
  • 故访问DM时,地址DM_Addr可以直接由暂存器提供

 ②执行DM读操作时,读出的数据M_R_Data到哪里去?

  • lw指令执行DM读操作,读出的数据写入rd寄存器
  • 存储器读出数据端设置一个暂存器MDR,保存存储器读出的数据
  • 在下一个周期再将MDR的内容写回到rd寄存器
  • 故执行DM读操作时,读出的数据M_R_Data保存到MDR寄存器
  • 写回周期写入rd的写数据W_Data来源,多了MDR,故W_Data的二选一变成三选一

③执行DM写操作时,写入的数据M_W_Data由谁提供?

  • sw指令执行数据存储器的写操作,写入的数据是rs2寄存器的内容
  • rs2寄存器的内容保存在B暂存器中
  • 故执行DM写操作时,写入的数据M_W_Data由暂存器B提供

数据存储器

  • 地址:暂存器F提供,Why? EA = rs1 + imm32
  • 读出数据:接暂存器MDR,clk上跳沿读出,下跳沿打入MDR
  • 写入数据:从暂存器B引入,Why?sw指令:rs2 -> Mem,rs2内容在B中
  • 写使能信号:Mem_Write = 1,clk上跳沿写入

W_Data的三选一数据选择器

  • R型指令:w_data_s = 0,W_Data = F
  • I型运算指令:w_data_s = 0,W_Data = F
  • U型指令lui:w_data_s = 1,W_Data = imm32
  • I型访存指令lw:w_data_s = 2,W_Data = MDR

MDR

  • 输入:DMem读出数据
  • clk下跳沿读出数据打入MDR
  • 输出:数据写入W_Data

五、转移类指令的数据通路设计

转移地址专用加法器

  • 输入:PC0 + imm32
  • 输出:运算器结果写入PC受多路选择器控制

PC0暂存器

  • 输入:PC取指令周期,在clk下跳沿,PC0_Write = 1,将PC打入PC0
  • 输出:送入转移地址专用加法器

PC写入多路选择器:三选一

  • 所有指令的取值周期:PC_s = 0,PC + 4 -> PC
  • beq分支指令:ZF = 1 或 PC_s = 1,PC0 + imm32 -> PC
  • jal转移并链接指令:PC_s = 1,PC0 + imm32 -> PC
  • jalr转移并链接指令:PC_s = 2,F(=rs1+imm32) -> PC

W_Data的四选一数据选择器

  • R型指令:w_data_s = 0,W_Data = F
  • I型运算指令:w_data_s = 0,W_Data = F
  • U型指令lui:w_data_s = 1,W_Data = imm32
  • I型访存指令lw:w_data_s = 2,W_Data = MDR
  • J型转移指令jal:w_data_s = 3,W_Data = PC
  • I型转移指令jalr:w_data_s = 3,W_Data = PC
  • B型beq指令呢?w_data_s = ? S型sw指令呢?无所谓,因为不写rd,Reg_Write = 0

RV321目标指令集的25条核心执行执行的流程图

 

RV321目标指令集的25条核心执行执行的控制信号表

部件的控制信号表(高电平有效)

六、RISC-V模型机控制单元CU的有限状态机设计

如何产生部件控制信号?由操作控制信号形成部件(控制单元CU)产生

CU的实现方法

  • 硬布线控制器:组合逻辑电路
  • 微程序控制器:存储逻辑电路
  • 有限状态机 FSM:适用于FPGA器件,本质上是组合逻辑+时序逻辑

有限状态机原理:Finite State Machine,通过状态迁移来完成特定的顺序逻辑控制

有限状态机构成:1个状态存储器 + 2个函数

  • 状态存储器:由触发器构成,保存FSM的当前状态
  • 下一状态函数:根据输入和当前状态来产生状态触发器的激励信号,实现向次态转移
  • 输出函数:由当前状态、当前输入产生状态机的输出信号
  • 复位信号rst:初始化有限状态机为初始状态
  • 时钟信号clk:触发状态转移

1. 有限状态机原理

有限状态机设计步骤

  • 确定电路的输入、输出与状态,画出状态转移图
  • 状态化简:得到最简的状态转移图
  • 状态编码:采用8421码或格雷码或独热码都可
  • 求出下一状态和输出函数,用电路实现,或者采用HDL描述,用FPGA等器件实现

用有限状态机实现控制单元CU:

  • 输入变量:指令译码输出的指令信号(IS_R、IS_IMM等)
  • 输出变量:指令什么时间、要发送什么控制信号,由当前状态决定

2. 指令执行的状态转移图

指令执行流程图就是一个状态转移图,每个方框就是一个状态

  • 有重复状态,例如“Reg[rs1] -> A,Reg[rs2] -> B”
  • 合并重复状态,得到最简状态图

3. 状态编码及输出的控制信号

4. 控制单元CU的有限状态机

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

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

相关文章

编译原理笔记16:自下而上语法分析(3)构造 DFA、DFA 对下一步分析的指导(有效项目)

目录 由 NFA 用子集法构造 DFA由 LR(0) 项目直接构造识别活前缀的 DFA构造 DFA求拓广文法 GCLOSURE & GO例: 构造 DFA DFA 指导下一步分析有效项目 看了前面的内容,我们已经了解到:分析表和驱动器算法,是 LR 分析器的核心。 …

实训四:索引与视图 - SQL视图(teachingdb数据库)

SQL视图的定义与操纵 第1关:创建视图任务描述相关知识视图的定义创建视图 编程要求测试说明参考代码 第2关:创建视图-练习一任务描述相关知识编程要求测试说明参考代码 第1关:创建视图 任务描述 本关任务:建立计算机系的学生的视…

团体程序设计天梯赛-练习集L1篇⑧

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

C语言scanf/fscanf/sscnaf和printf/fprintf/sprintf的区别

总结 1.scanf/printf 是标准输入输出流函数(键盘、屏幕)。 2.fscanf/fprintf 适用于所有输入输出流(文件、键盘、屏幕…)。 3.sscanf/sprintf 是把格式化的数据写入某个字符串中,从某个字符串中读取格式化的数据。 第一组:scanf/printf scanf/printf是…

Oracle数据库从入门到精通系列之十八:详细总结Oracle数据库核心知识点

Oracle数据库从入门到精通系列之十八:详细总结Oracle数据库核心知识点 一、Oracle数据库核心概念二、Oracle非容器数据库三、Oracle容器数据库四、容器数据库和非容器数据库的区别五、Oracle数据库多租户六、Oracle数据库多租户数据库模型七、Oracle数据库类型八、O…

实训四:索引与视图 - MySQL开发技巧 - 索引

MySQL开发技巧 - 索引 任务描述相关知识索引是什么索引的分类索引的创建和删除查询表中索引 编程要求测试说明代码参考: 任务描述 本关任务:按照要求完成索引的创建。 相关知识 为了完成本关任务,你需要掌握: 索引是什么&#…

【Leetcode60天带刷】day31回溯算法——455.分发饼干 ,376. 摆动序列 , 53. 最大子序和

​ 题目: 455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块…

Android 13(T) - binder阅读(3)- binder相关的类

原先准备在binder阅读(3)中记录ServiceManager的使用,但是写着写着发现,如果不了解和binder相关的类,那么阅读起来将会由很多困惑,所以就先来记录binder相关的类了。记录完发现特别凌乱…先就这样吧。 1 UM…

【致敬未来的攻城狮计划】打卡3:点亮LED

点亮LED 本文主要参考文章:【致敬未来的攻城狮计划】— 连续打卡第十一天:FSP固件库开发点亮第一个灯。_嵌入式up的博客-CSDN博客 在32阶段我们已经接触过类似做法了。初始化引脚模式(可以手动库函数,或者在工具包图形化界面里配…

实训四:索引与视图 - MySQL开发技巧 - 视图

MySQL开发技巧 - 视图 任务描述相关知识视图的定义创建视图操作视图删除视图 编程要求测试说明参考代码 任务描述 本关任务:通过学习视图,创建一个单表视图和一个多表视图。 相关知识 为了完成本关任务,你需要掌握: 视图的定义…

工地扬尘智能监测系统 yolov7

工地扬尘智能监测系统通过yolov7网络算法模型技术,实时监测工地施工中的扬尘情况。工地扬尘智能监测系统利用AI视频智能分析技术,并将数据传输到数据中心进行分析。YOLOv7 的发展方向与当前主流的实时目标检测器不同,研究团队希望它能够同时支…

数据库管理-第八十四期 X10M来了(20230624)

数据库管理 2023-06-24 第八十四期 X10M来了1 Intel -> AMD2 PMEM -> XRMEM3 DDR4 -> DDR54 Flash cards总结 第八十四期 X10M来了 在第四十三期的时候,我曾经憧憬过Exadata X10M的到来,Oracle于6月22日正式公布Exadata X10M系列。其实5月已经…

chatgpt赋能python:Python在电气行业中的应用——从数据分析到自动化控制

Python在电气行业中的应用——从数据分析到自动化控制 介绍 Python语言作为一种高级编程语言,越来越受到电气行业的关注。随着互联网、物联网以及大数据时代的到来,电气行业需要将传统的工业控制与现代化的数据分析、智能决策等技术相结合,…

Java——《面试题——Dobbo篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 目录…

springboot+mybatis笔记学习

1.环境搭建 1.引入pom依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version> </dependency> <dependency><groupId>org…

人工智能(2):机器学习算法分类

根据数据集组成不同&#xff0c;可以把机器学习算法分为&#xff1a; 监督学习无监督学习半监督学习强化学习 1 监督学习 定义&#xff1a; 输入数据是由输入特征值和目标值所组成。 函数的输出可以是一个连续的值(称为回归&#xff09;&#xff0c;或是输出是有限个离散值&…

07- c语言字符串 (C语言)

一 字符串的定义及基本使用 1、什么是字符串 被双引号引用的字符集合&#xff01;例如&#xff1a;”hello” 、”world”&#xff0c;或者是以 \0 结尾的字符数组&#xff01;&#xff01;&#xff01; 比如&#xff1a;char ch[] {h, e, \0} 注意&#xff1a;”hello” 中…

Win10同时安装MYSQL5.7和MYSQL8.0版本

一、准备好两个MySQL版本的压缩包 官网下载网址&#xff1a;https://dev.mysql.com/downloads/ 二、安装 MYSQL5.7 2.1、解压文件夹&#xff0c;然后新建一个 my.ini文件 my.ini文件内容: [mysql] # 设置mysql客户端默认字符集 default-character-setutf8 port 3305 [mysq…

leetcode1.两数之和

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【LeetCode】 &#x1f353;希望我们一起努力、成长&#xff0c;共同进步。 题目链接 给定一个整数数组 nums 和一个整数目标值 target&am…

FPGA-DFPGL22学习1-上手开发板

文章目录 前言一、FPGA是什么&#xff1f;二、FPGA内部结构1) 可编程输入/输出单元2) 基本可编程逻辑单元3) 嵌入式块 RAM4) 丰富的布线资源5) 底层嵌入功能单元 Logos 系列芯片 前言 和原子哥一起学习FPGA 开发环境&#xff1a;正点原子 ATK-DFPGL22G 开发板 参考书籍&…