SpinalHDL里pipeline的设计思路

如果你曾看过vexrsicv的设计,对于从事逻辑设计的你会惊讶从未想过逻辑设计还能这么来做。针对vexrsicv所衍生出的pipeline lib,该系列会对pipeline进行一次梳理。诚如之前一篇博客曾讲,这是“勇者的游戏”。
虽然并未从事cpu设计,但这里pipeline的库读完还是当浮一大白~
》传统的设计思路借用博客《the vexriscv cpu - a new way to design》中的观点,在cpu设计里,一条典型的五级流水线:
在传统的流水线设计里,一条指令切分到不同的stage中,每增加一条指令,我们可能就需要对各个stage进行修改,牵一发而动全身。如果对于流水线每个阶段都了然于胸,那么自不是问题,否则那就是噩梦级别的难度了~。
那么,是否有新的方式来做一次流水线设计的创新呢?
来看看spinalhdl里pipeline的设计思路。
》高端操作本篇为开篇系列,先从整体架构上看spinalhdl中pipeline的设计整体框架,暂不牵涉具体的设计细节。
我们先来看一个非常简单的“pipeline”:
从a到b经历三级流水线,每经一级加一输出至下一级。
回到电路设计的本质。在fpga里面,除了ram、dsp这些资源,逻辑实现的核心只有lut喝reg。lut负责实现逻辑实现,reg负责状态保存。在上面的三级流水里,我们要思索的无非两个问题:
每一级流水线都做了什么流水线各级是如何进行连接的
那么在看看上面的电路。每级流水线里面都是一个加法器和一个寄存器输出。加法器这些功能性的实现才是每一级stage的功能。而寄存器则用于连接本级stage与下一级stage。也就意味着,每一级流水线都是逻辑电路负责实现功能,时序电路寄存器用于stage连接。为此,对于pipeline我们可以抽象为下面的要素:
stage:仅考虑具体的功能实现,它包含了输入、输出以及具体的逻辑实现。
connection:仅用于实现各级stage的连接。
在逻辑电路设计里,不要总是想着把功能实现和时序设计给拼到一块儿。将上面的概念与最上面的三级流水对照,那么加法器就是对应的stage的功能,一个组合电路。而寄存器就对应connection的功能。
spinalhdl是基于scala而设计,其能够帮助我们自动实现很多功能。比如两级stage之间都有哪些信号是要通过connection进行连接,对应的流水线功能如flush、halt能功能如何在各级stage之间进行传播等功能。我们所需要做的,就是通过一定的规则告诉pipeline如何去做这些事情。
接下来,先针对pipeline所涉及的pipeline、stage、connection、stageable、stageablekey进行一个初步整体了解。

激光打标机在PCB制造中的应用优势
球磨机轴承位磨损如何修复
LG电子发布第三季度财报 缩减亏损4000万
苹果新款电池保护壳评测:设计改进但仍然笨重
电力系统谐振消除的实现
SpinalHDL里pipeline的设计思路
全新的诺基亚5.4手机即将上市
中兴事件背后深层原因,思索企业体制外创新发展的新模式
中国尚无国产机器能够对28nm CMOS进行光刻?
微软向世人展示48核ARM服务器
蓝碧石科技已成功开发出功率高达1W的无线供电芯片组
基于PC机和西门子ET200S实现电加热炉监控系统的设计
可饱和电感特性及开关噪声抑制作用
出让安世半导体股权,银鸽投资将获巨额收益
国内外上演AI人才抢夺大战 中国AI企业估值更高
无线传感器网络的用途
FIIL随身星Pro评测 很好的诠释了品牌的初衷
EPC概念和技术的产生及其特性分析
携手高通,“一起重新定义汽车”!
如何选择一款适合的功率放大器,要注意哪些方面