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

2013-6-7 13:44 2135 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”,即无符号数据即可。

PARTNER CONTENT

文章评论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 2025-01-16 13:07
PET探测器
记录下PET探测器的知识点。所谓探测器,即探测出核医学里的核辐射。人体代谢等反应发生的湮没产生了伽马光子,该伽马光子的能量很强,当前很难直接探测(尽管还存在直接探测的探测器)。所以,更多的时候是间接探...
coyoo 2024-12-25 14:13
ALTERA Cyclone 10器件的使用-8:特定的上电顺序
概述 Intel 要求用户为其10代FPGA器件使用特定的上电和掉电顺序,这就要求用户在进行FPGA硬件设计的时候必须选择恰当的FPGA供电方案,并合理控制完整的供电上电顺序。经过在Cyclone 1...
coyoo 2024-12-22 11:46
AD9218子板在新处理板上表现的问题
概述 新的数据处理板融合了数字和数据处理功能模块,计划采用ADI的4通道串行ADC芯片代替之前的并行ADC。由于初次使用,所以初次设计时预留了AD9218的子板的插槽。 在调试AD9633功能的同时并...
coyoo 2024-12-14 17:15
在Cyclone 10 GX器件上实现高精度TDC探索
概述 Cyclone 10 GX器件的ALM结构与Cyclone V类似,所以在Cyclone 10 GX器件上实现TDC功能理论上是可以完全参考甚至移植自Cyclone V系列的成功案例。但是,现实...
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读出测试系统需要解...
我要评论
7
15
关闭 站长推荐上一条 /3 下一条