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

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

3天内不再提示

SpinalHDL中的一别两宽式设计方式介绍

冬至配饺子 来源:Spinal FPGA 作者:玉骐 2022-08-09 14:45 次阅读

在SpinalHDL里,其lib库处处可见Stream的身影,而在常用的逻辑设计里,尤其接口的处理中,握手信号的处理也是老生常谈的话题。而在接受设计里,SpinalHDL中的“一别两宽”式设计方式,着实让我赞同。

》》Stream

Stream本质上是一个带数据的握手协议:

pYYBAGLyAeeAQudEAABsdJZDejI825.png

在数字逻辑电路里,无论是普通的模块接口之间,还是标准的AMBA、Avalon等总线,都处处可见Stream的身影:

pYYBAGLyAgCACDW5AABltE0LoO4450.png

》》握手之殇,纠缠不清

无论是新手还是老手,对于Stream这种握手形式的逻辑处理还是挺烦的。Stream这种握手形式的逻辑仅仅是添加一级寄存器还是颇显得繁琐的,需要小心翼翼的处理。更遑论当设计里还牵涉到数据的处理。这种在处理功能逻辑的同时又要考虑握手信号的处理时在设计逻辑电路时还是显得颇头大的,毕竟“一心二用”还是颇有不便……

仔细想想,在接口信号处理时,功能性的设计往往是组合逻辑颇多,而为了更好的满足时序约束,往往需要添加寄存器来优化时序,单独处理或许并不显得复杂,但当把两者混在一块儿便极易“按起葫芦浮起瓢”,导致设计功能性错误了。倘若纠缠不清令人头大,那一别两宽呢?把功能逻辑和为了优化时序的pipeline分开岂不是设计极其简单。

》》Stream pipeline

Stream的pipeline处理在SpinalHDL里提供了很好的封装:

pYYBAGLyAiKATTnJAACkV2_B_dY034.png

Stream接口的pipeline里有三种类型:

m2sPipe: 为两个Stream接口之间的valid,payload之间添加一级寄存器。

s2mPipe:为两个Stream接口之间的ready路径添加一级寄存器。

s2mPipe().m2sPipe():在两个Stream接口之间的valid,payload、ready之间均添加一级寄存器。

上面的三种接口pipeline方式能够很好的满足接口中的时序优化。SpinalHDL里也提供了相应简单的连接符(箭头指向谁谁就是目的端)。关于这里面的源代码分析可参见文章《打个拍,握个手可以么》。

》》功能处理

有了前面Stream接口的pipeline方式,在Stream接口信号中的处理功能性逻辑时,我们便可以采用组合逻辑的方式进行处理。举个简单的例子,在逻辑设计里对输入的Stream信号中的payload如果大于0x80加1输出,小于0x80减1输出。那么这里便可以仅以组合逻辑的形式进行处理:

pYYBAGLyAj6ABHgvAAB4mVS2_oE958.png

在上面的逻辑处理里,整个设计均采用组合逻辑的形式进行处理。

》》合二为一

有了上面的那些,那么合二为一便很容易了。功能处理采用组合逻辑,时序处理采用pipeline。“一别两宽”之后,合二为一便好了:



》》写在最后

就个人使用来讲,在SpinalHDL的设计里,这种方式极大的简化了电路设计的复杂度。理解了Stream的使用,那么对于SpinalHDL中lib的大多数功能也能够有一个很好的了解与使用。


审核编辑:刘清

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

    关注

    31

    文章

    5343

    浏览量

    120373
  • AMBA
    +关注

    关注

    0

    文章

    68

    浏览量

    14991
  • 数字逻辑电路

    关注

    0

    文章

    106

    浏览量

    15819
收藏 人收藏

    评论

    相关推荐

    用TAS5630分路桥接、四路单端和四路桥接,只要有种模式起工作,输出端有很尖锐的高频噪声,为什么?

    我用TAS5630分路桥接、四路单端和四路桥接,当每个模式单独工作时都正常,但只要有种模式起工作,输出端有很尖锐的高频噪声,求高手指点
    发表于 10-30 07:36

    什么是电流保护的接线方式?有哪种接线方式?

    方式。下面将对这种接线方式进行介绍、完全星形接线方式 完全星形接线
    的头像 发表于 10-06 17:37 1205次阅读
    什么是电流保护的接线<b class='flag-5'>方式</b>?有哪<b class='flag-5'>两</b>种接线<b class='flag-5'>方式</b>?

    Linux应用层控制外设的种不同的方式

    众所周知,linux下切皆文件,那么应用层如何控制硬件层,同样是通过 文件I/O的方式来实现的,那么应用层控制硬件层通常有方式
    的头像 发表于 10-05 19:03 517次阅读
    Linux应用层控制外设的<b class='flag-5'>两</b>种不同的<b class='flag-5'>方式</b>

    电阻在电路的基本连接方式

    电阻在电路的基本连接方式主要包括串联、并联以及混联三种。 、电阻的串联 1. 定义与原理 电阻的串联是指将个或个以上的电阻依次首尾相
    的头像 发表于 08-20 10:49 2468次阅读

    wdm设备的种传输方式

    系统,有多种传输方式,其中最常见的种是密集波分复用(DWDM)和粗波分复用(CWDM)。 1. 密集波分复用(DWDM) 1.1 DWDM技术原理 密集波分复用(Dense Wavelength Division Multi
    的头像 发表于 07-18 09:45 482次阅读

    三相负载的连接方式有哪

    三相负载的连接方式主要有星形连接(Y连接)和三角形连接(Δ连接)种。这种连接方式在电气工程中非常常见,它们各自具有不同的特性和应用场景。下面将
    的头像 发表于 07-17 10:33 4286次阅读

    控制器有哪种实现方式?各有何优缺点?

    控制器是计算机系统个关键组件,负责协调和管理计算机硬件和软件资源。在不同的应用场景和系统,控制器的实现方式可能会有所不同。以下是
    的头像 发表于 06-30 10:33 1259次阅读

    PCBA加工中常见的种焊接方式详解

    ,在PCBA行业中经常被使用。接下来深圳PCBA加工厂家为大家详细介绍PCBA加工手工焊接的方式,为您揭秘行业内的技术细节。 PCBA加工过程中常用焊接方式
    的头像 发表于 06-14 09:18 550次阅读

    C/C++种宏实现方式

    #ifndef的方式受C/C++语言标准支持。它不仅可以保证同个文件不会被包含多次,也能保证内容完全相同的个文件(或者代码片段)不会被不小心同时包含。
    的头像 发表于 04-19 11:50 628次阅读

    浅析SpinalHDLPipeline的复位定制

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

    2024国云计算大分野:重回当年,还是走向未来?

    从你追我赶,到一别
    的头像 发表于 03-04 09:47 2133次阅读

    ARM的编码方式与寻址方式有何不同?

    ARM的编指方式与寻址方式有何不同? ARM处理器是种广泛应用的微处理器架构,被广泛用于移动设备、嵌入式设备以及智能家居等领域。在ARM架构
    的头像 发表于 01-29 18:10 691次阅读

    #2024,立Flag了嘛? #在win平台搭建SpinalHDL开发环境

    ,这个步需要勾选红框的这项; 对应的IDEA的插件安装Scala和SBT: Scala插件安装: SBT插件安装 2.2、JDK安装 直接到JDK官网下载安装包下载即可: JD
    发表于 01-21 10:52

    变阻器在电路的连接方式有哪些?

    变阻器在电路的连接方式有哪些? 变阻器是电子电路中常用的元件之,在电路中有多种不同的连接方式。下面将详细介绍变阻器的三种常见连接
    的头像 发表于 01-18 15:28 1726次阅读

    配置KubernetesPod使用代理的种常见方式

    的需要。本文将介绍配置KubernetesPod使用代理的种常见方式:通过ConfigMap和直接在应用程序环境变量设置。
    的头像 发表于 01-05 11:22 1147次阅读
    配置Kubernetes<b class='flag-5'>中</b>Pod使用代理的<b class='flag-5'>两</b>种常见<b class='flag-5'>方式</b>