我正在编写一个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
答案 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参考手册:命令:检查。