首页 > 其他分享 >ysyx RTL:增加sram与握手信号

ysyx RTL:增加sram与握手信号

时间:2025-01-13 22:21:23浏览次数:1  
标签:周期 RTL idu ysyx valid sram ready exu

  在总线章节,我们需要将单周期处理器慢慢转变为多周期处理器。讲义提供了异步总线的思路:master发送valid信号,表示自己当前信号合法,slave发送ready信号,表示当前信号已经收到。达成握手的效果。

  讲义里首先要求增加一个只读取的sram给IFU使用,用于读取指令。这个很好实现,sram元件里只需要 rdata <= pmem_read(raddr)就行。为了复用代码,再加上之后还需要合并,sram元件之后还需要加上更多功能,而IFU这里只连接读取相关的线。

  在增加sram以后就需要考虑信号的问题。我遇到的额外情况是:第一个周期inst还没取到,默认是0,处理器会报错,我的处理方法是时序逻辑里首个周期单独处理,这样就不会出问题。其他情况下:

ifu_valid和idu_ready有效  ---> pc更新,ifu_valid准备无效(因为下个周期要取指,旧指令还没更新)

剩余情况     ---> ifu_valid都可以有效。

  讲义一开始就讲异步握手信号的增加其实不太合理,在单周期改多周期的时候,这些信号其实影响不大。在加入sram,需要等待信号读出时,信号才有了必要。

  对于握手信号,除了讲义上说的,还有一些内容需要补充:

1. 如果一个元件里有时序相关的内容,比如等待sram读取,那么握手信号也要写到时序逻辑里。如果没有,那就应该写到组合逻辑(时序逻辑也行)

2.对于用到了时序逻辑的信号,可以用状态机来帮助整理思路。如果只是一点点撞,那效率真的很低。

3.一个元件的信号不应该透传,比如exu_ready不应该直接赋值给idu_ready。

--------------------- ------------------------------------ -------------

在增加了IFU的sram以后,现在所有指令的执行就分成了两个周期:第一周期IFU发出请求等待取指,第二周期取到指令开始执行。现在需要的就是给EXU也增加一个sram。

EXU这边需要的是一个可读可写的sram,虽然讲义里说ren可以没有,但个人建议最好加上,这样能防止读出不需要的数据,此外可以考虑加上read_valid信号,这样EXU的状态处理会方便一些。

    always @(posedge clk) begin
        if(ren) begin
            rdata <= pmem_read(raddr);
            rvalid <= 1'b1;
        end
        else begin
            rvalid <= 1'b0;
        end
    end

    always @(posedge clk) begin
        if (wen) begin
            pmem_write(waddr, wdata, wmask);
        end
    end

  sram连接以后,就需要考虑exu的信号。exu这边只需要接收idu_valid,输出exu_ready。对于其他指令,EXU只需要一个周期执行,写入sram和写入寄存器都是时序逻辑下个周期完成。对于load类指令则需要两个周期(如果之后加入sram延迟那就需要更多,这也是增加read_valid信号的原因)。  我给exu增加了一个状态位,有IDLE和WAIT_LOAD两个状态。

IDLE状态下,如果此时idu_valid有效且是load类指令,下一个状态就转WAIT,并且exu_ready无效,因为当前周期要读数据,下个周期EXU还要执行

其他情况下,下个周期exu_ready有效并且继续IDLE状态。这是非load指令会发生的情况。

WAIT状态下,如果read_valid(sram的读取成功标志)有效,那么下个周期就回到IDLE,exu_ready也恢复有效。read_valid有效说明sram的数据已经取到了,当前周期执行完,下个周期就可以恢复。

  其他情况下,说明还没取到数据,要继续保持state和exu_ready。  这个状态转移应该可以应对任意延迟了。

 

(也许直接利用exu_ready更简洁一些)

再加上这一段后,load指令对应的就是三个周期,其他指令两个周期。

----------------------------------

  完成这两个元件以后,idu的信号也要处理。idu一方面要接收ifu_valid和exu_ready,另一方面要发出idu_ready和idu_valid。 我的idu没有时序逻辑,那直接idu_valid赋值1就行。但是idu_ready需要在exu_ready有效并且是load指令时无效( exu_ready有效是因为时序信号慢一拍)。如果不确定自己的设计,可以用波形配合verilog的打印来查看,效果很好。

  虽然讲义建议使用difftest等功能来debug,但是有需要的时候也可以考虑直接看波形。在一开始的c++仿真代码里就添加了采集波形的功能,直接用gtkwave就能打开。

标签:周期,RTL,idu,ysyx,valid,sram,ready,exu
From: https://www.cnblogs.com/namezhyp/p/18669459

相关文章

  • 【翻译保护标签<ph type="x-smartling-placeholder">】
     就是类似一种保护模式 <phtype="x-smartling-placeholder">Submit</ph>Submit   翻译流程│├──原始文档│└──"ClicktheSubmitbuttontosavechanges"│├──添加保护标记│└──"Clickthe<phtype="x-smartling-placeholder&......
  • wx.startLocationUpdateBackground
    wx.startLocationUpdateBackground(Objectobject)基础库2.8.0开始支持,低版本需做兼容处理。以Promise风格调用:支持用户授权:需要scope.userLocationBackground小程序插件:不支持微信鸿蒙OS版:支持相关文档:地理位置接口新增与相关流程调整功能描述开启小程......
  • Python 进阶:深入理解 import 机制与 importlib 的妙用
    大家好,今天我们来深入探讨Python中的导入机制和importlib模块。相信不少朋友和我一样,平时写代码时可能只用过最基础的import语句,或者偶尔用importlib.import_module来做些动态导入。但其实这背后的机制非常有趣,而且importlib提供的功能远比我们想象的要丰富。Python的......
  • PSRAM(Pseudo SRAM,伪静态随机存取存储器)与SRAM
    PSRAM(PseudoSRAM,伪静态随机存取存储器)与SRAM(静态随机存取存储器)存在多方面区别:###技术原理-**SRAM**:利用双稳态触发器(由多个晶体管组成)来存储数据。只要电源持续供电,触发器就能保持其存储的状态,不需要额外的刷新操作,数据可以随时被读取和写入。-**PSRAM**:本质上是一种特殊的D......
  • 一种SRAM-FPGA在轨重构的工程设计
            介绍一种基于静态随机存取存储器型现场可编程门阵列(SRAM-FPGA)在轨重构的方法,该重构设计可以完成目标FPGA的功能升级以及在轨实时刷新,工作稳定正常。      1.FPGA在轨重构方法        SRAM-FPGA的逻辑功能依赖于存储的配置数据,也就是说,更改星......
  • WPF StrokeStartLineCap Flat,Square,Round,Triangle
    <Windowx:Class="WpfApp74.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • How do I change the turtle‘s speed?
    InPython’sTurtlegraphicsmodule,youcancontrolthespeedoftheturtlewiththespeed()method.Thismethodtakesanoptionalargumentthatcanbeanumberoroneofthefollowingpredefinedconstants:0:fastest(noanimation)1:normalspeed(d......
  • Debian系统安装rtl8168_8125 千兆网卡和2.5g网卡
    0.适用范围rtl8168驱动适用于RTL8111B/RTL8111C/RTL8111D/RTL8111E/RTL8111F/RTL8111G/RTL8111H//RTL8118A/RTL8119i/RTL8111L/RTL8111K/RTL8111DP/RTL8111EP§/RTL8111FP/RTL8168B/RTL8168E/RTL8168Hrtl8125驱动适用于RTL8125/RTL8125B(G)1.查询驱动命令lspci-v......
  • RTL8211F以太网千兆RGMII开发板 使用说明
    深圳市飞录科技有限公司www.szfpga.com1.概述    RGMII 开发板主芯片是RTL8211FD。配套国产GOWIN的2AR-18和NR-9C的开发板,测试RGMII的千兆以太网数据发送和接收功能。  开发板的代码是基于MAC模式,通过循环发送计数器来判断包发送和接收是否正确。   2.操......
  • Debian安装RTL8101E_RTL8102E_RTL8103E_RTL8105E
    0.适用范围由于Debian默认采用r8169驱动,不是适用该型号驱动的网卡需要另外打驱动。而且r810x系列的网卡由于年代久远无法采用安装dkms额外软件包的方法,只能从官方网下载并编译。r8101驱动适用于RTL8101E/RTL8102E/RTL8103E/RTL8105E/RTL8106E/RTL8107E1.下载驱动进real......