SXLIB(5)
SXLIB(5) โ CAO-VLSI Reference Manual ๐
okay bestie, sit DOWN, we're doing the standard cell library tour and it's a long one so buckle up ๐ this is sxlib(5), from the CAO-VLSI Reference Manual, and I'm gonna walk you through every single thing in here, no skips, no cap.
โจ NAME โจ
sxlib โ a portable CMOS Standard Cell Library ๐
๐ธ ORIGIN ๐ธ
so this software belongs to the ALLIANCE CAD SYSTEM, developed by the ASIM team at the LIP6 laboratory of Universitรฉ Pierre et Marie CURIE, in Paris, France ๐ซ๐ท (yes, the Paris one, main character energy fr)
- Web :
http://asim.lip6.fr/recherche/alliance/ - E-mail :
alliance-users@asim.lip6.fr
๐ฆ DESCRIPTION ๐ฆ
the sxlib library contains standard cells that were developed at UPMC-ASIM/LIP6, and this manual is giving you the full list of available cells โ their behavior, their width, their maximum delay and their input fan-in. it also gives you a few thumb rules so you can actually use these cells well ๐ซถ
heads up: the delays listed here are the maximum ones, meaning worst case for a generic .35 micron process. if you want more precise delay numbers, go look in the ALLIANCE VHDL behavior files (the .vbe file). ๐
also, the cell name is built like this: <behavior>_<output drive> โ explanations for that are below, keep reading.
Four files are attached to each cell:
- ALLIANCE Layout ...............
cell-name.ap - ALLIANCE Transistor net-list ..
cell-name.al - ALLIANCE VHDL behavior ........
cell-name.vbe - Compiled HILO behavior ........
0000000xx.dat
And a few files more:
- CATAL ......................... ALLIANCE catalog file
sxlib.cct..................... Cell definition for HILO CAD toolsCIRCUIT.idx................... HILO catalog filesxlib.lib..................... Cell definition for Synopsys CAD toolssxlib.db...................... Compiled cell definition for Synopsyssxlib.sdb..................... Icon definition for Synopys
๐ PHYSICAL OUTLINE ๐
sxlib uses the symbolic layout promoted by Alliance so that you get process independence, periodt. all dimensions are in lambda units โจ and the mapping to a specific process CIF or GDS2 layout has to be done by the s2r tool (symbolic to real), which uses a value for the lambda (e.g. 1 lambda=0.3um).
_________________
50 | VDD |
45 |_________________| x : place of virtual connector.
40 | x |
35 | x x | they are named : name_<y>
30 | x x |
25 | x x | for example : i0_20
20 | x | i0_25
15 | x | i0_30
10 |_________________|
5 | VSS |
0 |_________________|
0 5 10 15 20 25 30
every single cell is 50 lambdas high and N times 5 lambdas wide, where N is the number of pitches. that's literally the only physical info given in the cell list below, bestie. ๐
- power supplies live in horizontal
ALU1and are 6 lambdas wide โก - connectors are inside the cells, placed on a 5x5 grid ๐ฏ
- half layout design rules are a warranty for any layer on any face โ except for the power supply and
NWELLโ ๏ธ - cells can be abutted in all directions whenever the supply is well connected, and connectors are always placed on the 5x5 grid ๐
โฑ๏ธ DELAY MODEL โฑ๏ธ
so the cells have been extracted and simulated using a generic 0.35um process to give realistic values for delays and capacitances. we chose to give only the worst delay for each output signal โ which is lowkey not very realistic, since delay depends on each input and one input can easily be up to twice as fast as another ๐ โ but honestly we just wanted to give you an idea of the relative delay.
also, we added 0.6ns to each output delay to take into account the delay due to signal commutation. we assumed the output drives the maximum capacitance. this capacitance was computed like this: we considered that a good slope signal for this process was 0.8ns, then we searched for the capacitance required to get the same input and output slope (0.8ns) for the smaller inverter (inv_x1). that was 125fF. then we simulated the same inverter without output capacitance, and the delay difference was about 0.6ns. this result isn't exactly the same for all cells, but 0.6ns is a good approximation. ๐ซ
so the given delay is a worst case (70degree, 2.7Volt, slow process, worst input). want an idea of the typical delay? divide the worst delay by 1.5. best delay? divide by 2. more detailed data lives in the GENERIC data included in the VHDL files (.vbe), and examples are at the end of this manual. ๐
lastly โ and this is the real tea โ to get a very better idea about the real delay without simulating the spice transistor netlist, you need to use the TAS (1) tool, which is a timing static analyzer able to give the longer and the shorter path for a given process. slay. ๐
๐ฅ OUTPUT DRIVE ๐ฅ
the output drive of a cell tells you how good the cell is at driving a big capacitance. this faculty depends on the rising and falling output resistance โ the smaller the resistance, the bigger the capacitance it can handle. minimum drive is x1, which corresponds to the smallest available inverter (inv_x1). x2 means the cell is equivalent (from the driving point of view) to two smaller inverters in parallel, and so on. ๐
the maximum output drive is x8, and it's limited because of the maximum output slope and the maximum authorized instantaneous current. if it were bigger, the output slope could be very tight and the current too big. ๐
with the 0.35um process, an x1 can drive about 125fF, x2 -> 250fF, x4 -> 500fF, x8 -> 1000fF. this is just an indication, since if a cell is overloaded the only consequence is that the propagation time goes up. on the other hand, it's not great to under-load a cell either, because that leads to signal overshoot ๐ฌ
actually, for big gates such as noa3ao322_x1, x1 means the maximal driving strength reachable with a single logic layer, which can be much less than an inv_x1. that's why the cell list below contains more precise drive strength. as you can see, noa3ao322_x1 has an output drive strength of 0.6, meaning 0.6 times an inverter โ so it can drive about 0.6*125fF=75fF. ๐งฎ
with the 0.35um process, a 1 lambda interconnect wire is about 0.15fF, and an average cell fan-in is 10fF. so if it takes about 50 lambdas to connect 2 cells, an x1 cell is able to drive about 7 cells (125/(10+50*.15)=7). with 100 lambdas, 5 cells. with 750 lambdas, only 2 cells. and note that 50 lambdas means the cells are very close to each other, nearly abutted, while 100 lambdas is an average value. ๐
all of this is just indications. only a timing analysis on the extracted transistor net-list from layout can tell if a cell is well used or not (see tas(1) for info about static timing analysis). no shortcuts, bestie. ๐ฏ
๐ง BEHAVIOR ๐ง
for most cells, you can figure out the behavior just by reading the name. super intuitive for an inverter, a bit more complex for and/or cells. for those, the name gives you the and/or tree structure. and the input order for the VHDL interface component is always the alphabetic order. ๐ค
inv : inversor buffer
buf : buffer
[n]ts : [not] tree-state
[n]xr<i> : [not] xor <i> inputs
[n]mx<i> : [not] multiplexor <i> inputs with coded command
[n][sd]ff<i> : [not] [static|dynamic] flip-flop <i> inputs
[n]oa... : [not] and/or function (see below)
and_or cell (YACC (1) grammar):-
NAME : n OA_CELL -> not OA_CELL
| OA_CELL -> OA_CELL
OA_CELL : OPERATOR INPUTS -> function with INPUTS inputs
| OPERATOR OA_CELLS INPUTS -> function with INPUTS inputs
where some inputs are OA_CELL
OPERATOR : a -> and
| o -> or
| n -> not
OA_CELLS : OA_CELLS OA_CELL -> list of OA_CELL
| OA_CELL -> last OA_CELL of the list
INPUTS : integer -> number of inputs
the input names are implicit and formed that way: i<number>. they're attributed in order, beginning with i0. ๐ข
nx where x is a number means there are x inverters in parallel. for example, an23 is an and with 3 inputs of which two are inverted, that is and( not(i0), not(i1), i2). ๐
examples (and yeah, some of these are not in sxlib):
na2 : not( and(i0,i1))
on12 : or( not(i0), i1)
noa2a22 : not( or( and(i0,i1), and(i2,i3)))
noa23 : not( or( and(i0,i1), i3))
noao22a34 : not( or( and( or(i0,i1), i2), and(i3,i4,i5), i6, i7))
note thatxr2could not be expressed with an and/or formula even ifxr2 = or( and( not(i0), i1), and( not(i1), i0)) = oan12an122โ but the input names are not well distributed. ๐
okay we're not done yet bestie, there's more coming โ don't go anywhere ๐โจ
๐งฎ CELL LIST
Okay bestie, here's the whole menu of cells you get. Every single one. No skipping, no "eh you get the vibe" โ we're doing this properly. ๐
- First column = the pitch width. The pitch value is
5 lambdas, the height is50, so the area works out to<number>*5*50. - Second column = the output drive strength, measured against the
inv_x1output drive strength (scroll back up to OUTPUT DRIVE if you need the lore ๐ซถ). - Third column = the delay in nano-seconds. And remember, this delay is the one for the slower input
+0.6ns(that's the DELAY MODEL tea from earlier). - Last column = the function behavior, with input capacitance attached. Here's the secret decoder ring:
/means not,+means or,.means and,^means xor. Every input is followed by its fan-in capacitance in fF โ so like,i0<11>means thei0pin capacitance is11fF. Periodt.
Real talk moment: for some cells, likefulladder, it just wasn't possible to hook up all the inputs internally. So there are several inputs you have to connect yourself from the outside. In the list below, those inputs get a little star (*) after them in the equation. โญ
So for example, the fulladder equation is sout <= (a* . b* . cin*). That a* is standing in for a0, a1, a2, a3 โ which you have to explicitly connect. Not us. You. ๐
Also, heads up: a few cells have more than one output. When that happens, you'll see several lines in the list, one per output. Easy.
=================================================================
WIDTH NAME DRIVE DELAY BEHAVIOR with cin
-------------------------------------------------------- INVERSOR
๐ซ INVERSOR (inverters, they invert)
inv_x1โ width3, drive1.0, delay0.7,nq <= /i<8>inv_x2โ width3, drive1.6, delay0.7,nq <= /i<12>inv_x4โ width4, drive3.6, delay0.7,nq <= /i<26>inv_x8โ width7, drive8.4, delay0.7,nq <= /i<54>
---------------------------------------------------------- BUFFER
๐ฆ BUFFER
buf_x2โ width4, drive2.1, delay1.0,q <= i<6>buf_x4โ width5, drive4.3, delay1.0,q <= i<9>buf_x8โ width8, drive8.4, delay1.0,q <= i<15>
------------------------------------------------------ THREE STATE
๐ญ THREE STATE
nts_x1โ width6, drive1.2, delay0.8,IF (cmd<14>) nq <= /i<14>nts_x2โ width8, drive2.4, delay0.9,IF (cmd<18>) nq <= /i<28>ts_x4โ width10, drive4.3, delay1.1,IF (cmd<19>) q <= i<8>ts_x8โ width13, drive8.4, delay1.2,IF (cmd<19>) q <= i<8>
-------------------------------------------------------------- AND
โจ AND
na2_x1โ width4, drive1.0, delay0.9,nq <= /(i0<11>.i1<11>)na2_x4โ width7, drive4.3, delay1.2,nq <= /(i0<10>.i1<10>)na3_x1โ width5, drive0.9, delay1.0,nq <= /(i0<11>.i1<11>.i2<11>)na3_x4โ width8, drive4.3, delay1.3,nq <= /(i0<10>.i1<10>.i2<10>)na4_x1โ width6, drive0.7, delay1.0,nq <= /(i0<10>.i1<11>.i2<11>.i3<11>)na4_x4โ width10, drive4.3, delay1.4,nq <= /(i0<10>.i1<11>.i2<11>.i3<11>)a2_x2โ width5, drive2.1, delay1.0,q <= (i0<9>.i1<11>)a2_x4โ width6, drive4.3, delay1.1,q <= (i0<9>.i1<11>)a3_x2โ width6, drive2.1, delay1.1,q <= (i0<10>.i1<10>.i2<10>)a3_x4โ width7, drive4.3, delay1.2,q <= (i0<10>.i1<10>.i2<10>)a4_x2โ width7, drive2.1, delay1.2,q <= (i0<10>.i1<10>.i2<10>.i3<10>)a4_x4โ width8, drive4.3, delay1.3,q <= (i0<10>.i1<10>.i2<10>.i3<10>)an12_x1โ width5, drive1.0, delay1.0,q <= (/i0<12>).i1<9>an12_x4โ width8, drive4.3, delay1.1,q <= (/i0<9>).i1<11>
--------------------------------------------------------------- OR
๐ธ OR
no2_x1โ width4, drive1.0, delay0.9,nq <= /(i0<12>+i1<12>)no2_x4โ width8, drive4.3, delay1.2,nq <= /(i0<12>+i1<11>)no3_x1โ width5, drive0.8, delay1.0,nq <= /(i0<12>+i1<12>+i2<12>)no3_x4โ width8, drive4.3, delay1.3,nq <= /(i0<12>+i1<12>+i2<11>)no4_x1โ width6, drive0.6, delay1.1,nq <= /(i0<12>+i1<12>+i2<12>+i3<12>)no4_x4โ width10, drive4.3, delay1.4,nq <= /(i0<12>+i1<12>+i2<12>+i3<12>)o2_x2โ width5, drive2.1, delay1.0,q <= (i0<10>+i1<10>)o2_x4โ width6, drive4.3, delay1.1,q <= (i0<10>+i1<10>)o3_x2โ width6, drive2.1, delay1.1,q <= (i0<10>+i1<10>+i2<9>)o3_x4โ width10, drive4.3, delay1.2,q <= (i0<10>+i1<10>+i2<9>)o4_x2โ width7, drive2.1, delay1.2,q <= (i0<10>+i1<10>+i2<10>+i3<9>)o4_x4โ width8, drive4.3, delay1.3,q <= (i0<12>+i1<12>+i2<12>+i3<12>)on12_x1โ width5, drive1.0, delay0.9,q <= (/i0<11>)+i1<9>on12_x4โ width8, drive4.3, delay1.1,q <= (/i0<9>)+i1<10>
--------------------------------------------------------- AND/OR 3
๐ง AND/OR 3
nao22_x1โ width6, drive1.2, delay0.9,nq <= /((i0<14>+i1<14>).i2<14>)nao22_x4โ width10, drive4.3, delay1.3,nq <= /((i0<8> +i1<8>) .i2<9>)noa22_x1โ width6, drive1.2, delay0.9,nq <= /((i0<14>.i1<14>)+i2<14>)noa22_x4โ width10, drive4.3, delay1.3,nq <= /((i0<8> .i1<8>) +i2<9>)ao22_x2โ width6, drive2.1, delay1.2,q <= ((i0<8>+i1<8>).i2<9>)ao22_x4โ width8, drive4.3, delay1.3,q <= ((i0<8>+i1<8>).i2<9>)oa22_x2โ width6, drive2.1, delay1.2,q <= ((i0<8>.i1<8>)+i2<9>)oa22_x4โ width8, drive4.3, delay1.3,q <= ((i0<8>.i1<8>)+i2<9>)
--------------------------------------------------------- AND/OR 4
๐ AND/OR 4
nao2o22_x1โ width7, drive1.2, delay1.0,nq <= /((i0<14>+i1<14>).(i2<14>+i3<14>))nao2o22_x4โ width11, drive4.3, delay1.4,nq <= /((i0<8> +i1<8>) .(i2<8> +i3<8>))noa2a22_x1โ width7, drive1.2, delay1.0,nq <= /((i0<14>.i1<14>)+(i2<14>.i3<14>))noa2a22_x4โ width11, drive4.3, delay1.4,nq <= /((i0<8> .i1<8>) +(i2<8> .i3<8>))ao2o22_x2โ width9, drive2.1, delay1.2,q <= ((i0<8>+i1<8>).(i2<8>+i3<8>))ao2o22_x4โ width10, drive4.3, delay1.3,q <= ((i0<8>+i1<8>).(i2<8>+i3<8>))oa2a22_x2โ width9, drive2.1, delay1.2,q <= ((i0<8>.i1<8>)+(i2<8>.i3<8>))oa2a22_x4โ width10, drive4.3, delay1.4,q <= ((i0<8>.i1<8>)+(i2<8>.i3<8>))
--------------------------------------------------------- AND/OR 5
โญ AND/OR 5
noa2ao222_x1โ width7, drive0.7, delay1.1,nq <= /((i0<11>.i1<11>)+((i2<13>+i3<13>).i4<13>))noa2ao222_x4โ width11, drive4.3, delay1.4,nq <= /((i0<11>.i1<11>)+((i2<11>+i3<11>).i4<11>))oa2ao222_x2โ width10, drive2.1, delay1.2,q <= ((i0<8> .i1<8>) +((i2<8> +i3<8>) .i4<8>))oa2ao222_x4โ width11, drive4.3, delay1.3,q <= ((i0<8> .i1<8>) +((i2<8> +i3<8>) .i4<8>))
--------------------------------------------------------- AND/OR 6
๐ AND/OR 6
noa2a2a23_x1โ width10, drive0.8, delay1.2,nq <= /((i0<13>.i1<14>) +(i2<14>.i3<14>) +(i4<14>.i5<14>))noa2a2a23_x4โ width13, drive4.3, delay1.3,nq <= /((i0<13>.i1<14>) +(i2<14>.i3<14>) +(i4<14>.i5<14>))oa2a2a23_x2โ width12, drive2.1, delay1.4,q <= ((i0<13>.i1<14>) +(i2<14>.i3<14>) +(i4<14>.i5<14>))oa2a2a23_x4โ width13, drive4.3, delay1.4,q <= ((i0<13>.i1<14>) +(i2<14>.i3<14>) +(i4<14>.i5<14>))
--------------------------------------------------------- AND/OR 7
๐ AND/OR 7
noa3ao322_x1โ width9, drive0.6, delay1.2,nq <= /((i0<13>.i1<13>.i2<12>) +((i3<13>+i4<13>+i5<13>).i6<13>))noa3ao322_x4โ width11, drive4.3, delay1.4,nq <= /((i0<10>.i1<9>.i2<9>) +((i3<9>+i4<9>+i5<9>).i6<9>))oa3ao322_x2โ width10, drive2.1, delay1.2,q <= /((i0<10>.i1<9>.i2<9>) +((i3<9>+i4<9>+i5<9>).i6<9>))oa3ao322_x4โ width11, drive4.3, delay1.3,q <= /((i0<10>.i1<9>.i2<9>) +((i3<9>+i4<9>+i5<9>).i6<9>))
--------------------------------------------------------- AND/OR 8
๐ AND/OR 8
noa2a2a2a24_x1โ width14, drive0.6, delay1.4,nq <= /((i0<14>.i1<14>)+(i2<13>.i3<13>) +(i4<13>.i5<13>)+(i6<14>.i7<14>))noa2a2a2a24_x4โ width17, drive4.3, delay1.7,nq <= /((i0<14>.i1<14>)+(i2<14>.i3<13>) +(i4<13>.i5<13>)+(i6<14>.i7<14>))oa2a2a2a24_x2โ width15, drive2.1, delay1.5,q <= ((i0<14>.i1<14>)+(i2<14>.i3<13>) +(i4<13>.i5<13>)+(i6<14>.i7<14>))oa2a2a2a24_x4โ width16, drive4.3, delay1.6,q <= ((i0<14>.i1<14>)+(i2<14>.i3<13>) +(i4<13>.i5<13>)+(i6<14>.i7<14>))
------------------------------------------------------ MULTIPLEXER
๐ MULTIPLEXER
nmx2_x1โ width7, drive1.2, delay1.0,nq <= /((i0<14>./cmd<21>)+(i1<14>.cmd))nmx2_x4โ width12, drive4.3, delay1.3,nq <= /((i0<8>./cmd<14>)+(i1<9>.cmd))mx2_x2โ width9, drive2.1, delay1.1,q <= (i0<8>./cmd<17>)+(i1<9>.cmd)mx2_x4โ width10, drive4.3, delay1.3,q <= (i0<8>./cmd<17>)+(i1<9>.cmd)nmx3_x1โ width12, drive0.4, delay1.2,nq <= /((i0<9>./cmd0<15>) +(((i1<8>.cmd1<15>)+(i2<8>./cmd1)).cmd0))nmx3_x4โ width15, drive4.3, delay1.7,nq <= /((i0<9>./cmd0<15>) +(((i1<8>.cmd1<15>)+(i2<8>./cmd1)).cmd0))mx3_x2โ width13, drive2.1, delay1.4,q <= ((i0<9>./cmd0<15>) +(((i1<8>.cmd1<15>)+(i2<8>./cmd1)).cmd0))mx3_x4โ width14, drive4.3, delay1.6,q <= ((i0<9>./cmd0<15>) +(((i1<8>.cmd1<15>)+(i2<8>./cmd1)).cmd0))
-------------------------------------------------------------- XOR
๐ฅ XOR
nxr2_x1โ width9, drive1.2, delay1.1,nq <= /(i0<21>^i1<22>)nxr2_x4โ width11, drive4.3, delay1.2,nq <= /(i0<20>^i1<21>)xr2_x1โ width9, drive1.2, delay1.0,q <= (i0<21>^i1<22>)xr2_x4โ width12, drive4.3, delay1.2,q <= (i0<20>^i1<21>)
-------------------------------------------------------- FLIP-FLOP
๐ FLIP-FLOP
sff1_x4โ width18, drive4.3, delay1.7,IF RISE(ck<8>). Two outputs here, bestie:nq <=/((i0<11>./cmd<13>)+(i1<7>.cmd))andq <= i<8>sff2_x4โ width24, drive4.3, delay1.9,IF RISE(ck<8>),q <= ((i0<8>./cmd<16>)+(i1<7>.cmd))sff3_x4โ width28, drive4.3, delay2.4,IF RISE(ck<8>),q <= (i0<9>./cmd0<15>) +(((i1<8>.cmd1<15>)+(i2<8>./cmd1)).cmd0)
------------------------------------------------------------ ADDER
โ ADDER
halfadder_x2โ width16. Outputsout: drive2.1, delay1.2,sout <= (a<27>^b<22>). Outputcout: drive2.1, delay1.0,cout <= (a.b)halfadder_x4โ width18. Outputsout: drive4.3, delay1.3,sout <= (a<27>^b<22>). Outputcout: drive4.3, delay1.1,cout <= (a.b)fulladder_x2โ width20. Outputsout: drive2.1, delay1.8,sout <= (a*<28>^b*<28>^cin*<19>). Outputcout: drive2.1, delay1.4,cout <= (a*.b*+a*.cin*+b*.cin*)fulladder_x4โ width21. Outputsout: drive4.3, delay2.2,sout <= (a*<28>^b*<28>^cin*<19>). Outputcout: drive4.3, delay1.5,cout <= (a*.b*+a*.cin*+b*.cin*)
---------------------------------------------------------- SPECIAL
๐ซถ SPECIAL
zero_x0โ width3, drive0, delay0,nq <= '0'one_x0โ width3, drive0, delay0,q <= '1'tie_x0โ width2, drive0, delay0,Body tie cellrowend_x0โ width1, drive0, delay0,Empty cell
=================================================================
๐ NEW CELLS
Okay so the genuinely iconic part: you can add new cells to the library yourself. All it takes is dropping the 3 files โ .ap, .al and .vbe โ into the standard cell directory. That's it. That's the whole ritual. โจ
Here's the workflow, step by step:
- The layout view can be created with the symbolic editor
graal. - The physical outline is given above. ๐
- The net-list view can be automatically generated with the
lynxextractor. - The behavioral view has to be written by the designer (that's you ๐
) and checked with the
yaglefunctional abstractor.
Important: the file must contain the generic fields in order to be used by the logic synthesis tools, and the I/O terminals must be in the same order (alphabetic) in the.vbeand.alfiles. Don't skip that, it's giving chaos otherwise. ๐ญ
And if you develop new cells โ please, bestie, share the wealth โ send the corresponding files to alliance-users@asim.lip6.fr ๐ซถ
๐พ VHDL FILES ๐พ
ok so bestie, sometimes you don't wanna read a table, you wanna read the actual VHDL. so here's the commented GENERIC for the na2_x4 cell, fr fr, straight from the source ๐
ENTITY na2_x4 IS
GENERIC (
CONSTANT area : NATURAL := 1750; -- lamba * lambda
CONSTANT transistors : NATURAL := 10; -- number of
CONSTANT cin_i0 : NATURAL := 10; -- femto Farad for i0
CONSTANT cin_i1 : NATURAL := 10; -- femto Farad for i1
CONSTANT tplh_i1_nq : NATURAL := 606; -- propag. time in pico-sec
-- from i1 falling
-- to nq rizing
CONSTANT rup_i1_nq : NATURAL := 890; -- resitance in Ohms when nq
-- rizing due to i1 change
CONSTANT tphl_i1_nq : NATURAL := 349; -- propag time when nq falls
CONSTANT rdown_i1_nq : NATURAL := 800; -- resist when nq falls
CONSTANT tplh_i0_nq : NATURAL := 557; -- idem for i0
CONSTANT rup_i0_nq : NATURAL := 890;
CONSTANT tphl_i0_nq : NATURAL := 408;
CONSTANT rdown_i0_nq : NATURAL := 800
);
PORT (
i0 : in BIT;
i1 : in BIT;
nq : out BIT;
vdd : in BIT;
vss : in BIT
);
like, look at her ๐ all the timing constants just sitting there in pico-seconds and Ohms, the area in lamba * lambda, the transistor count. it's giving fully documented cell. no cap, this is exactly the kind of thing you'd wanna peek at when you're debugging a delay you did not expect ๐ญ
๐ SEE ALSO ๐
go read these too, they're the whole friend group ๐ซถ
MBK_CATA_LIB(1)catal(1)ocp(1)nero(1)cougar(1)boom(1)loon(1)boog(1)genlib(1)ap(5)al(5)vbe(5)
๐ BUG REPORT ๐
ok so real talk for a sec:
this tool is under development at the ASIM department of the LIP6 laboratory.
we need your feedback to improve documentation and tools. ๐
not me asking you to actually send feedback but likeโฆ bestie, please do ๐ the docs and the tools both get better when people speak up, and that's on periodt.
and that's the whole page, you made it to the end ๐ slay โจ this one's from the ASIM/LIP6 girlies, dated October 19, 1999, filed under SXLIB(5) โ mwah, go build something iconic ๐๐ ๐ฆ
๐ฆ where this page comes from
- fedora 43: alliance-libs 5.1.1-35.20160506gitd8c05cd.fc42 ยท GPL-2.0-only
- fedora 43: alliance-libs 5.1.1-35.20160506gitd8c05cd.fc42 ยท GPL-2.0-only
- fedora 44: alliance-libs 5.1.1-35.20160506gitd8c05cd.fc42 ยท GPL-2.0-only
- fedora 44: alliance-libs 5.1.1-35.20160506gitd8c05cd.fc42 ยท GPL-2.0-only
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms