--- Quote Start ---
Is there a JTAG IR code that reads back the unique chip ID? I'm hoping to read the chip ID back with a code like this:
device_ir_shift -ir_value <CHIP-ID-IR> -no_captured_ir_value
device_dr_shift -length 64 -value_in_hex
Cheers,
--- Quote End ---
You mean the silicon-specific IDCODE value, like this:
******************************************************************************
* Altera Chain Interrogation Version 5.0 *
* Copyright (c) 1999-2007 Altera Corporation. All Rights Reserved. *
******************************************************************************
Chain Continuity Checker
Chain Continuity during IR is not stuck at zero or one
******************************************************************************
Chain Length -- Load IR of all ones then count DR length
Number of Devices is 22
******************************************************************************
IR Length Calculator
Instruction Register Length is 157
******************************************************************************
IDCODE Reader
------ | ---------- | ---- ------------------- ------------- - |
Device | IDCODE | Rev DeviceCode Manufacturer 1 |
------ | ---------- | ---- ------------------- ------------- - |
ID 001 | 0x7A363013 | 0111 1010 0011 0110 0011 0000 0001 001 1 |
ID 002 | 0x85101013 | 1000 0101 0001 0000 0001 0000 0001 001 1 |
ID 003 | 0x95100013 | 1001 0101 0001 0000 0000 0000 0001 001 1 |
ID 004 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 005 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 006 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 007 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 008 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 009 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 010 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 011 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 012 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 013 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 014 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 015 | 0x1000011B | 0001 0000 0000 0000 0000 0001 0001 101 1 |
ID 016 | 0x1874839B | 0001 1000 0111 0100 1000 0011 1001 101 1 |
ID 017 | 0x00000000 | .... .... .... .... .... .... .... ... 0 |
ID 018 | 0x00000000 | .... .... .... .... .... .... .... ... 0 |
ID 019 | 0x175D014B | 0001 0111 0101 1101 0000 0001 0100 101 1 |
ID 020 | 0x4403D093 | 0100 0100 0000 0011 1101 0000 1001 001 1 |
ID 021 | 0xD5059093 | 1101 0101 0000 0101 1001 0000 1001 001 1 |
ID 022 | 0x2402E093 | 0010 0100 0000 0010 1110 0000 1001 001 1 |
------ | ---------- | ---- ------------------- ------------- - |
******************************************************************************
Exit code = 0... Success
I did this using the Altera JAM STAPL player using an Altera USB Blaster connected to a board with lots of devices (22) in the JTAG chain.
For a simple example of how to toggle the JTAG lines to read the IDCODE register in devices see:
http://www.fpga4fun.com/jtag3.html This page assumes you have a simple way (via GPIO port, for example) of controlling the JTAG lines.