0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SpinalHDL里pipeline的设计思路

Spinal FPGA 来源:Spinal FPGA 2023-08-12 11:22 次阅读

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

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

》传统的设计思路

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

ab88a7ac-38b3-11ee-9e74-dac502259ad0.svg    

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

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

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

》高端操作

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

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

abb384d6-38b3-11ee-9e74-dac502259ad0.jpg

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

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

每一级流水线都做了什么

流水线各级是如何进行连接的

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

abd2254e-38b3-11ee-9e74-dac502259ad0.jpg

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

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

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

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

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





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1367

    浏览量

    114518
  • 加法器
    +关注

    关注

    6

    文章

    183

    浏览量

    30089
  • Pipeline
    +关注

    关注

    0

    文章

    28

    浏览量

    9344
  • CPU设计
    +关注

    关注

    0

    文章

    8

    浏览量

    10513
  • FPGA开发板
    +关注

    关注

    10

    文章

    122

    浏览量

    31481

原文标题:pipeline高端玩法(一)——系统架构

文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎样使用SpinalHDL Pipeline组件的resulting及overloaded?

    关于stageableToData,在之前的文章中已有介绍,今天来看下stageableOverloadedToData以及stageableResultingToData的作用。
    的头像 发表于 09-11 09:47 985次阅读
    怎样使用<b class='flag-5'>SpinalHDL</b> <b class='flag-5'>Pipeline</b>组件<b class='flag-5'>里</b>的resulting及overloaded?

    SpinalHDLswitch方法有何用处呢

    ,当我们需要根据tkeep信号来计算这一拍有多少有效数据时这里的代码会是什么样子……这种代码写的手有点儿累(又没啥技术含量)……在SpinalHDL该如何做呢?switchSpinalHDL提供了
    发表于 06-22 14:25

    SpinalHDL实现优雅的添加待跟踪波形信号

    在FPGA的开发过程中,在线抓取波形往往是终极调试大法。而如何抓取信号,相信做逻辑开发的小伙伴都是轻车熟路,张口就来,无非两种方式嘛:待跟踪信号添加原语或者手动例化Ila。而在SpinalHDL
    发表于 06-22 14:37

    聊一聊SpinalHDL 1.6.1引入的blackbox inline功能

    BlackBox在之前的文章中,曾介绍过如何封装兼容别人的RTL代码:SpinalHDL——集成你的RTL代码整体的思路还是简洁明了的,相信读完后照着做很快就能上手。这对于保持设计的兼容性及混合
    发表于 06-29 16:02

    SpinalHDL中关于casez的使用

    Verilog代码时还是很少会直接这么来写的,往往通常采用casez来进行描述:那么在SpinalHDL中,我们是否也可以这么描述呢?SpinalHDL中的don't care像Verilog代码中,casez
    发表于 07-06 10:59

    分享一个在SpinalHDLapply的有趣用法

    SpinalHDL和Chisel都是基于scala来实现的,而在SpinalHDL的example,偶然看到一个apply的有趣用法。“神奇”的逻辑,"奇葩"的写法偶然看到一
    发表于 07-19 15:08

    SpinalHDL是如何让仿真跑起来的

    SpinalHDL,当我们的设计完成后如果说把生成的Verilog/SystemVerilog代码用SystemVerilog来进行仿真验证那真是一件痛苦的事情,而且对于SystemVerilog本身来讲,在
    发表于 07-25 15:09

    如何在SpinalHDL启动一个仿真

    前言在安装完成Verilator、GtkWave后,我们即可在IDEA通过SpinalHDL提供的仿真接口来对我们的设计进行仿真。在《SpinalHDL—仿真环境》一文中已提到SpinalH
    发表于 07-26 16:59

    SpinalHDL有没有什么好的方式实现一个接口位宽转换呢

    下午微信群有个小伙伴问了这么一道题:将一个为UInt(128 bits)的Stream接口连接到一个UInt(32 bits)的StreamFiFo上,在SpinalHDL有没有什么好的方式实现
    发表于 07-27 14:52

    SpinalHDL时钟域中的定制与命名

    聊一聊在SpinalHDL时钟域中时钟的定制与命名。 相较于Verilog,在SpinalHDL,其对时钟域有着更细致的描述,从而也能够更精细的控制和描述。而对于时钟域,我们往往关
    的头像 发表于 03-22 10:14 2107次阅读

    SpinalHDL用于跨时钟域处理的一些手段方法

    每一个做数字逻辑的都绕不开跨时钟域处理,谈一谈SpinalHDL用于跨时钟域处理的一些手段方法。
    的头像 发表于 07-11 10:51 1804次阅读

    SpinalHDL如何实现Sobel边缘检测

    书接上文,趁着今天休假,采用SpinalHDL做一个小的demo,看看在SpinalHDL如何优雅的实现Sobel边缘检测。
    的头像 发表于 08-26 08:59 1259次阅读

    SpinalHDLpipeline的设计思路

    如果你曾看过VexRSICV的设计,对于从事逻辑设计的你会惊讶从未想过逻辑设计还能这么来做。针对VexRSICV所衍生出的pipeline Lib,该系列会对pipeline进行一次梳理。诚如之前一篇博客曾讲,这是“勇者的游戏”。
    的头像 发表于 08-16 15:11 918次阅读
    <b class='flag-5'>SpinalHDL</b><b class='flag-5'>里</b><b class='flag-5'>pipeline</b>的设计<b class='flag-5'>思路</b>

    SpinalHDL在顶层一键优化Stream/Flow代码生成

        在SpinalHDL在顶层一键优化代码中Stream/Flow代码生成的payload,fragment。 难看的代码       来看一段代码:   import
    的头像 发表于 12-14 09:05 640次阅读

    浅析SpinalHDLPipeline中的复位定制

    之前有系列文章介绍了SpinalHDLPipeline的使用,最近在一个功能模块中真实的使用了这个lib。
    的头像 发表于 03-17 17:31 990次阅读
    浅析<b class='flag-5'>SpinalHDL</b>中<b class='flag-5'>Pipeline</b>中的复位定制