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

时间:2014-05-06 08:49:38

标签: tcl

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

代码段:

set ExpAddr 0xffff0000
set Addr "sim:/tb_top/dut_top/m1/m2/m3/addr"
set ActualAddr "[examine -hex $Addr]"

if { $ActualAddr == $ExpAddr } {
    puts  " ADDR MATCH DETECTED @ time [expr $now/1000000.0] us "
} else {
    puts  " ADDR MATCH NOT DETECTED @ time [expr $now/1000000.0] us " 
    puts $ActualAddr
    puts $ExpAddr
}

结果:

ADDR MATCH NOT DETECTED @ time 145.99 us
Actual Address   : 44'h000ffff0000
Expected Address : 0xffff0000

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

使用

set hex 0xffff0000

设置为十六进制值

答案 2 :(得分:0)

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

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

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