原创 【博客大赛】虚拟JTAG调试小问题一例-数据格式转换

2013-6-7 13:44 2113 15 22 分类: 测试测量 文集: Virtual JTAG

实际工作中笔者的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”,即无符号数据即可。

文章评论7条评论)

登录后参与讨论

coyoo 2014-1-3 09:32

这个问题其实我前面已经答复你了,tcl的操作数都是字符,所以你应该首先将要写的数值转换成二进制数值。比如你写数值9,其实tcl就是认为这个是个字符而已,不是二进制的“1001”;而且如果这是length是8,那么你需要在二进制“1001”之前补齐四个“0”

用户183270 2014-1-2 21:20

写0-7对应-length 3参数设置都成功,写0-7对于-length 8参数不成功。前提是我重新例化了ip分别IR对应3bit和8bit

coyoo 2014-1-2 16:20

写的时候最大长度是3是怎么验证出来的?写0到7都成功?写大于8的数值就不行?

用户183270 2014-1-2 13:32

原来帐号找到了 coyoo,我ip定义ir位宽8bit,逻辑移位寄存器也是8bit,我认为位宽定义是对的,但操作起来读没问题,都可以,但写-length长度的问题了,我发现不管我怎么弄,传输dr_value的长度就只能最大是3即-length 3.我最初以为是ip的ir的bit位长度造成的,结果好像不是 device_virtual_ir_shift -instance_index 0 -ir_value 3 -no_captured_ir_value device_virtual_dr_shift -instance_index 0 -dr_value $update_value -length 8 -value_in_hex -no_captured_dr_value 报一下错误 #ERROR: The length of the value string specified does not match the length parameter specified. 貌似应该是IP和tcl控制台参数传送上问题。 能指点一下么?先谢谢。我10.1版本

coyoo 2014-1-2 10:06

脚本和逻辑里的位宽定义要一致;还有就是脚本不支持直接的按位操作,需要进行转换

用户1462194 2013-12-31 16:56

coyoo,有个virtual jtag问题请教一下,我用vj上传数据的时候命令如下:1、命令 2、写数据 1、device_virtual_ir_shift -instance_index 0 -ir_value 6 -no_captured_ir_value 2、device_virtual_dr_shift -instance_index 0 -dr_value $update_value -length 3 -value_in_hex -no_captured_dr_value 发现2命令写数据的时候-length 3这个参数长度只能是vj core例化时指定的ir指令位宽。其他值tcl运行的时候会报错,这样导致结果是如果要vj读写的话,ir要定义的很宽以保证足够的数据位宽

用户1462194 2013-12-31 16:56

coyoo,有个virtual jtag问题请教一下,我用vj上传数据的时候命令如下:1、命令 2、写数据 1、device_virtual_ir_shift -instance_index 0 -ir_value 6 -no_captured_ir_value 2、device_virtual_dr_shift -instance_index 0 -dr_value $update_value -length 3 -value_in_hex -no_captured_dr_value 发现2命令写数据的时候-length 3这个参数长度只能是vj core例化时指定的ir指令位宽。其他值tcl运行的时候会报错,这样导致结果是如果要vj读写的话,ir要定义的很宽以保证足够的数据位宽
相关推荐阅读
coyoo 2024-12-10 13:28
Cyclone V GX FPGA设计TDC的优化问题
概述 通过前面的研究学习,已经可以在CycloneVGX器件中成功实现完整的TDC(或者说完整的TDL,即延时线),测试结果也比较满足,解决了超大BIN尺寸以及大量0尺寸BIN的问题,但是还是存在一些...
coyoo 2024-12-03 12:20
比较器检测模拟脉冲说明(四)
概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解...
coyoo 2024-11-16 13:54
不同ADC采样同一前端模拟信号时转换用时差异分析
概述 同一组前端模拟信号接入由不同型号ADC组成的模数转换电路时,采样后在FPGA中发现采样用时差异较大。本文主要分析这个时间差异形成的原因,并记录该差异产生对系统造成的影响。系统数字化简介 项目前端...
coyoo 2024-11-10 13:04
ALTERA Cyclone 10器件的使用-7:FPGA片内RAM资源利用率思考
概述 项目使用的FPGA目标器件为Cyclone 10 GX系列规模最大一颗料,由于功能升级增加了功能模块更多,发现器件片内RAM不够使用了。为了探索片内RAM使用的利用率问题,从代码RTL级与编译软...
coyoo 2024-11-10 12:30
转知乎:幽灵般的人体成像技术-PET
幽灵般的人体成像技术——PET - 知乎...
coyoo 2024-11-09 10:26
AD9633默认情况下调试记录(二)
概述 所谓默认情况,即如器件手册中图2所标示那样。对应AD9633的调试,除了涉及到ADC自身,还需要兼顾前端驱动器,系统中AD9633驱动器使用了差分运算放大器,这里不在赘述,笔者已有相关文章论述。...
我要评论
7
15
关闭 站长推荐上一条 /2 下一条