全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 可编程逻辑 >

SpinalHDL里pipeline的设计思路

时间:2023-08-16 15:11

人气:

作者:admin

标签:   pipeline    SpinalHDL  设计 

导读:如果你曾看过VexRSICV的设计,对于从事逻辑设计的你会惊讶从未想过逻辑设计还能这么来做。针对VexRSICV所衍生出的pipeline Lib,该系列会对pipeline进行一次梳理。诚如之前一篇博客曾讲,...

如果你曾看过VexRSICV的设计,对于从事逻辑设计的你会惊讶从未想过逻辑设计还能这么来做。针对VexRSICV所衍生出的pipeline Lib,该系列会对pipeline进行一次梳理。诚如之前一篇博客曾讲,这是“勇者的游戏”。

虽然并未从事CPU设计,但这里pipeline的库读完还是当浮一大白~

》传统的设计思路

借用博客《The VexRiscV CPU - A New Way to Design》中的观点,在CPU设计里,一条典型的五级流水线:

image.png

在传统的流水线设计里,一条指令切分到不同的Stage中,每增加一条指令,我们可能就需要对各个Stage进行修改,牵一发而动全身。如果对于流水线每个阶段都了然于胸,那么自不是问题,否则那就是噩梦级别的难度了~。

那么,是否有新的方式来做一次流水线设计的创新呢?

来看看SpinalHDL里pipeline的设计思路。

》高端操作

本篇为开篇系列,先从整体架构上看SpinalHDL中pipeline的设计整体框架,暂不牵涉具体的设计细节。

我们先来看一个非常简单的“pipeline”:

image.png

从A到B经历三级流水线,每经一级加一输出至下一级。

回到电路设计的本质。在FPGA里面,除了RAMDSP这些资源,逻辑实现的核心只有LUT喝Reg。LUT负责实现逻辑实现,Reg负责状态保存。在上面的三级流水里,我们要思索的无非两个问题:

  1. 每一级流水线都做了什么
  2. 流水线各级是如何进行连接的
    那么在看看上面的电路。每级流水线里面都是一个加法器和一个寄存器输出。加法器这些功能性的实现才是每一级Stage的功能。而寄存器则用于连接本级Stage与下一级Stage。也就意味着,每一级流水线都是逻辑电路负责实现功能,时序电路寄存器用于Stage连接。为此,对于pipeline我们可以抽象为下面的要素:

image.png

Stage:仅考虑具体的功能实现,它包含了输入、输出以及具体的逻辑实现。

Connection:仅用于实现各级Stage的连接。

在逻辑电路设计里,不要总是想着把功能实现和时序设计给拼到一块儿。将上面的概念与最上面的三级流水对照,那么加法器就是对应的Stage的功能,一个组合电路。而寄存器就对应Connection的功能。

SpinalHDL是基于Scala而设计,其能够帮助我们自动实现很多功能。比如两级Stage之间都有哪些信号是要通过Connection进行连接,对应的流水线功能如flush、halt能功能如何在各级Stage之间进行传播等功能。我们所需要做的,就是通过一定的规则告诉pipeline如何去做这些事情。

接下来,先针对pipeline所涉及的Pipeline、Stage、Connection、Stageable、StageableKey进行一个初步整体了解。


温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信