湘攸客

Tcl/Tk的数学操作运算命令

0
阅读(2787)

前人总结了Tcl/Tk的数学操作运算命令:

http://home.lupaworld.com/home.php?mod=space&uid=381071&do=blog&id=151057

 

我现在为了节约virtual jtag的ir命令端口,需要在读FIFO的usedw的同时读回空、满标志,这时候在tcl里就需要分别从读回的十六进制数据中提取usedw、full以及empty。

我想用到的运输符有按位与以及boolen命令吧。

set jtag_index 0 			
		 device_lock -timeout 10000
		 device_virtual_ir_shift -instance_index $jtag_index -ir_value 1 -no_captured_ir_value
		 set usedw [device_virtual_dr_shift -instance_index $jtag_index -length 32 -value_in_hex]
		 device_unlock
		 
			set tmp 0x
			append tmp $usedw
			set usedw [format "%i" $tmp]

上述代码一次读回了32bit数据,如果usedw为8bit,而full在第10bit,empty在第9bit,那么在tcl里怎么实现如在hdl里那样方便的对任意位操作呢?故对上述代码进行如下修改:

set jtag_index 0 			
		 device_lock -timeout 10000
		 device_virtual_ir_shift -instance_index $jtag_index -ir_value 1 -no_captured_ir_value
		 set usedw [device_virtual_dr_shift -instance_index $jtag_index -length 32 -value_in_hex]
		 device_unlock
		 
			set tmp 0x
			append tmp $usedw
			set usedw [format "%i" $tmp]
			set full [expr $usedw&512]//;#按位与,只对整数操作数有效,full=0则FIFO未满,full=512则FIFO已满
			set empty [expr $usedw&256]//;#按位与,只对整数操作数有效,empty=0则FIFO未空,empty=256则FIFO已空
			set usedw [expr $usedw&255]//;#按位与,只对整数操作数有效