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

时间:2014-08-07 11:05:32

标签: verilog fpga system-verilog

我的系统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中却没有。我仍然遇到c0返回$sscanf的问题,也没有将值设置为hex_value等。

编辑2:

发现问题但不是解决方案

错误/问题的原因是0x%x,其中VCS需要这样做而不是像0x0f1这样的东西,而在Questasim这导致所有的值默认为0,因此{{1}有谁知道解决这个问题的好方法?我在c=0, hex_value=0x00, type=""之前尝试了0xx0的不同组合,但似乎没有任何效果。 %x的定义与此hex_value

相同

1 个答案:

答案 0 :(得分:1)

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

相关问题