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

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

3天内不再提示

设计中DFX的重要性表现

Spinal FPGA 来源:Spinal FPGA 作者:Spinal FPGA 2022-10-09 10:25 次阅读

一种<>也不好使的场景,该assignAllByName上场了。

》出于监控的需求 从校园毕业从事逻辑设计也有三年时光了,对于逻辑设计,最大的感受就是在设计中DFX的重要性。无论你自己的设计多么牛逼,仿真多么到位,全面的DFX仍旧是必不可少,尤其是跨部门多团队合作里,好的DFX能够在系统上线及运维上有极大的帮助。在一些系统设计里,我们往往会对模块的各路数据接口添加状态信息DFX以及一些辅助性能分析的工具。这里以Axiite4为例,我们以如下模块作为待监控模块:

0300a87c-4170-11ed-96c9-dac502259ad0.png

这里我们假定对inPort端口添加一些监控信息,我们设计如下模块作为AxiLite4总线的一个通用监控模块(只是举例说明,非真实应用):

03393de0-4170-11ed-96c9-dac502259ad0.png

这里我们定义了一个AxiLite4Mon的Component,监控aw,w,b,ar,r五路通路的状态。这里值得注意的是对于AxiLite4Mon而言,alite接口的所有信号都是输入。故其书写形式为in(AxiLite4(32,32))。也正因如此,当我们在BundleTest中去例化AxiLite4Mon时你会发现采用<>对alite接口进行连线时生成RTL时会报错:

03737af0-4170-11ed-96c9-dac502259ad0.png

原因无他,对于AxiLite4Mon的aite接口而言,其全部为输入信号,而对于inPort接口而言,其既有输出信号又有输入信号,从而导致工具无法推断具体的连接关系。 对于SpinalHDL了解的小伙伴也许能够想到,这里把AxiLite4Mon定义扩展为Area而非Component:

case class AxiLite4Mon(alite:AxiLite4,state:Bits) extends Area{
state:=alite.aw.fire##alite.w.fire##alite.b.fire##alite.ar.fire##alite.r.fire
}
此时在BundleTest中例化就可以写成:
AxiLite4Mon(io.inPort,io.state)
诚然,这种方式从SpinalHDL的角度来讲更简洁,但对接口做一个好的DFX监控不是像这里的这么简单一行代码。而且尤其当合作中有人采用Verilog来作为开发语言时最终你生成的代码功能代码和这些DFX代码混合在一起给人看起来代码过长,难以阅读(当然我基本不直接阅读生成的RTL代码)。因此像这种总线接口的DFX代码,个人还是倾向于采用Component进行封装。 》assignAllByName

像上面的问题,如果你手动对alite接口展开赋值那我也不拦着,只能说没学好SpinalHDL。在SpinalHDL里这些复杂的接口都集成扩展于Bundle。但凡你打开过Bundle的代码实现,你就会发现这里面有一个assignAllByName的方法实现很符合我们的需求:

03ef77ae-4170-11ed-96c9-dac502259ad0.png

我们在Bundle中声明的信号接口都存储于elements中,elements的定义形式为:ArrayBuffer[(String, Data)]。这里仅需要根据定义的信号名字找到对应的接口信号进行连接即可,这也是assignAllByName所做的事情,相信有点儿Scala基础上面的代码并不难理解。此时像上面的代码我们就可以轻松实现了:

0457e17c-4170-11ed-96c9-dac502259ad0.png

这才是SpinalHDL的正确书写形式。

除了assignAllByName,Bundle中也定义了下面两种用于连线赋值的API

0537e934-4170-11ed-96c9-dac502259ad0.png

assignSomeByName相比于assignAllByName,其允许that中的部分信号为null,而bundleAssign则可以让我们自定义连接赋值函数。

通过这些,相信能基本满足日常代码设计需求。

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

    关注

    6

    文章

    2044

    浏览量

    54704
  • 数据接口
    +关注

    关注

    1

    文章

    74

    浏览量

    17772
  • DFx
    DFx
    +关注

    关注

    0

    文章

    35

    浏览量

    10418

原文标题:<>也不好使—assignAllByName

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

收藏 人收藏

    评论

    相关推荐

    论RISC-V的MCUUART接口的重要性

    RISC-V的MCU(微控制器单元)UART(通用异步收发器)接口的重要性主要体现在以下几个方面: 广泛的适用 : UART接口是一种用于连接两个计算机设备的接口,允许一个设备向另一个设备发送
    发表于 05-27 15:52

    求助,ADC接地的重要性

    ADC接地的重要性
    发表于 06-04 07:56

    基准源设计的重要性

    的充电过程。读过相关文章“Design SAR-ADC Driver Cirtuitry”工程师,都会深刻理解SAR-ADC驱动电路后,ADC输入引脚电容的重要性。原因是在采样保持过程SAR-ADC
    发表于 06-18 06:10

    BGA焊接温度控制重要性

    `请问BGA焊接温度控制重要性有哪些?`
    发表于 03-26 16:41

    Syncer模块的重要性是什么?

    我在我的项目中使用25G以太网IP。通过打开此IP的示例设计,我们可以看到许多SYNCER模块,一个FSM模块和一个流量生成器模块。我想问一下这些Syncer模块的重要性是什么,我是否需要在我的最终设计中使用所有syncer模块。
    发表于 05-18 09:25

    代码规范的重要性是什么

    论代码规范的重要性
    发表于 05-19 13:07

    欠压保护的重要性

    欠压保护的重要性双电源供电时欠压保护电路的注意事项
    发表于 03-03 06:06

    什么是网络拓扑,它的重要性是什么?

    什么是网络拓扑,它的重要性是什么?
    发表于 03-17 06:50

    论调节阀的重要性

    调节阀的重要性执行机构的选择  论调节阀的重要性:  1.控制阀是一种节流装置,属于运动部件。与检测元件、变送器和控制器相比,在控制过程,控制阀需要不断改变节流部分的过流面积,使控制变量的变化适应
    发表于 09-15 07:25

    ATPG是什么?ATPG有何重要性

    ATPG是什么?ATPG有何重要性?常见的DFT技术有哪几种?
    发表于 11-02 09:31

    时钟服务器的重要性是什么?

    时钟服务器的重要性是什么?
    发表于 11-08 08:31

    UPS的重要性

    中心机房的UPS太重要了,前不久就出现过停电坏了一个磁盘陈列硬盘的事故,一个2T的硬盘坏了,还好有一个备用的硬盘使用,否则磁盘陈列里的资料就岌岌可危了。服务器多了,UPS的重要性尤其重要,学校周边
    发表于 11-16 09:09

    arm汇编的重要性是什么?

    arm汇编的重要性是什么?
    发表于 11-30 08:03

    POE浪涌保护的重要性是什么?

    POE浪涌保护的重要性是什么?
    发表于 01-14 06:07

    压敏电阻在电源电路的应用及重要性综述

    压敏电阻在电源电路的应用及重要性综述
    发表于 05-25 11:33 13次下载