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

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

3天内不再提示

SystemVerilog:处理信号双驱动问题解析

sanyue7758 来源:处芯积律 2023-10-13 14:53 次阅读

1.前言

最近帮朋友搞定一个小问题,记录一下。不啰嗦,直接上结论:当某个信号出现多于一个驱动源的时候,或者某个信号是双向(inout)的时候,都需要使用wire来完成线网连接。具体用法就是声明某个信号为wire sigal_a;或者wire logic signal_a;就可以了。注意直接声明为logic signal_a;是不行的,会报类似如下的错误:xmelab: *E,ICDCBA: Illegal combination of driver and output clockvar to variable 'signal_a' detected (output clockvar found in ......).

2. 实例代码

776401b4-6910-11ee-939d-92fbcf53809c.png

interface test_if(input clk);
  //var logic multi_drv_sig;//code bug
  logic multi_drv_sig;//code bug
  //wire logic multi_drv_sig;//ok
  //wire multi_drv_sig;//ok


  clocking cb @(posedge clk);
    inout multi_drv_sig;
  endclocking


  modport modp_0(output multi_drv_sig);
  modport modp_1(input multi_drv_sig);
endinterface


module test();


test_if test_if0();


assign test_if0.modp_1.multi_drv_sig=0;
endmodule

3.Makefile脚本

all:clean
  xrun -sv -64bit -access rwc -top test ./*.sv
clean:
  rm -rf *.d *.history *.log
4.仿真结果

77841e18-6910-11ee-939d-92fbcf53809c.png

5.报错信息查询

如下图所示,查询报错信息的含义,xrun甚至还给出了解决方案,通过添加工具提供的选项-warn_multiple_driver的确可以将这个*E的Error降为Warning但是这不是问题的根源。

77a0912e-6910-11ee-939d-92fbcf53809c.png

6. 问题的根源

如下图所示,第4行和第5行的用法都是对的,第2行和第3行的用法都是错误的。

77b7907c-6910-11ee-939d-92fbcf53809c.png

7. Summary& Conclusion

在SystemVerilog中,类型可以分为线网(net)和变量(variable)。线网的赋值设定与Verilog的要求相同,即线网赋值需要使用连续赋值语句(assign),而不应该出现在过程块(initial/always)中;相比于线网驱动的限制,变量(var)类型的驱动要求就没有那么多了,如logic [15:0] signal_b,该变量默认类型是var(变量),对它可以使用连续赋值或过程赋值。

简言之,可以在module中的数值存储和线网连接,多数情况下使用logic类型变量,而很少有只能使用wire的情况。那么什么时候需要使用wire类型呢?就是本文的这种scenario:当某个信号出现多于一个驱动源的时候,或者某个信号是双向(inout)的时候,都需要使用wire来完成线网连接。具体用法就是声明某个信号为wire sigal_a;或者wire logic signal_a;就可以了。

编辑:黄飞

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

    关注

    47

    文章

    855

    浏览量

    102547
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109312
  • Makefile
    +关注

    关注

    1

    文章

    122

    浏览量

    19094

原文标题:SystemVerilog中如何处理信号的双驱动问题

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

收藏 人收藏

    评论

    相关推荐

    RCC电路原理与设计及问题解析

    RCC电路原理与设计及问题解析 RCC电路,单端反激式的一种,结构简单,主要应用在1~200W,首先变压器设计最为重要,RCC电路结构主要包括: 1.
    发表于 12-14 10:31 2.4w次阅读

    C语言习题解析

    C语言习题解析
    发表于 03-11 15:20

    round robin 的 systemverilog 代码

    大家好,我对一个 round robin 的 systemverilog 代码有疑惑。https://www.edaplayground.com/x/2TzD代码第49和54行是怎么解析呢 ?
    发表于 03-14 19:16

    UART串口与LWIP以太网问题解析

    技术三千问:【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总【技术三千问】之《AT组件问题汇总与解析》,干货汇总!【技术三千问】之《UART串口问题解析》,干货汇总!【技术三千问】之
    发表于 08-05 06:54

    电子设计竞赛赛题解析

    电子设计竞赛赛题解析 东西是非常不错的,可供参考.
    发表于 12-17 12:43 0次下载

    电视卡常见问题解决方法(驱动问题等)

    电视卡常见问题解决方法(驱动问题等) 比如有时发现装不上驱动,请查看自已的系统是否已经装了DirectX9.0C,如果没有,可以到
    发表于 12-06 08:37 2303次阅读

    车台天线的位置和辐射问题解析

    车台天线的位置和辐射问题解析 1、车台外接的天线,放在后备箱上比放在车顶中间的效果是不是差一些? 回答:车台的天线共有四
    发表于 01-04 09:44 3197次阅读

    自动控制原理习题解析

    自动控制原理习题解析,有需要的下来看看。
    发表于 05-05 14:06 0次下载

    风力摆控制系统赛题解析

    风力摆控制系统赛题解析
    发表于 12-09 23:00 31次下载

    解决高频MEMS测试驱动问题的方案是什么

    驱动电压需要达到150Vpp,目前市面上的标准信号发生器输出电压低、电压小于10Vpp带负载能力弱,输出电流是mA级别。无法解决高压大功率驱动问题。 如何解决高频MEMS测试驱动问
    发表于 12-08 11:32 671次阅读

    电工学-知识要点与习题解析电子版

    电工学-知识要点与习题解析电子版
    发表于 07-23 09:33 0次下载

    樊昌信《通信原理》真题解析及讲义电子版

    樊昌信《通信原理》真题解析及讲义电子版
    发表于 09-06 14:40 0次下载

    《电路考研精要与典型题解析》陈燕主编

    《电路考研精要与典型题解析》陈燕主编
    发表于 01-14 15:33 0次下载

    信号与系统 第3版》习题解析

    信号与系统 第3版》习题解析
    发表于 03-21 15:06 0次下载

    光耦失效的几种常见问题解析

    光耦失效的几种常见问题解析  光耦失效是一个常见的问题,特别是在电子设备中经常使用光耦进行隔离和信号传输的情况下。下面将详细介绍一些光耦失效的常见问题以及解析。 1. 输出信号弱或无输
    的头像 发表于 12-25 14:30 1836次阅读