MIPS/RISC-V RegFile设计

任务描述

本关任务:利用 Logisim 平台构建一个简化的 MIPS/RISC-V 寄存器文件,内部包含8个8位寄存器。

相关知识

寄存器文件(RegFile)又称寄存器堆,是CPU中多个寄存器组成的阵列。MIPS/RISV-V寄存器文件通常具有两个读端口与一个写端口,可以多路并发访问不同的寄存器,从而提高CPU的数据吞吐能力。其原理示意图如下:

 

写入端口可以采用译码器或者多路分配器(解复用器DMUX),读出端口可以采用多路选择器(数据选择器MUX)。

引脚说明

信号I/O位宽说明
R1#输入3 位第1个读寄存器的编号
R2#输入3 位第2个读寄存器的编号
W#输入3 位写寄存器的编号
CLK输入1 位时钟信号,上升沿有效
WE输入1 位寄存器写使能
Din输入8 位寄存数据输入,WE=1、 CLK↑将Din写入W#寄存器
RD1输出8 位R1# 寄存器的值,0号寄存器的值恒零
RD2输出8 位R2# 寄存器的值,0号寄存器的值恒零

实验内容

实验电路框架RegFile.circ下载:鼠标右击右侧代码区,Download File 在Logisim中打开实验电路框架,在工程中绘制电路并进行测试。

封装外观

 

测试说明

请用记事本或者其他纯文本编辑器打开电路文件(RegFile.circ),全选、复制,然后粘贴到代码窗口中,点击右下方的“评测”按钮,平台会对你的代码进行测试。

部分代码段:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project source="2.15.0.2.exe" version="1.0">
This file is intended to be loaded by Logisim http://logisim.altervista.org
<lib desc="#Wiring" name="0">
    <tool name="Splitter">
      <a name="facing" val="west"/>
      <a name="fanout" val="4"/>
      <a name="incoming" val="4"/>
      <a name="appear" val="left"/>
      <a name="bit0" val="0"/>
      <a name="bit1" val="1"/>
      <a name="bit2" val="2"/>
      <a name="bit3" val="3"/>
    </tool>
    <tool name="Pin">
      <a name="facing" val="south"/>
      <a name="output" val="false"/>
      <a name="width" val="1"/>
      <a name="tristate" val="true"/>
      <a name="pull" val="none"/>
      <a name="label" val=""/>
      <a name="labelloc" val="north"/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
    </tool>
    <tool name="Probe">
      <a name="facing" val="west"/>
      <a name="radix" val="10signed"/>
      <a name="label" val=""/>
      <a name="labelloc" val="north"/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
    </tool>
    <tool name="Tunnel">
      <a name="facing" val="east"/>
      <a name="width" val="32"/>
      <a name="label" val="tunnel"/>
      <a name="labelfont" val="Dialog plain 12"/>
    </tool>
    <tool name="Pull Resistor">
      <a name="facing" val="north"/>
      <a name="pull" val="0"/>
    </tool>
    <tool name="Clock">
      <a name="facing" val="north"/>
      <a name="highDuration" val="1"/>
      <a name="lowDuration" val="1"/>
      <a name="label" val=""/>
      <a name="labelloc" val="west"/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
    </tool>
    <tool name="ProgrammableGenerator">
      <a name="facing" val="east"/>
      <a name="nState" val="4"/>
      <a name="label" val=""/>
      <a name="labelloc" val="west"/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
      <a name="Contents" val=""/>
    </tool>
    <tool name="Constant">
      <a name="facing" val="north"/>
      <a name="width" val="3"/>
      <a name="value" val="0x0"/>
    </tool>
    <tool name="Power">
      <a name="facing" val="north"/>
      <a name="width" val="1"/>
    </tool>
    <tool name="Ground">
      <a name="facing" val="south"/>
      <a name="width" val="1"/>
    </tool>
    <tool name="Transistor">
      <a name="type" val="p"/>
      <a name="facing" val="east"/>
      <a name="gate" val="tl"/>
      <a name="width" val="1"/>
    </tool>
    <tool name="Transmission Gate">
      <a name="facing" val="east"/>
      <a name="gate" val="tl"/>
      <a name="width" val="1"/>
    </tool>
    <tool name="Bit Extender">
      <a name="in_width" val="32"/>
      <a name="out_width" val="1"/>
      <a name="type" val="zero"/>
    </tool>
  </lib>
  <lib desc="#Gates" name="1">
    <tool name="NOT Gate">
      <a name="facing" val="east"/>
      <a name="width" val="1"/>
      <a name="size" val="20"/>
      <a name="out" val="01"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
    </tool>
    <tool name="Buffer">
      <a name="facing" val="east"/>
      <a name="width" val="3"/>
      <a name="out" val="01"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
    </tool>
    <tool name="AND Gate">
      <a name="facing" val="east"/>
      <a name="width" val="16"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
      <a name="out" val="01"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
      <a name="negate0" val="false"/>
      <a name="negate1" val="false"/>
    </tool>
    <tool name="OR Gate">
      <a name="facing" val="east"/>
      <a name="width" val="1"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
      <a name="out" val="01"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
      <a name="negate0" val="false"/>
      <a name="negate1" val="false"/>
    </tool>
    <tool name="NAND Gate">
      <a name="facing" val="east"/>
      <a name="width" val="1"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
      <a name="out" val="01"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
      <a name="negate0" val="false"/>
      <a name="negate1" val="false"/>
    </tool>
    <tool name="NOR Gate">
      <a name="facing" val="east"/>
      <a name="width" val="1"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
      <a name="out" val="01"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
      <a name="negate0" val="false"/>
      <a name="negate1" val="false"/>
    </tool>
    <tool name="XOR Gate">
      <a name="facing" val="east"/>
      <a name="width" val="1"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
      <a name="out" val="01"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
      <a name="xor" val="odd"/>
      <a name="negate0" val="false"/>
      <a name="negate1" val="false"/>
    </tool>
    <tool name="XNOR Gate">
      <a name="facing" val="east"/>
      <a name="width" val="1"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
      <a name="out" val="01"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
      <a name="xor" val="odd"/>
      <a name="negate0" val="false"/>
      <a name="negate1" val="false"/>
    </tool>
    <tool name="Odd Parity">
      <a name="facing" val="south"/>
      <a name="width" val="1"/>
      <a name="size" val="30"/>
      <a name="inputs" val="3"/>
      <a name="out" val="01"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
      <a name="negate0" val="false"/>
      <a name="negate1" val="false"/>
      <a name="negate2" val="false"/>
    </tool>
    <tool name="Even Parity">
      <a name="facing" val="east"/>
      <a name="width" val="1"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
      <a name="out" val="01"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
      <a name="negate0" val="false"/>
      <a name="negate1" val="false"/>
    </tool>
    <tool name="Controlled Buffer">
      <a name="facing" val="east"/>
      <a name="width" val="1"/>
      <a name="control" val="right"/>
      <a name="negatecontrol" val="false"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
    </tool>
    <tool name="Controlled Inverter">
      <a name="facing" val="east"/>
      <a name="width" val="1"/>
      <a name="size" val="20"/>
      <a name="control" val="right"/>
      <a name="negatecontrol" val="false"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
    </tool>
  </lib>
  <lib desc="#Plexers" name="2">
    <tool name="Multiplexer">
      <a name="facing" val="east"/>
      <a name="selloc" val="bl"/>
      <a name="select" val="2"/>
      <a name="width" val="32"/>
      <a name="disabled" val="Z"/>
      <a name="enable" val="false"/>
    </tool>
    <tool name="Demultiplexer">
      <a name="facing" val="east"/>
      <a name="selloc" val="bl"/>
      <a name="select" val="2"/>
      <a name="width" val="1"/>
      <a name="tristate" val="false"/>
      <a name="disabled" val="Z"/>
      <a name="enable" val="false"/>
    </tool>
    <tool name="Decoder">
      <a name="facing" val="east"/>
      <a name="selloc" val="bl"/>
      <a name="select" val="2"/>
      <a name="tristate" val="false"/>
      <a name="disabled" val="Z"/>
      <a name="enable" val="false"/>
    </tool>
    <tool name="DisplayDecoder">
      <a name="facing" val="east"/>
      <a name="multibit" val="true"/>
    </tool>
    <tool name="Priority Encoder">
      <a name="facing" val="east"/>
      <a name="select" val="3"/>
      <a name="disabled" val="Z"/>
    </tool>
    <tool name="BitSelector">
      <a name="facing" val="east"/>
      <a name="selloc" val="bl"/>
      <a name="width" val="31"/>
      <a name="group" val="5"/>
    </tool>
  </lib>
  <lib desc="#Arithmetic" name="3">
    <tool name="Adder">
      <a name="width" val="6"/>
    </tool>
    <tool name="Subtractor">
      <a name="width" val="5"/>
    </tool>
    <tool name="Multiplier">
      <a name="width" val="1"/>
    </tool>
    <tool name="Divider">
      <a name="width" val="16"/>
    </tool>
    <tool name="Negator">
      <a name="width" val="1"/>
    </tool>
    <tool name="Comparator">
      <a name="width" val="16"/>
      <a name="mode" val="twosComplement"/>
    </tool>
    <tool name="Shifter">
      <a name="width" val="8"/>
      <a name="shift" val="ll"/>
    </tool>
    <tool name="BitAdder">
      <a name="width" val="8"/>
      <a name="inputs" val="1"/>
    </tool>
    <tool name="BitFinder">
      <a name="width" val="8"/>
      <a name="type" val="low1"/>
    </tool>
  </lib>
  <lib desc="#Memory" name="4">
    <tool name="D Flip-Flop">
      <a name="trigger" val="high"/>
      <a name="Pre/Clr Positions" val="ABOVE_BELOW"/>
      <a name="NegatePresetClear" val="false"/>
      <a name="enable" val="false"/>
      <a name="NewFFLayout" val="true"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
    </tool>
    <tool name="T Flip-Flop">
      <a name="trigger" val="rising"/>
      <a name="Pre/Clr Positions" val="ABOVE_BELOW"/>
      <a name="NegatePresetClear" val="false"/>
      <a name="enable" val="false"/>
      <a name="NewFFLayout" val="true"/>
      <a name="label" val=""/>
      <a name="labelfont" val="Dialog plain 12"/>
      <a name="labelcolor" val="#000000"/>
    </tool>

答案和解析:

 MIPS/RISC-VRegFile设计答案代码-C++文档类资源-CSDN文库

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值