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

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

3天内不再提示

如何遍历force多位宽信号的每一比特?

sanyue7758 来源:硅芯思见 2023-07-12 09:35 次阅读

大家在构建测试激励时,经常会遇到需要使某个信号强制变成某个值,此时我们经常会用到Verilog和SystemVerilog中的force实现这样的功能。但是有时候在对多位宽的信号进行force时有时会出现编译错误,这是为什么呢?本文将对此类情况进行示例说明。

【示例】

ebc0038a-1ffc-11ee-962d-dac502259ad0.png

仿真结果】

ebe4a1c2-1ffc-11ee-962d-dac502259ad0.png

示例中,通过三种方式对sig中的部分位选进行了force。通过force将sig中的第0位force为了1,从显示信息可以看到sig[0]已经被修改;通过force将sig中的第0位和第1位force为了00,从显示信息可以看到sig[1:0]已经被修改;通过force将sig整体force为了0111,从显示信息可以看到sig[1:0]已经被修改;

可以看到,我们可以通过force对于变量、变量中的某一位或者某一个片段进行改变,那么可能有些人觉得这么一位一位的进行force太麻烦了,是否可以使用for循环对sig中所有位遍历进行force呢?请看下例。

【示例】

ebf79fca-1ffc-11ee-962d-dac502259ad0.png

【仿真结果】

ec34e006-1ffc-11ee-962d-dac502259ad0.png

编译错误!这是为什么呢?对比该示例和上一示例,可以发现当信号的索引为常值时,可以进行force,但是当索引为变量时,此时编译不通过。

也就是说在对信号进行force的时候,如果要对其中的某一位或者一个片段进行force时,其中的索引只能是常数不能是变量,否则将会导致便以失败。

那么如果想实现通过变量实现对于多位宽信号中每一位进行force还有什么办法吗?下面我们通过示例介绍几种。

【示例】使用generate结构

ec46877a-1ffc-11ee-962d-dac502259ad0.png

【仿真结果】

ec5d28d6-1ffc-11ee-962d-dac502259ad0.png

示例中,使用generate结构实现了对于sig中每一位的遍历。这其实借助了generate是在仿真前的析构(elaboration)阶段完成的特性,即在仿真开始之前,相当于已经将sig被force的每一位的initial结构都已经生成好了,这样在仿真开始执行时(生成好的initial块开始被执行时),其中“force sig[i]”中的i都已经是确定的值了,因此就可以避免force信号中某一位时,索引为变量的情况。

除了这种在析构(elaboration)阶段就生成好语句结构的方式外,还可以想如下方式操作。

【示例】

ec719d84-1ffc-11ee-962d-dac502259ad0.png

【仿真结果】

ec8f34de-1ffc-11ee-962d-dac502259ad0.png

示例中,实际上是将要force的信号每一位都单独写了出来,即保证了被force信号的索引都是常量,缺点是,如果这个信号比较宽,那么写起来比较枯燥,没有上一种使用generate结构方便。但是实际上两者之所有都没有问题,其实都是保证了被force信号的索引是个常值。

所以,如果在实际使用时,需要对多位宽信号的每一位或者某一个片段进行force,那么需要保证被force的那一位或者那一个片段的索引值在仿真运行开始时是常值。






审核编辑:刘清

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

    关注

    14

    文章

    1011

    浏览量

    83582
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8204

原文标题:如何遍历force多位宽信号的每一比特

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

收藏 人收藏

    评论

    相关推荐

    多位数据通过握手方式跨时钟域

    对于多位数据,我们可以采用握手方式实现跨时钟域操作。该方式可直接使用xpm_cdc_handshake实现,如下图所示。
    的头像 发表于 05-06 09:22 1074次阅读
    <b class='flag-5'>多位</b><b class='flag-5'>宽</b>数据通过握手方式跨时钟域

    求教纵线有有窄的怎么知道条线对应的数值呢?

    求大神告知这种图要怎么看啊?、纵线有有窄的怎么知道条线对应的数值呢?
    发表于 08-09 14:44

    同步从个时钟域到另个时钟域的多位信号怎么实现?

    你好,我在Viv 2016.4上使用AC701板。我需要同步从个时钟域到另个时钟域的多位信号(33位)。对我来说,这个多位
    发表于 08-17 07:48

    I-Force410无铁芯直线电机

    I-Force 410 无铁芯直线电机峰值推力可达 3928N, 卓越的加速度和紧凑的体积. 50.8mm 的无铁芯设计具有零齿槽效应力,同时工字型骨架绕组提供很高的推力/体积密度比和优越的散热
    发表于 09-01 08:54

    LS1046 SDRAM多位错误注入怎么处理?

    ) 来注入 ECC 多位错误,但它崩溃了。但它通过使用上述寄存器 DATA_ERR_INJECT_HI(设置为 0x01 用于位 0 反转)来进行单比特错误注入,单比特错误由 ERR_DETECT 检测。有什么想法可以防止崩溃或
    发表于 03-28 07:19

    Design of Crimp force Monitor

    Crimp Force Monitor is a product using highly sensitive force sensors to detectdefective crimping.
    发表于 08-25 15:05 21次下载

    存储百倍提升! IBM纳米技术1比特12原子

    提到存储,比特(bit)是最小的单位,然而一比特需要多少个原子呢?最近IBM的研究人员用纳米技术诠释了这概念,存储一比特信息仅需12个原子。
    发表于 01-16 09:30 4414次阅读

    二叉树的前序遍历、中序遍历、后续遍历的非递归实现

    前序遍历:先访问该节点,然后访问该节点的左子树和右子树; 中序遍历:先访问该节点的左子树,然后访问该节点,再访问该节点的右子树; 后序遍历:想访问该节点的左子树和右子树,然后访问该节点。
    发表于 11-27 11:24 1117次阅读

    jquery的each遍历方法

    本文为大家介绍Jquery中each的三种遍历方法,有兴趣的伙伴可以参考下。
    发表于 12-03 10:19 2530次阅读

    螺旋遍历二维数组漫画讲解

    来自公众号:程序员小灰 第二天 什么意思呢?我们来举个例子,给定下面这样个二维数组: 我们需要从左上角的元素1开始,按照顺时针进行螺旋遍历遍历完所有的元素,
    的头像 发表于 11-26 14:01 1714次阅读

    总结下OpenCV遍历图像的几种方法

    在图形处理中,遍历每个像素点是最基本的功能,是做算法的基础,这篇文章来总结下OpenCV遍历图像的几种方法。
    的头像 发表于 01-18 15:08 1660次阅读

    HashMap遍历操作为什么不能遍历遍删除呢?

    上面出现这样的原因是在使用 foreach 对 HashMap 进行遍历时,同时进行 put 赋值操作会有问题,异常 ConcurrentModificationException。
    的头像 发表于 02-10 11:25 530次阅读

    跨时钟域电路设计:多位数据通过FIFO跨时钟域

    FIFO是实现多位数据的异步跨时钟域操作的常用方法,相比于握手方式,FIFO方面允许发送端在每个时钟周期都发送数据,另方面还可以对数据进行缓存。需要注意的是对FIFO控制
    的头像 发表于 05-11 14:01 2865次阅读
    跨时钟域电路设计:<b class='flag-5'>多位</b><b class='flag-5'>宽</b>数据通过FIFO跨时钟域

    对于多位的异步信号如何进行同步呢?

    对于多位的异步信号如何进行同步呢? 异步信号(Asynchronous Signals)是指系统中发生的事件或者信号,它们的发生时间不可预测、不可控制,与其他的进程、线程以及系统中的各
    的头像 发表于 09-12 11:18 1356次阅读

    python如何遍历列表并提取

    遍历列表是Python中非常常见的操作之,可以使用for循环或者while循环来实现。下面我将详细介绍如何使用for循环遍历列表并提取元素。 首先,让我们简单了解下Python中的
    的头像 发表于 11-23 15:55 1229次阅读