首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$sscanf在Questasim中不返回或设置值

$sscanf在Questasim中不返回或设置值
EN

Stack Overflow用户
提问于 2014-08-07 19:05:32
回答 1查看 2.2K关注 0票数 0

我的系统verilog代码有一个主要的兼容性问题。

我有一行代码:c = $sscanf(line, "0x%x %s %s %d", hex_value, type, name, size);

使用vcs编译器会产生以下结果:c = 4, hex_value = 0x001, type = "empty", name = "mem_block", size = 8

而使用Questasim vlog -svvsim -c则会产生如下结果:c = 0, hex_value = 0x000, type = "", name = "", size = 0

有没有人知道这个或其他字符串扫描功能的解决方案?

编辑:

我找到了没有打印出正确输出的原因。我使用:

display($sformatf("c=%d, hex_value = %x, type=%s, size=%s", c, hex_value, type, name, size));

将其更改为$display($sformatf(line, "c=%d, hex_value = %x, type=%s, size=%s", c, hex_value, type, name, size));,它在Questasim中的效果很好,但在VCS中却不是这样。我仍然有c作为0$sscanf返回的问题,而且它也没有将值设置为hex_value等。

编辑2:

找到问题但没有解决方案

bug/问题的原因是0x%x,在Questasim中,VCS需要这样做,而不是像0x0f1这样的东西,这会导致所有的值默认为0,这样c=0, hex_value=0x00, type=""等就会出现问题。在%x之前,我尝试了0xx0的不同组合,但似乎都不起作用。hex_value的定义如下typedef bit unsigned [63:0] hex_addr_t;所示

EN

回答 1

Stack Overflow用户

发布于 2014-08-08 14:48:41

发现这个问题,我有十六进制值0x前面的值不幸的是,这做了$sscanf扫描在VCS,然后将默认十六进制到0x0f1,并通过添加0x在VCS $sscanf跳过0x部分。不幸的是,这会导致Questasim将$sscanf给出的所有值默认为0,因为它不知道如何处理说明符。该问题的解决方案是使用for循环检查第一次出现的x,然后使用str.putc(len_to_x, "0")将其替换为0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25180911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档