一种也不好使的场景,该assignallbyname上场了。
》出于监控的需求 从校园毕业从事逻辑设计也有三年时光了,对于逻辑设计,最大的感受就是在设计中dfx的重要性。无论你自己的设计多么牛逼,仿真多么到位,全面的dfx仍旧是必不可少,尤其是跨部门多团队合作里,好的dfx能够在系统上线及运维上有极大的帮助。在一些系统设计里,我们往往会对模块的各路数据接口添加状态信息dfx以及一些辅助性能分析的工具。这里以axiite4为例,我们以如下模块作为待监控模块:
这里我们假定对inport端口添加一些监控信息,我们设计如下模块作为axilite4总线的一个通用监控模块(只是举例说明,非真实应用):
这里我们定义了一个axilite4mon的component,监控aw,w,b,ar,r五路通路的状态。这里值得注意的是对于axilite4mon而言,alite接口的所有信号都是输入。故其书写形式为in(axilite4(32,32))。也正因如此,当我们在bundletest中去例化axilite4mon时你会发现采用对alite接口进行连线时生成rtl时会报错:
原因无他,对于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的方法实现很符合我们的需求:
我们在bundle中声明的信号接口都存储于elements中,elements的定义形式为:arraybuffer[(string, data)]。这里仅需要根据定义的信号名字找到对应的接口信号进行连接即可,这也是assignallbyname所做的事情,相信有点儿scala基础上面的代码并不难理解。此时像上面的代码我们就可以轻松实现了:
这才是spinalhdl的正确书写形式。
除了assignallbyname,bundle中也定义了下面两种用于连线赋值的api:
assignsomebyname相比于assignallbyname,其允许that中的部分信号为null,而bundleassign则可以让我们自定义连接赋值函数。
通过这些,相信能基本满足日常代码设计需求。
Oculus将在下一代AR和VR产品中实现眼球追踪功能
无颗粒生产,故障率低
高功率同步降压转换器可提供高达50A的电流
这几大理由表明iPhone 8仍将使用Lightning
欧司朗晶蕾LED台灯 时尚风格 精致耐用
设计中DFX的重要性表现
机器人还被解雇?科技并非一成不变
苹果13对比苹果12promax的区别
长城汽车大禹电池有效解决不同化学体系电芯发生热失控问题
新型电流驱动放大器电路图
单片机常用电路之晶振电路
微软任性断OEM授权,跟Win7/8.1说再见吧!
跨年度科技:如何去选择共享隔空无线充电品牌
2021第十四届高工锂电产业峰会在宁德富力万达嘉华酒店举行
稳定币的作用是什么
纸张表面瑕疵检测设备的详细介绍
洲明科技为深圳南山5G智慧杆进行控制系统再升级
总结开发用户友好型移动应用的5种教训
SaaS从0到1的标准化设计应该怎么做?
负载均衡是什么意思?负载均衡器有什么用