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

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

3天内不再提示

混合编程中的模块命名与管理

FPGA之家 来源:Spinal FPGA 作者:玉骐 2022-12-13 17:03 次阅读

最近在项目中以SpinalHDL为主体做系统集成,其中遇到了不少模块命名与管理的坑,借此机会,再来聊一聊混合编程中的模块件命名与管理的事情。

问题是什么

不可否认,在当前的整体大环境下,Verilog/SystemVerilog仍然是主流,而SpinalHDL其本质上更像是一个生成Verilog的脚本工具。在团队合作中,最终拿去生成跑综合及布局布线生网表的仍然是Verilog代码。团队合作时当同时存在SpianlHDL代码和Verilog代码时不可避免的存在命名冲突的问题:

尽管SpinalHDL支持参数化设计,但其参数化是基于Scala层面上的,当我们调用SpinalHDL同一个IP以不同的参数例化时往往会为每次例化均生成一个Verilog模块代码。而当合作中存在多人调用组件生成RTL代码时最后往往会有模块命名撞车的问题。

在《被忽略的两个Tips》及《换个名字混江湖》中对于模块的命名均有提到一些方法,这里就真实的使用场景来看看这个问题。

setDefinitionName

在《换个名字混江湖》中对setDefinitionName的使用有较为详细的介绍,setDefinitionName可以手动的修改最终生成的Verilog代码对应的模块名,像下面的这段代码:

e62eaad8-7878-11ed-8abf-dac502259ad0.png

这里在例化Apb3Decoder这个SpinalHDL中的IP组件时,通过setDefinitionName来设置生成RTL代码时该模块名重新命名为Deocer。最终生成的代码便是下面这样:

e6bb984e-7878-11ed-8abf-dac502259ad0.png

倘若不添加setDefinitionName指定那么生成的RTL代码则保持原来的名字:

e6d79d8c-7878-11ed-8abf-dac502259ad0.png

通过setDefinitionName可以手动的为我们的模块指定特定的名称,但如此做带来的问题是我们需要要求每个人在例化每个模块时均指定名称。稍有不慎漏掉一个那么在最后合并整体工程时便会有重复命名的问题。更值得把握的是当我们调用的其他lib有多层嵌套例化时那么这种方式便显得更为复杂了。

globalPrefix

通过globalPrefix的方式可以使得在生成RTL代码时为每个模块添加一个特定的前缀。像下面的代码:

e6fc5a14-7878-11ed-8abf-dac502259ad0.png

指定每个模块的命名前面均添加“test_”,可以看到最终生成的RTL代码的每个模块前均添加有"test_"前缀:

e7228946-7878-11ed-8abf-dac502259ad0.png

e735caec-7878-11ed-8abf-dac502259ad0.png

多人合作时根据每个人负责的功能模块分别添加响应的模块命名前缀似乎是一个很的方式,然而是否通用? 看下面的例子:

e763e6f2-7878-11ed-8abf-dac502259ad0.png

这里我们在SpinalHDL中调用了封装好的RTL代码addTop,如果我们在例化时指定globalPrefix为“test_”,那么看看会是什么样子:

e78193b4-7878-11ed-8abf-dac502259ad0.png

问题来了,我例化的BlackBox代码模块名称为addTop,而这里例化的时候却例化了test_addTop——一个压根没有的模块。

也就意味着当代码里存在Verilog和SpinalHDL代码混合使用时那么这种globalPrefix方式便显得太“一刀切”了。

怎么做

解决不了上面的问题那么无论SpinalHDL再怎么优秀那终究是鸡肋~

怎么做?合二为一呗!

看下面的代码:

e7a5964c-7878-11ed-8abf-dac502259ad0.png

而最终生成的RTL代码为:

e7d9942e-7878-11ed-8abf-dac502259ad0.png

是不是看起来解决了我们的问题? setDefinitionName的优先级是高于globalPrefix的,我们在例化BlackBox时通过setDefinitionName指定模块的名字来避免在添加globalPrefix时带来的问题便可。

小小建议

在当前的环境下,团队合作时若你采用SpinalHDL作为编程语言不妨采用下面的方式来进行混合编程下的模块命名与管理:

1、若只负责单个模块的开发,那么在生成rtl代码时根据模块的功能通过globalPrefix添加适当的前缀。

2、若在SpinalHDL中例化封装Verilog代码时,在例化时通过setDefinitionName指定例化时的模块名称确保生成RTL代码时不会被修改掉。

审核编辑:汤梓红

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

    关注

    7

    文章

    2484

    浏览量

    46530
  • Verilog
    +关注

    关注

    28

    文章

    1326

    浏览量

    109302
  • 混合编程
    +关注

    关注

    0

    文章

    26

    浏览量

    8230

原文标题:混合编程中的模块命名与管理

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

收藏 人收藏

    评论

    相关推荐

    VC与MATLAB混合编程在语音及图像处理的应用

    VC与MATLAB混合编程在语音及图像处理的应用 [hide][/hide]
    发表于 11-25 09:28

    【PDF】labview与matlab混合编程参考

    【PDF】labview与matlab混合编程参考
    发表于 02-26 11:35

    LabVIEW与MATLAB混合编程资料

    LabVIEW与MATLAB混合编程pdf资料
    发表于 02-26 13:45

    基于labview与matlab的混合编程

    求大神解答怎样编写一个VI控制matlab仿真小车前后行走 。。。。。。。。通过SIT混合编程
    发表于 03-06 14:42

    labview与matlab混合编程

    labview与matlab混合编程
    发表于 05-13 17:03

    LABVIEW 与 MATLAB混合编程

    谁有用Xactive方法实现LABVIEW 与 MATLAB混合编程具体实例,包含详细步骤的!急求!!!
    发表于 03-29 22:22

    LabVIEW与Matlab混合编程

    `针对LabVIEW与Matlab混合编程得文件,谢谢大家可以关注我的微信公众号,获取更多技术相关得文章`
    发表于 12-10 16:12

    Matlab与VC混合编程

    Matlab与VC混合编程
    发表于 04-03 16:14

    ADSP-TS101S混合编程的接口规范和标准,有什么应用?

    混合编程的接口规范和标准混合编程的调用和中断混合编程在系统程序管理的应用
    发表于 04-25 09:33

    关于混合编程的基本知识都在这里

    C语言和汇编语言的混合编程混合编程的方法有哪些?混合编程的实例有哪些?混合编程的注意事项有哪些?
    发表于 04-25 08:56

    Matlab与C混合编程汇总

    接受matlab与C,C++等混合编程的方法案例
    发表于 01-14 16:09 0次下载

    C_与Matlab混合编程在BEAM绘制中的应用_范婵娇

    C_与Matlab混合编程在BEAM绘制中的应用_范婵娇
    发表于 03-19 11:26 0次下载

    Qt与Matlab混合编程

    Qt与Matlab混合编程
    发表于 03-27 08:48 0次下载

    ARM Bootloader 的实现C 和 ASM 混合编程

    ARM Bootloader 的实现C 和 ASM 混合编程
    发表于 10-30 09:28 15次下载
    ARM Bootloader 的实现C 和 ASM <b class='flag-5'>混合编程</b>

    matlab vsFortran混合编程工具

    matlab vsFortran混合编程工具
    发表于 06-30 14:51 0次下载