Modeling of Linkers/Selectors

Discussion and feedback on the SJTAG Initiative Group weekly meetings.
Post Reply
User avatar
SJTAG Established Member
Posts: 31
Joined: Wed Nov 11, 2009 8:39 am
Location: Grenoble, France

Modeling of Linkers/Selectors

Post by Michele » Mon Jun 01, 2015 7:40 pm

To resume today's discussion (Meeting Minutes - 2015-06-01), I am looking at the model we depicted in our ITC poster
SJTAG System.png
What methods/features would a Linker need so that it can be included in the System Model and be used by the SJTAG Manager? We need to find the minimal set of primitives that can express the operation and instantiation of it.

Operation-wise, my proposal is :
- a linker is an element proposing "n" derivations
- the select(i)/deselect(i) methods allow the SJTAG manager to change the status of derivation i
- is_active(i) allows the Manager to query the System Model of the status of connection i. NB: this does not necessarily requires an access to the System Under Test

So, a vendor would need to provide this three methods as part of the SJTAG compliance, like a documentation. The format might be UML or anything else we come up with (ex a C function)

We will also need to add the Linker to the Circuit Model, so we need methods to:
- add the Linker node
- handle the node (ex: how to add derivations, are there link bits or not, etc...).

The post is already long, I will make a separate entry for the last topic.
Last edited by Ian McIntosh on Tue Jun 02, 2015 7:14 am, edited 1 time in total.
Reason: Added link to Meeting Minutes

User avatar
SJTAG Established Member
Posts: 31
Joined: Wed Nov 11, 2009 8:39 am
Location: Grenoble, France

Re: Modeling of Linkers/Selectors

Post by Michele » Tue Jun 02, 2015 7:54 am

Let me try to elaborate the concepts of the previous post:

- when the SJTAG manager needs to access derivation i, it queries the linker with linker.is_active(i);
- if the answer is false, it can make it active by calling;
- when the derivation is not useful anymore, it can be taken offline by calling linker.deselect(i);

The device vendor just needs to provide the object encapsulating of the three methods, that can be as simple (or as complicated) as possible, and simple describe the behavioural usage of the linker, not its internal structure (this is a BIG difference if compared to 1687 ICL). The Object-Oriented approach allows the vendor to enhance the basic node with his own internal representation, which can remain private if he does not wish the information to be disclosed. Thanks to the overloading of the methods, the SJTAG manager is completely oblivious of what is actually happening inside the linker.
Similarly, the linker object can be the composition of basic SJTAG Circuit Model nodes to express link bits and similar.
Let me go through the examples I put in the UML:
SIB UML v01.png
The "crossroad" object (representing the ScanMux to use 1687 terminology) contains the methods described above, but the SIB is also composed by a one-bit TDR register controlling it, which is therefore added to the CM. "is_active" just looks at the value of the control TDR bit, while select/deselect modify its value. In the image there is a fourth method that I did not describe yet: set_cross. Its role is to handle the low-level operations needed to actually changing the status of the crossroad: in this case, changing the value of the TDR bit.
OO allows this simple example to be easily modified to cater for SIB variations: changing the active value of TDR from 0 to 1 or changing the position of the TDR bit to put it after the mux or entirely in a different place. All this can be done by simply overloading the right method. Please note also that in my implementation I use a truth table inside the crossroad node to simplify the coding of the methods: OO allows me to do it, and I can declare it as private for it to remain transparent to the user.
The extension to multiple-bit SIB (the MIB) is straightforward:
MIB 1H UML v01.png
The TDR is bigger, and the is_active and select methods need to take care of assigning the right code word. Please note that
- "select" also takes care of deselecting any active derivation, thus assuring exclusive access
- the set_cross method is the same as the hardware interface does not change (write to a TDR register)
My playing on the methods, you can also express different coding styles, for instance allowing for multiple paths as the same time: you just need to change the select/deselct method, adding a masking with the current value to assure that only the status of path 'i' is modified.
Last but not least, overloading the set_cross methods allows you to describe non-JTAG operations, like for instance for the Brocade Linker:
Brocade v01.png
In this case the object is composed by only the crossroad node, as there are no TDRs involved in the configuration, which is done by an i2c access prior to the data scan: the node therefore needs a "do_preconditioning", whose method (previously left empty) is overloaded with an I2C operation. Here the interest of the set_cross method is clear: select/deselect are unchanged if compared to the SIB/MIB, but the low-level operation is mapped to a change in the "preconditioning_info", which is in fact the value of the i2c register controlling the mux. As a result, the SJTAG manager will be able to make an i2c access thanks ONLY to the methods overloaded by the device vendor, with no need of manual intervention.
The same principle applies to the BSCAN2 linker, where the preconditioning operation is in fact an Instruction Register cycle. I do not have an image ready, but I can try and make it in the future if you think it can help the discussion.
I believe I should also develop on this "preconditioning" and "postconditioning" concept, or is it clear ?

Key takeaway: thanks to this set of functional primitives, a Device Vendor can express the usage of an arbitrary complex linker while still remaining standard compliant. On the user side, the user just needs to include the object delivered by the vendor (in which format? it is still to be decided) to immediately start using it.



Post Reply