实际工作中笔者的virtual JTAG调试平台在测试的时候发挥重大的作用,不过最近遇到一个小问题,即在采集到的数据中出现了负数。而实际从FPGA处理的数据来看根本不可能出现负的数据的,所以问题应该出在TCL代码上。
经过分析发现问题出在了TCL程序中的数据格式转换上,下面是完整代码:
device_lock -timeout 100
device_virtual_ir_shift -instance_index $jtag_index -ir_value 17 -no_captured_ir_value
set fifo_data [device_virtual_dr_shift -instance_index $jtag_index -length 32 -value_in_hex]
device_unlock
.top.t insert end "\n$fifo_addr ---- 0x$fifo_data"
set fifo_data_dec 0x
append fifo_data_dec $fifo_data
set fifo_data_dec [format "%i" $fifo_data_dec]
puts $myfile $fifo_data_dec
首先测试平台通过JTAG从FPGA的FIFO中读出一个32-bit的数据,读出的数据是HEX格式,笔者希望将这些个读出来的数据按照十进制格式存放到文件中,所以先要将这些十六进制格式的数据转换成十进制。由于该FIFO可以用于存储各种各样的数据,但是很长一段时间以来测试的数据都没有达到过32-bit,即最高位一直为“0”,所以一直都没有出现上述问题。最近需要读出的数据正好有可能达到32-bit,也即第32比特有可能为1,所以转换的时候将这个“1”当作了符合位“负”了。上述代码中数据格式转换命令“format”使用的参数是“i”,即整型,只需将这个参数改为“u”,即无符号数据即可。
coyoo 2014-1-3 09:32
用户183270 2014-1-2 21:20
coyoo 2014-1-2 16:20
用户183270 2014-1-2 13:32
coyoo 2014-1-2 10:06
用户1462194 2013-12-31 16:56
用户1462194 2013-12-31 16:56