STA & SI:: Chapter 1: Introduction | |||||
1.1a | 1.1b | 1.1c | 1.2a | 1.2b | |
INTRODUCTION | Timing Arc | Unate: Timing Arc | Unateness of Complex Circuit: Timing Arc | LIB File syntax for Logic Gates: Timing Sense | LIB File syntax for Complex Circuit: Timing Sense |
Representation of The Unateness of timing Arc In timing Library:
In the Timing Library, "Timing Arc information" is stored with the syntax "timing_sense".
1) For Single Input and Single Output
Buffer : timing_sense: positive_unate
To know more about the Unateness of Buffer, please read Article "Unateness- Timing Arc: Buffer"
/* --------------- *
* Design : BUF2X1 *
* --------------- */
cell (buf){
....
pin (A) {
....
direction : input;
capacitance : 1.0;
} /* End pin (A) */
pin(Y){
direction : output;
capacitance : 0.0;
function : "(A)";
....
....
timing(A_Y) {
related_pin : "A";
timing_sense : positive_unate;
....
....
}
...
...
}/* End pin (Y) */
}/* End cell (buf) */
So basically "timing_sense" will represent the unateness of a particular pin. But remember, if you wants to know the number of Timing Arc - then it's 2. One for Falling edge and other for Rising Edge.
Inverter : timing_sense: negative_unate
To know more about the Unateness of Inverter, please read Article "Unateness- Timing Arc: Inverter"
/* --------------- *
* Design : INVX1 *
* --------------- */
cell (inv){
....
pin (A) {
....
direction : input;
capacitance : 1.0;
} /* End pin (A) */
pin(Y){
direction : output;
capacitance : 0.0;
function : "(!A)";
....
....
timing(A_Y) {
related_pin : "A";
timing_sense : negative_unate;
....
....
}
...
...
}/* End pin (Y) */
}/* End cell (inv) */
Note:
- If you have noticed (or If you will compare in .lib file), through most of the parameters it's very difficult to understand whether it's Buffer or Inverter. There are only 2 parameter which can help you: "function" and "timing_sense".
- Name inside the timing() - is the Timing Arc name.
- You can see (in above examples) there is 1 Input Pin - which is A and one Output Pin which is Y. Now timing() is "related to" output Pin Y because timing arc is attached to an output pin. (you can get more clarity on this point later in this article)
2) For Multiple Input and Single Output
AND gate: timing_sense: positive_unate
To know more about the Unateness of AND gate, please read Article "Unateness- Timing Arc: AND gate"
/* --------------- *
* Design : AND2X1 *
* --------------- */
cell (AND2X1) {
....
....
pin(A) {
direction : input;
capacitance : 0.01;
rise_capacitance : 0.01;
fall_capacitance : 0.01;
}
pin(B) {
direction : input;
capacitance : 0.01;
rise_capacitance : 0.01;
fall_capacitance : 0.01;
}
pin(Y) {
direction : output;
capacitance : 0;
rise_capacitance : 0;
fall_capacitance : 0;
max_capacitance : 0.5;
function : "(A B)";
timing(A_Y) {
related_pin : "A";
timing_sense : positive_unate;
.....
.....
}
timing(B_Y) {
related_pin : "B";
timing_sense : positive_unate;
.....
.....
}
....
....
}
.....
.....
}
In this case both the Pins are of same type, we can combine the definition of timing arc into one. Like
timing(A_Y, B_Y) {
related_pin : "A B";
timing_sense : positive_unate;
....
....
}
Remember, all the parameters should be same. There are few parameters which we haven't discuss till now, but in reality before combining we have to review all.
OR gate: timing_sense: positive_unate
To know more about the Unateness of OR Gate, please read Article "Unateness- Timing Arc: OR Gate"
/* -------------- *
* Design : OR2X1 *
* -------------- */
cell (OR2X1) {
....
....
pin(A) {
direction : input;
capacitance : 0.015;
rise_capacitance : 0.015;
fall_capacitance : 0.015;
}
pin(B) {
direction : input;
capacitance : 0.01;
rise_capacitance : 0.01;
fall_capacitance : 0.01;
}
pin(Y) {
direction : output;
capacitance : 0;
rise_capacitance : 0;
fall_capacitance : 0;
max_capacitance : 0.4;
function : "(A+B)";
timing(A_Y) {
related_pin : "A";
timing_sense : positive_unate;
....
....
}
timing(B_Y) {
related_pin : "B";
timing_sense : positive_unate;
....
....
}
....
....
}
}
NOR gate: timing_sense: negative_unate
To know more about the Unateness of NOR gate, please read Article "Unateness- Timing Arc: NOR gate"
/* -------------- *
* Design : NOR2X1 *
* -------------- */
cell (NOR2X1) {
....
....
pin(A) {
direction : input;
capacitance : 0.015;
rise_capacitance : 0.015;
fall_capacitance : 0.015;
}
pin(B) {
direction : input;
capacitance : 0.01;
rise_capacitance : 0.01;
fall_capacitance : 0.01;
}
pin(Y) {
direction : output;
capacitance : 0;
rise_capacitance : 0;
fall_capacitance : 0;
max_capacitance : 0.4;
function : "(!(A+B))";
timing(A_Y) {
related_pin : "A";
timing_sense : negative_unate;
....
....
}
timing(B_Y) {
related_pin : "B";
timing_sense : negative_unate;
....
....
}
....
....
}
}
NAND gate: timing_sense: negative_unate
To know more about the Unateness of NAND gate, please read Article "Unateness- Timing Arc: NAND gate"
/* --------------- *
* Design : NAND2X1 *
* --------------- */
cell (NAND2X1) {
....
....
pin(A) {
direction : input;
capacitance : 0.01;
rise_capacitance : 0.01;
fall_capacitance : 0.01;
}
pin(B) {
direction : input;
capacitance : 0.01;
rise_capacitance : 0.01;
fall_capacitance : 0.01;
}
pin(Y) {
direction : output;
capacitance : 0;
rise_capacitance : 0;
fall_capacitance : 0;
max_capacitance : 0.5;
function : "(!(A B))";
timing(A_Y) {
related_pin : "A";
timing_sense : negative_unate;
.....
.....
}
timing(B_Y) {
related_pin : "B";
timing_sense : negative_unate;
.....
.....
}
....
....
}
.....
.....
}
XNOR gate: timing_sense: non_unate
To know more about the Unateness of XNOR gate, please read Article "Unateness- Timing Arc: XNOR gate"
/* -------------- *
* Design : XNOR2X1 *
* -------------- */
cell (XNOR2X1) {
....
pin(A) {
direction : input;
....;
}
pin(B) {
direction : input;
....;
}
pin(Y) {
direction : output;
....;
function : "(!(A^B))";
timing(A_Y) {
related_pin : "A";
timing_sense : non_unate;
....
....
}
timing(B_Y) {
related_pin : "B";
timing_sense : non_unate;
....
....
}
....
}
}
XOR gate: timing_sense: non_unate
To know more about the Unateness of XOR gate, please read Article "Unateness- Timing Arc: XOR gate"
/* -------------- *
* Design : XOR2X1 *
* -------------- */
cell (XOR2X1) {
....
....
pin(A) {
direction : input;
....;
}
pin(B) {
direction : input;
....;
}
pin(Y) {
direction : output;
....;
function : "(A^B)";
timing(A_Y) {
related_pin : "A";
timing_sense : non_unate;
....
....
}
timing(B_Y) {
related_pin : "B";
timing_sense : non_unate;
....
....
}
....
}
}
Representation of Unateness for few more complex circuits (like MUX) and Sequential circuits, we will discuss in next Articles.
For AND, when you combine the timing arcs, you have mentioned NEGATIVE unate, please check it once.
ReplyDeleteThanks For highlighting. Corrected.
DeleteHello sir, in the buffer section, you have written Design: BUF2X1. Is it correct?
ReplyDeleteYes, It's correct. If you are thinking about the BUFFER name Like BUF2X1 - so it's just a name. It can be anything.
DeleteIf your concern is "Design" Word - it's also okay because it's part of Comment. :) :)
Sir i wanted to ask what's the meaning of of the capacitance values written in the timing sense
ReplyDeleteWHAT is the meaning of the capacitances used here?
ReplyDelete