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

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

3天内不再提示

原来SpinalHDL中BlackBox封装数组接口如此简单

Spinal FPGA 来源:Spinal FPGA 2023-05-22 10:04 次阅读

编 者 按

当在SpinalHDL中调用别人的RTL代码时,需要采用BlackBox进行封装。对于大多数场景,想必小伙伴们都已轻车熟路。今天着重来看下当RTL代码的接口中存在数组形式的接口时如何处理。

合并数组和非合并数组 在开始之前先了解两个概念:合并数组与非合并数组。在SystemVerilog中,关于可综合的数组存在两种形式:
wire [1:0][7:0] data0; //合并数组 wire [7:0] data1[1:0]; //非合并数组 ‍ 在仿真方面,合并数组是紧密排列的,而非合并数组则是按照内存对齐的形式进行排列(电路综合中则无需考虑):

a866bb9c-f70c-11ed-90ce-dac502259ad0.jpg

相应的,合并数组则可以作为一个整体进行赋值,而非合并数组则不可以:

a874c598-f70c-11ed-90ce-dac502259ad0.png

而合并数组与非合并数组,则可以通过SystemVerilog中所提供的流操作符进行相互转换处理(是可以综合的):

a8862f7c-f70c-11ed-90ce-dac502259ad0.png   

》BlackBox封装

在了解了上面的背景知识之后,再来看如何这种数组类场景如何封装至BlackBox。两条规则:

1、BlackBox封装针对数组类接口仅能支持合并数组类型。

2、当接口中存在非合并数组接口时则需手动封装一层通过流操作符将非合并数组转换为合并数组。

基于上面的规则,可以进行数组接口的BlackBox封装。

看下面的RTL代码示例:

a8a2a85a-f70c-11ed-90ce-dac502259ad0.png

该模块输入,输出均为一个合并数组,实现功能为两个元素的数据交换。我们在进行封装BlackBox时可采用下面的封装形式:

a8bcf00c-f70c-11ed-90ce-dac502259ad0.png

这里我们在BlackBox中定义接口时将合并数组data_in,data_out均定义为Bits类型,宽度为合并数组中所有元素的位宽总和(2*8).

(这里面的setInlineVerilog也可不写,主要是懒得再创建一个SV文件了。关于这部分功能可参见《彩——看blackBox的inline功能》)

在进行调用时就可以和其他调用没有区别了:

a8d9867c-f70c-11ed-90ce-dac502259ad0.png

进行仿真:

a8e007e0-f70c-11ed-90ce-dac502259ad0.png

结果非常符合预期:

a8ef52a4-f70c-11ed-90ce-dac502259ad0.png

审核编辑:汤梓红

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

    关注

    33

    文章

    8596

    浏览量

    151143
  • 封装
    +关注

    关注

    126

    文章

    7901

    浏览量

    142948
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59778
  • 代码
    +关注

    关注

    30

    文章

    4788

    浏览量

    68600
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25945

原文标题:惊!原来SpinalHDL中BlackBox封装数组接口如此简单

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

收藏 人收藏

    评论

    相关推荐

    原来单片机编程可以如此简单

    原来单片机编程可以如此简单
    发表于 08-11 18:54

    SpinalHDL里实现优雅的添加待跟踪波形信号

    在FPGA的开发过程,在线抓取波形往往是终极调试大法。而如何抓取信号,相信做逻辑开发的小伙伴都是轻车熟路,张口就来,无非两种方式嘛:待跟踪信号添加原语或者手动例化Ila。而在SpinalHDL
    发表于 06-22 14:37

    SpinalHDL的设计中集成现有RTL设计(IP)的渠道——BlackBox

    接口及parameter参数(这也是我们在RTL里例化IP时常用的)。我们来看SpinalHDL-doc给出的example:整个代码里做了三件事:参数声明、端口声明,时钟域映射。参数声明在上例
    发表于 06-22 14:59

    关于SpinalHDL的验证覆盖率收集简单说明

    在做RTL仿真验证时,覆盖率收集往往是我们在验证需要注意的地方,本篇就SpinalHDL的验证覆盖率收集做一个简单说明。sbt配置在Spinal
    发表于 06-24 15:56

    聊一聊SpinalHDL 1.6.1引入的blackbox inline功能

    BlackBox在之前的文章,曾介绍过如何封装兼容别人的RTL代码:SpinalHDL——集成你的RTL代码整体的思路还是简洁明了的,相信读完后照着做很快就能上手。这对于保持设计的兼
    发表于 06-29 16:02

    聊聊SpinalHDL的FIFO

    显示在Pop接口,那么此时可以选择StreamFifoLowLatency:其时序模型为:至于里面的设计原理,建议自己去翻看一下源代码,很简单,重要的是将它封装成标准的组建,减少我们真正“业务代码”
    发表于 06-30 15:28

    SpinalHDL是如何让仿真跑起来的

    SpinalHDL的测试代码里也可以起多个,不过其为协程。SpinalHDL的仿真库已经帮我们封装好了底层协程的处理,两个协程之间的通信(类似systemVerilog的mailb
    发表于 07-25 15:09

    记录一个在使用BlackBoxparameter踩到的坑

    SpinalHDL doc里面也曾提到,在创建BlackBox时,关于原始RTL代码的parameter的处理方式为:嗯,看起来很简单,我们照猫画虎就好了,最近在写代码时偶然间踩到了
    发表于 08-31 14:58

    SpinalHDL的对应关系及声明形式

    针对SpinalHDL的两大类型Reg、Wire,来梳理下在SpinalHDL的对应关系及声明形式。
    的头像 发表于 07-03 11:02 1567次阅读

    SpinalHDL BlackBox时钟与复位

    SpinalHDL中使用之前已有的Verilog等代码的时候需要将这些代码包在一个BlackBox里面,但是如果这些代码里面有时钟和复位,我们需要怎么将时钟和复位端口和SpinalHDL
    的头像 发表于 05-04 11:13 813次阅读
    <b class='flag-5'>SpinalHDL</b> <b class='flag-5'>BlackBox</b>时钟与复位

    当RTL代码的接口中存在数组形式的接口时如何处理?

    当在SpinalHDL调用别人的RTL代码时,需要采用BlackBox进行封装。对于大多数场景,想必小伙伴们都已轻车熟路。
    发表于 07-12 16:21 477次阅读
    当RTL代码的<b class='flag-5'>接口</b>中存在<b class='flag-5'>数组</b>形式的<b class='flag-5'>接口</b>时如何处理?

    Verilog代码封装后门访问

    关于仿真里的后门访问,之前的文章《三分钟教会你SpinalHDL仿真中的后门读写》中有做过介绍,其针对的都是针对以SpinalHDL的代码进行的后门访问。今天来看看当封装了Veril
    的头像 发表于 07-15 10:22 879次阅读
    Verilog代码<b class='flag-5'>封装</b>后门访问

    看懂EMC整改知识:原来竟然如此简单!(上)

    看懂EMC整改知识:原来竟然如此简单!|深圳比创达EMC(上)
    的头像 发表于 09-06 11:10 965次阅读

    看懂EMC整改知识:原来竟然如此简单!(下)

    看懂EMC整改知识:原来竟然如此简单(下)?相信不少人是有疑问的,今天深圳市比创达电子科技有限公司就跟大家解答一下!
    的头像 发表于 09-08 11:02 680次阅读
    看懂EMC整改知识:<b class='flag-5'>原来</b>竟然<b class='flag-5'>如此</b><b class='flag-5'>简单</b>!(下)

    浅析SpinalHDLPipeline的复位定制

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