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

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

3天内不再提示

SpinalHDL里pipeline的设计思路

冬至子 来源:Spinal FPGA 作者:玉骐 2023-08-16 15:11 次阅读

如果你曾看过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进行一个初步整体了解。


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

    关注

    1

    文章

    113

    浏览量

    21588
  • 加法器
    +关注

    关注

    6

    文章

    174

    浏览量

    29733
  • Pipeline
    +关注

    关注

    0

    文章

    27

    浏览量

    9294
  • FPGA开发板
    +关注

    关注

    10

    文章

    119

    浏览量

    31329
  • HDL语言
    +关注

    关注

    0

    文章

    46

    浏览量

    8871
收藏 人收藏

    评论

    相关推荐

    spinalhdl转Verilog可读性 SpinalHDL开发流程

    SpinalHDL是基于Scala全新的硬件描述语言,解决了不少Verilog等传统HDL语言的痛点,可以快速的完成某些IP的开发,和完美的融入现有的开发流程。 诚然SpinalHDL的学习路线
    的头像 发表于 07-27 09:29 867次阅读
    <b class='flag-5'>spinalhdl</b>转Verilog可读性 <b class='flag-5'>SpinalHDL</b>开发流程

    SpinalHDLpipeline的设计思路

    如果你曾看过VexRSICV的设计,对于从事逻辑设计的你会惊讶从未想过逻辑设计还能这么来做。
    的头像 发表于 08-12 11:22 903次阅读

    SpinalHDLswitch方法有何用处呢

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

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

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

    SpinalHDL的设计中集成现有RTL设计(IP)的渠道——BlackBox

    接口及parameter参数(这也是我们在RTL例化IP时常用的)。我们来看SpinalHDL-doc给出的example:整个代码做了三件事:参数声明、端口声明,时钟域映射。参数声明在上例中
    发表于 06-22 14:59

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

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

    谈谈SpinalHDL中StreamCCByToggle组件设计不足的地方

    SpinalHDL中的代码质量还是相当之高的,阅读他的源代码,对于自己平时代码设计能够带来一些新的思路。很多人都觉得SpinalHDL难学。一开始我使用SpinalHDL也是按照之前
    发表于 06-30 15:11

    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将功能封装抽象成库函数供Stream总线接口快速调用

    本篇讲解一个小的example,带你一起看点儿SpinalHDL有趣地玩儿法。不讲理—总线插队先来看一个波形图:这里有一组输入Stream总线接口、一组输出Stream总线,它的电路规则描述
    发表于 07-21 14:31

    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中的两大类型Reg、Wire,来梳理下在SpinalHDL中的对应关系及声明形式。
    的头像 发表于 07-03 11:02 1158次阅读

    浅析SpinalHDLPipeline中的复位定制

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