Intel® Quartus® Prime Pro Edition User Guide: Scripting

ID 683432
Date 9/26/2022
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

4.1.22.3. device_ir_shift (::quartus::jtag)

The following table displays information for the device_ir_shift Tcl command:

Tcl Package and Version

Belongs to ::quartus::jtag

Syntax device_ir_shift [-h | -help] [-long_help] -ir_value <instruction register value> [-no_captured_ir_value]
Arguments -h | -help Short help
-long_help Long help with examples and possible return values
-ir_value <instruction register value> Value to be written into the instruction register in the JTAG tap controller of the open device. Operand must be of a TCL numerical type such as decimal (10), hexadecimal (0xa), or octal number (012)
-no_captured_ir_value Option to not return the captured instruction register value. If this is specified, this IR scan may be packed together with the subsequent IR or DR scan until the device is unlocked or a captured value is requested
Description
		Writes the specified value into the instruction
register of the JTAG tap controller of the open
device. Returns the captured instruction register
value. The captured value return can be disabled to
improve the JTAG communication speed by packing
multiple IR or DR scans together.

The instruction register length is determined
automatically by the Quartus Prime JTAG server.

The device must be locked first before this operation.
Example Usage
# List all available programming hardware, and select the USB-Blaster.
# (Note: this example assumes only one USB-Blaster is connected.)
puts "Programming Hardware:"
foreach hardware_name [get_hardware_names] {
	puts $hardware_name
	if { [string match "USB-Blaster*" $hardware_name] } {
		set usbblaster_name $hardware_name
	}
}
puts "\nSelect JTAG chain connected to $usbblaster_name.\n";

# List all devices on the chain, and select the first device on the chain.
puts "\nDevices on the JTAG chain:"
foreach device_name [get_device_names -hardware_name $usbblaster_name] {
	puts $device_name
	if { [string match "@1*" $device_name] } {
		set test_device $device_name
	}
}
puts "\nSelect device: $test_device.\n";

# Open device 
open_device -hardware_name $usbblaster_name -device_name $test_device

# Retrieve device id code.
# IDCODE instruction value is 6; The ID code is 32 bits long.

# IR and DR shift should be locked together to ensure that other applications 
# will not change the instruction register before the id code value is shifted
# out while the instruction register is still holding the IDCODE instruction.
device_lock -timeout 10000
device_ir_shift -ir_value 6 -no_captured_ir_value
puts "IDCODE: 0x[device_dr_shift -length 32 -value_in_hex]"
device_unlock

# Close device
close_device
Return Value Code Name Code String Return
TCL_OK 0 INFO: Operation successful
TCL_ERROR 1 ERROR: A device has not been locked; exclusive communication must be obtained first.
TCL_ERROR 1 ERROR: A device has been locked by another application; exclusive communication cannot be granted within the specified timeout period.