文章目录

  • 一、概述
  • 二、原理图
    • 2.1 ALU
      • 2.1.1 ALU 操作控制信号生成部件
      • 2.1.2 ALU 逻辑计算部件
      • 2.1.3 ALU 整体逻辑
    • 2.2 寄存器
      • 2.2.1 Reg 整体逻辑
    • 2.3 存储器
      • 2.3.1 Mem 整体逻辑
    • 2.4 多路选择器
      • 2.4.1 ALU_Asrc
      • 2.4.2 ALU_Bsrc
      • 2.4.3 ALU 和 MEM 之间的多路选择器
    • 2.5 PC
      • 2.5.1 next_pc 下指令逻辑部件
      • 2.5.2 pc_reg 指令寄存器
    • 2.6 取指器
      • 2.6.1 取值逻辑部件
    • 2.7 译码器
      • 2.7.1 译码逻辑部件
    • 2.8 立即数扩展器
      • 2.8.1 立即数扩展逻辑
  • 三、源码地址

一、概述

  整个 CPU 设计使用 Verilog 语言进行开发,使用 Vivado 进行集成开发,开发板为 PYNQ Z2,要实现的九条指令包括:add,slt,sltu,ori,lui,lw,sw,beq,jal ,在这篇博文里会首先对系统中的各个逻辑部件的功能和输入输出进行一个简单的介绍。

  相关文章:基于 RICS-V 架构的单周期处理器设计(含所有格式指令)—— 控制信号选取及代码结构分析

  博客内所有文章均为 原创,所有示意图均为 原创,若转载请附原文链接。

二、原理图

2.1 ALU

2.1.1 ALU 操作控制信号生成部件

  • 部件功能:将输入的 ALUctr 转化为 SUBctr 和 SIGctr 以及 OPctr 控制信号;
  • SUBctr :控制 ALU 执行加法计算还是减法计算,SUBctr = 1 时做减法,SUBctr = 0 时做加法;
  • SIGctr :控制 ALU 是执行 “带符号整数比较小于置 1” 还是 “无符号整数比较小于置 1” ,当 SIGctr = 1 时执行 “带符号整数比较小于置 1” ,SIGctr = 0 时执行 “无符号整数比较小于置 1” ;
  • OPctr :控制选择哪种运算的结果作为 Result 输出,因为所实现的 9 条指令只涉及加、按位或、操作数 B 选择和小于置 1 这四种运算,所以 OPctr 需要两位;

2.1.2 ALU 逻辑计算部件

  • 部件功能:根据 ALUctr 部件提供的控制信号对输入数据执行不同的算数或逻辑操作;
  • regA_iregB_i :ALU 的 A 端口和 B 端口的数据输入;
  • op_ctr | sig_ctr | sub_ctr :分别对应 ALUctr 提供的 OPctr 、SIGctr 和 SUBctr 控制信号;
  • res_o :输出 ALU 运算结果;
  • zero :零标志,当 res_o = 0 时 zero = 1 否则 zero = 0;

2.1.3 ALU 整体逻辑

  • 部件功能 :整个 ALU 的功能即根据外部提供的控制信号和输入的数据执行不同的操作,并将运算后的结果输出;
  • 部件输入 :regA_i 和 regB_i 分别对应 ALU 的 A 端口和 B 端口数据输入,alu_ctr 对应 ALU 控制信号(四位);
  • 部件输出 :res_o 为 ALU 运算后的结果,zero 为用于判断运算结果是否为零的零标志位;

2.2 寄存器

2.2.1 Reg 整体逻辑

  • 部件功能 :寄存器用于 CPU 中数据的暂存;
  • 部件输入 :ra rb rw 分别为寄存器 Ra 和 Rb 读取地址以及 Rw 写入地址,bus_w 为需要写入的数据,clk 为系统时钟,reg_wr 为寄存器写使能,rst_n 为置零位;
  • 部件输出 :bus_a 和 bus_b 分别为通过输入地址 ra 和 rb 从寄存器中读取的数据;

2.3 存储器

2.3.1 Mem 整体逻辑

  • 部件功能 :数据存储器,CPU 可从存储器中读取指定地址处的数据,也可将数据写入到指定地址处;
  • 部件输入 :addr 为读取和写入数据的地址,clk 为时钟周期,data_in 是要写入到存储器中的数据,mem_wr 为存储器写使能,rst_n 为置零位;
  • 部件输出 :data_out 为根据输入的 addr 地址从存储器中读出的数据;

2.4 多路选择器

2.4.1 ALU_Asrc

  • 部件功能 :ALU 的 A 端口输入数据的多路选择器,当 alu_asrc = 0 时选择寄存器 A 端口输出数据,当 alu_asrc = 1 时选择 PC ;
  • 部件输入 :alu_asrc 为选择信号,bus_a 为寄存器 A 端口输出数据,pc 为程序计数器 pc 中的 pc 数据;
  • 部件输出 :bus_ao 为根据 alu_asrc 控制信号选择的输入 ALU A 端口的数据;

2.4.2 ALU_Bsrc

  • 部件功能 :ALU 的 B 端口输入数据的多路选择器,当 alu_bsrc = 0 时选择寄存器 B 端口输出数据,当 alu_bsrc = 1 时选择常量值 4 ,当 alu_bsrc = 2 时选择立即数扩展器输出的数据;
  • 部件输入 :alu_bsrc 为选择信号,bus_b 为寄存器 B 端口输出数据,imm 为立即数扩展器扩展后输出的数据;
  • 部件输出 :bus_bo 为根据 alu_bsrc 控制信号选择的输入 ALU B 端口的数据;

2.4.3 ALU 和 MEM 之间的多路选择器

  • 该多路选择器暂时使用 三目运算 实现;
  • 部件功能 :选择写入寄存器的数据,当 mem_to_reg = 0 时选择当前周期 ALU 运算后的结果作为下周期写入寄存器的数据,当 mem_to_reg = 1 时选择数据存储器输出的数据作为下周期写入寄存器的数据;
  • 部件输入 :bus_w 为 ALU 运算后的结果,data_out 为数据存储器输出的数据;
  • 部件输出 :bus_wo 为下周期写入寄存器的数据;

2.5 PC

2.5.1 next_pc 下指令逻辑部件

  • 部件功能 :根据输入的控制信号以及数据计算下一条指令的地址;
  • 部件输入 :branch 表示当前指令是否是分支指令,ce 为置零位,imm 为立即数扩展,jump 表示当前指令是否是无条件跳转指令,pc 为当前周期的程序计数器也既当前正在执行的指令的地址,zero 表示 ALU 运算后的结果是否为零;
  • 部件输出 :next_pc 为下一条指令的地址;

2.5.2 pc_reg 指令寄存器

  • 部件功能 :根据输入的时钟周期和下指令地址控制整个系统的时钟周期,并在下个周期开始时将当前指令地址更新为前周期的下指令地址;
  • 部件输入 :clk 系统的时钟周期,next_pc 为下条指令的地址,rst_n 为置零位;
  • 部件输出 :cur_pc 为当前周期需要执行指令的地址;

2.6 取指器

2.6.1 取值逻辑部件

  • 部件功能 :根据输入的地址取出相应的指令后输出;
  • 部件输入 :addr 为指令地址,ce 为置零位;
  • 部件输出 :inst 为 addr 地址所对应的指令;

2.7 译码器

2.7.1 译码逻辑部件

  • 部件功能 :根据输入的指令对指令进行译码并将译码后的控制信号输出;
  • 部件输入 :inst_i 为待译码的指令,rst_n 为置零位;
  • 部件输出 :指令译码后各部件对应的控制信号;

2.8 立即数扩展器

2.8.1 立即数扩展逻辑

  • 部件功能 :根据 ExtOp 控制信号对输入的指令中的立即数进行扩展;
  • 部件输入 :ext_op 为立即数扩展控制信号,instr 为待扩展立即数的指令;
  • 部件输出 :imm 为扩展后的立即数;

三、源码地址

   https://github.com/TIYangFan/CPU-Design-Based-on-RISC-V (如果可以帮到你,请帮忙 Star ~)

基于 RICS-V 架构的单周期处理器设计(含所有格式指令)—— 逻辑部件概述相关推荐

  1. 基于 RICS-V 架构的单周期处理器设计(含所有格式指令)—— 控制信号选取及代码结构分析

    文章目录 一.概述 二.设计过程 2.1 选取指令 2.2 指令功能简述 2.3 设计过程概述 2.4 扩展码取值 2.5 三种 ALU 操作信号 2.5.1 操作信号取值 2.5.1 操作信号编码 ...

  2. 基于RICS-V的单周期处理器设计

    基于RICS-V的单周期处理器设计 文章目录 基于RICS-V的单周期处理器设计 1.概述 2.原理图 3.各个模块 3.1.ALU 3.2.立即数扩展器 3.3.取指令器 3.4.译码器 3.5.寄 ...

  3. 基于RISC-V指令集架构的单周期CPU与五级流水线的实现(一)——分析

    本文是为完全不了解CPU的朋友所写的入门级教程,对于较为精通的朋友,多数章节均为赘述,完整代码在下一篇博客中,请见谅哈 一.实现功能 实现了部分RV32I指令集中的部分指令类型,如下表 具体指令如下( ...

  4. 基于 RICS-V 架构的单周期 38 条指令处理器设计(含源码及实验报告)

    一.概述   之前有专门的写过两篇博文来介绍基于 RICS-V 架构的单周期九条指令处理器设计,并提供了相关的代码结构介绍,之后我又对其进行了拓展,且修补了之前源码中存在的一些小问题,并将指令集从九条 ...

  5. 31条指令单周期cpu设计(Verilog)-(二)总体设计

    目录 31条指令单周期cpu设计(Verilog)-(一)相关软件 31条指令单周期cpu设计(Verilog)-(二)总体设计 31条指令单周期cpu设计(Verilog)-(三)指令分析      ...

  6. 从零开始设计RISC-V处理器——单周期处理器的设计

    系列文章目录 (一)从零开始设计RISC-V处理器--指令系统 (二)从零开始设计RISC-V处理器--单周期处理器的设计 (三)从零开始设计RISC-V处理器--单周期处理器的仿真 (四)从零开始设 ...

  7. 基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门(TI达芬奇双核开发资料 [

    基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门 一.简介 TI的达芬奇架构嵌入式应用处理器使用DSP与ARM结合的非对称多核结构,当然现在也有管脚全兼容的单核.本文要介绍的 ...

  8. 【Computer Organization笔记10】单周期CPU设计:基于7条MIPS指令的数据通路

    本次笔记内容: P19 计算机组成原理(19) P20 计算机组成原理(20) 本节课对应幻灯片: 组成原理24 singlecycle.pptx 基于上节课的7条MIPS指令的数据通路,分别针对7条 ...

  9. 计算机原理与结构 实验3《单周期微处理器设计》

    实验3<单周期微处理器设计> 一.实验目的 掌握:如何采用Verilog设计时序逻辑电路: 掌握:利用Quartus II 设计CPU的基本原理核方法: 掌握:指令系统的设计与实现方法. ...

最新文章

  1. dns短域名会引起nslookup解析总解析到一个IP
  2. Bitcoin.com推出BCH新图表,加大对BCH的支持
  3. 小鸭脖大生意——绝味鸭脖背后的故事
  4. 实现pxe的自动化安装
  5. idou老师教你学Istio06: 如何用istio实现流量迁移
  6. 【站点部署】解析二级域名并部署站点
  7. 软件开发模型_QT开发(二十三)——软件开发流程
  8. 刚刚,任正非为姚安娜商标事件道歉
  9. oracle 制定定时任务
  10. $.ajax()方法详解(转)
  11. 【贪心School】机器学习课程笔记
  12. Linux密码忘了怎么办!
  13. c# chart 各个属性_C#之Chart控件系列教程
  14. win10文件夹加密_如何使用电脑(win10)局域网共享文件给nPlayer(SMB)
  15. 《世界顶级思维》读后感 —— 上篇
  16. Linux操作命令分类详解 - 目录文件(二)
  17. 关于计算机信息管理专业教学改革的相关文章,计算机信息管理专业论文范文
  18. 北大计算机直博生,直博生培养方案-北京大学.doc
  19. Learning Git Branching笔记总结
  20. 我在南方的艳阳里大雪纷飞

热门文章

  1. 使用do-while循环结构实现:计算1~50中的倍数的数值之和并输出
  2. 企业黄页是什么意思?企业黄页有什么用处?
  3. aliyun centos7.5,安装mysql5.6数据库,navicat 连接数据库
  4. Pytorch:多块GPU分布式|并行训练
  5. Flash在多标签浏览器中的问题
  6. 东大22春《电工电子技术及应用》在线平时作业2百分资料
  7. b+树时间复杂度_图解:计算机数据结构中的 6 种「树」,你心中有数了吗?
  8. 人工智能讲师AIGC chatGPT讲师叶梓:chatGPT原理与实践提纲
  9. [DDCTF2018]流量分析
  10. 谷歌浏览器Chrome能干掉谁?