tcl脚本中十六进制数(32';h和0x)的比较

tcl脚本中十六进制数(32';h和0x)的比较,tcl,Tcl,我正在编写一个tcl脚本(在questasim中),它进行以下比较。但值相同,但仍不匹配。任何指向这一点的指针都会有所帮助 代码段: 结果: 在时间145.99 us时未检测到地址匹配 实际地址:44'h000ffff0000 预期地址:0xffff0000 使用 要设置为十六进制值,根据检查命令和sim://路径,我猜测这类似于ModelSim的脚本。在这种情况下,44'h以Verilog方式标记44位十六进制值 可能获得数值比较的最简单的方法是请求一个不同的基数。如果使用examine-ra

我正在编写一个tcl脚本(在questasim中),它进行以下比较。但值相同,但仍不匹配。任何指向这一点的指针都会有所帮助

代码段: 结果: 在时间145.99 us时未检测到地址匹配 实际地址:44'h000ffff0000 预期地址:0xffff0000 使用


要设置为十六进制值,根据
检查
命令和
sim://
路径,我猜测这类似于ModelSim的脚本。在这种情况下,
44'h
以Verilog方式标记44位十六进制值

可能获得数值比较的最简单的方法是请求一个不同的基数。如果使用
examine-radix unsigned
,则应获得十进制形式,并且可以使用
expr
将0x形式的十六进制常量转换为数字


来源:Tcl wiki,ModelSim SE参考手册:命令:检查

您需要解码该地址。这是Tcl温文尔雅的超级英雄之一的工作

scan [examine -hex $Addr] "%d'h%x" BitWidth ActualAddr

现在,您应该能够使用数字比较(
==
)与0xffff0000进行比较。作为奖励,您还获得了值中的实比特数(存储在
BitWidth
变量中)。

谢谢Donal。现在可以了!我也试过Yann的解决方案!这两种方法都有效。嗨,多纳尔,相同的比较方法不适用于“when”命令。例如,
when-label my_addr“$actualadr==$expaddr”{…}
实际地址为44'h格式,expaddr为0x格式。你对此有什么想法吗?嗨,Yann,同样的比较不适用于“when”命令。例如,当-label my_addr“$actualaddr==$expaddr”{…}时,实际地址为44'h格式,expaddr为0x格式。你对此有什么想法吗? ADDR MATCH NOT DETECTED @ time 145.99 us Actual Address : 44'h000ffff0000 Expected Address : 0xffff0000
set hex 0xffff0000
scan [examine -hex $Addr] "%d'h%x" BitWidth ActualAddr