• Multiplexeur générique génératif

    alcim.dev06/21/2023 at 09:58 3 comments

    Pour suivre et compléter le MUX2 standard,

    Voici une étude de topologie de multiplexeur optimisé, et capable d'être générer récursivement.

    Ceci en optimisant le nombre de transistor utilisé !

    Mais en gardant le même défaut sur la profondeur Tmax...

    Cependant ces multiplexeur peuvent être pipeliné (découpé par étape chacune mise en buffer).

    1. Décodage Haut.
    2. Traitement des inputs.
    3. Décodage Bas.

    Le décodage s'effectue donc en 2 partie, et il encercle les inputs !

    A comparaison :

    1. Un décodeur sur 2 niveau standard utilise, 2+4 transistor.
      1. Soit 2x plus de transistor par niveau, (puis on additionne les niveaux).
    2. Ici, un décodeur a 2 niveau aura :
      1. 1 niveau en dessous des inputs (2 transistor).
      2. 1 niveau au dessus   des inputs (2 transistor).

    L'on constate donc sur un mux 4 une économie de 2 transistor (le tier).

    MUX2

    MUX4

    MUX16

    https://www.falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxAUgpABZsKBTAWjDACgAzcMFcY3sDRp9eCAdCQxIKNgHdwQkGjwLhKFMMhzVSjUvy7N25Yf0qTW+SfVqMvG1GN3TmewctLnD7NkKmPPn7evmaO8oQ0VA4RUe7aCBhBejH+8YmmCUFx8gg8GekOHrn2esWhHkLmpXmF2pWh9bVcKHjmzoGeouKSsDJcNMRBzo3OYuASUL3aHcFBCH4VNFXCjfOOXNhjHZFUHWNgE1Iy8jtKrbRwINhoYRdR543nFZebvITnr7eD9ypgcOZPbR-Lx6YH2NYeb6mKEoCGcbg3VzILyjbqTaTw4g1Zww1HjHoY+Rg0LE2pEyAg4SsEJk7g00FgGnZOlJKloKJ6Dw8S4ObmxFRc9mmHgRVJEohqUES8raGF6GHMvCDaGEDlGeRK1kgTUyjXXUw62l4fUOY1uAXaRLLbUmzmW96hK2pLh-NYdP4GPZoo5A-5nX5+65ULmBsbvFSfLQAcxA4auYY+DuD0xCYHS7tVtyRaaGAkUHhMOZJLVugip6TLCNuKSLNczHjru1T9bSfiLmR0RQrimz+fieXbA5LRSH5gMPAtJyW4HS9VYvEWvwHinnX0zRahYBb4tFRZFVO34GlW6om8PZ6ojdLQr3N774sulZ1lY8z8Uz-Sr+VlY7L6BjLbCsAKPScWRAm0BGHbQzXAmCi1ffUJwoUdbidIs0LyENnD3CkBEw31sLyDCF3tJdeDnfCchLJg8CoMQVBYfCAEkKGo2jY2cGjg0mJAEHiajp3okAuNuJYqCYQSBNA1UGMk2TpIMJh9Rk4TpwbSIrjeDS1O0FTlI0-UG09N53FuDtlOMszZxUcySK4eZxK3WNFKc-ZDimE5lX1MTNLMvJvK8kiTnY7z2OTKcI3IkK7NofUWD8Hz4tY-F0WOZCovS3zF...

    Ce que l'on remarque :

    • La partie Pmos est la même que la partie Nmos
      • L'on inverse simplement les inputs (!S0 -> S0).
    • Il y a 2 partie au design.
      • Une partie décodage.
      • Une partie avec les inputs.
    • Les inputs sont au centre du design.
    • Le décodeur encercle les inputs, (moitié dessus, moitié dessous)
      • Cette manière de faire vise simplement a minimiser le nombre de transistor par entrée de contrôle (sachant que celui-ci double par étage de décodage).
    • Les inputs sont réparti par block.  
      • Plus il y a d'étage de décodage en dessous, plus il y a de block.
      • Plus il y a d'étage de décodage au dessus, plus il y a d'élément par block
    • Plus il y a d'entrée plus il y a d'étage.
      • Ce rapport est exactement de "N/2 + 1" (le +1 est l'étage des inputs).

    Concernant les connections entre les inputs et les entrées de control, l'on peux voir qu'il y a une connexion "en 2D".

    • Cela viens du fait que la partie du décodeur du bas adresse les blocks, (X).
    • Et que la partie du décodeur du haut adresse les éléments dans ces blocks, (Y).

    Cela est mieux visible sur les multiplexeur plus gros.

    Il existe cependant un défaut majeur... (mux4 et plus !)

    Les diodes anti-retour sont obligatoire !

    Sans quoi le courant sortant du drain du Pmos actif,

    entrerais dans un autre depuis le "drain",

    atterrissant dans la "source" d'un autre et ressortant par le "drain" de ce dernier provoquant un court-circuit !

  • XOR

    Yann Guidon / YGDES06/18/2023 at 23:26 4 comments

    La porte OU Exclusif est une sacrée histoire, comme on peut le voir sur ce petit bestiaire de topologies de XOR. Les configurations possibles sont multiples, selon les contraintes de fan-in et de fan-out. Des configurations à faible nombre de transistors existent mais reposent sur des transistors dont on peut contrôler les ratios donc les résistances, et jouent sur les rapports de transconductance, donc la consommation statique n'est pas insignifiante. On trouve aussi plein de versions sur https://www.vlsitechnology.org/html/cells/vsclib013/xor2.html.

    Pour le cas ci-dessous, tous les transistors sont considérés comme ayant le même ratio, ce qui permet à la cellule d'être portable sur un maximum de technologies et PDK.

    Pour un fan-in de 1 et fanout acceptable, on s'en sort avec 10 transistors:

    Les inverseurs d'entrée et de sortie ne sont pas optionnels, à moins que la cellule soit connectée directement à une cellule voisine dotée d'un inverseur de sortie. On pourrait faire une version XNOR avec un faible fanout en enlevant l'inverseur de sortie.

  • Une autre porte utile pour l'addition

    Yann Guidon / YGDES06/18/2023 at 19:27 0 comments

    La porte XOR est essentielle à l'addition mais une autre se retrouve beaucoup dans un "carry lookahead adder" lorsqu'il n'est pas possible de fabriquer une carry chain optimisée. C'est une macro-cellule appelée CLA3 dans les projets #YGREC8 et #LibreGates.

    Ce circuit a été optimisé pour travailler avec des portes logiques à 3 entrées et les signaux Propagate et Generate sont décrits autre séparément, intégrés dans l'unité logique/ROP2.

    Il y a déjà 6 unités CLA3 dans un additionneur 8 bits donc c'est un bon candidat pour une optimisation. Nous pouvons partir du circuit présenté dans le log Expansion des portes logique en cmos en modifiant le circuit aoai_3_2_1.

    Cela donne le circuit suivant :

    À partir de là il suffit de mettre une entrée en commun, ce qui se simplifie avec une petite modification de la topologie des transistors.

    Cela donne ce circuit un peu plus petit :

    Cette version contient 12 transistors, dont 2 pour l'inverseur en sortie, ce qui lui permet d'attaquer un fanout de 2 ou 3 sans difficulté. Cependant dans deux cas sur le schéma du début, la sortie attaque une seule entrée donc une autre version sans inverseur est possible (ce qui donne CLA3I). En aval, il faut alors faire du "bubble push".

  • MUX2

    Yann Guidon / YGDES06/18/2023 at 03:19 0 comments

    Après discussions, le MUX2 est ainsi:

    La porte logique équivalente est assez évidente, la seule question concerne les inverseurs. J'en ai mis 2 en entrée pour 2 raisons :

    * réduire le fan-in, puisque ce genre de signal vient souvent d'un nœud distribué sur beaucoup d'autres portes,

    * redresser le front du signal entrant et réduire le temps de transition, pour réduire la consommation dûe aux transconductions transitoires.

    En fait on voit ici un MUX2I et pas un MUX2, car l'inverseur en sortie est optionnel, selon l'usage : si la sortie va directement sur une autre cellule voisine, ce n'est pas requis, mais dès qu'il y a un peu de distance, cela devient nécessaire. Donc 2 versions sont possibles.

    Si les inverseurs en entrée ne sont pas nécessaires (pour réduire la taille, ou parce que des signaux complémentaires sont déjà disponibles autre part) alors on peut réutiliser la porte logique de base AndAndOr.

  • Complexité maximale

    Yann Guidon / YGDES06/13/2023 at 16:20 4 comments

    Le log Expansion des portes logique en cmos a dégagé plusieurs règles de construction, qui s'ajoutent à la métrique FO4.

    Cependant dans une implémentation physique il existe un paramètre supplémentaire : la profondeur maximale des transistors, ou le nombre de transistors qu'on peut mettre en série.

    C'est une conséquence du fait que chaque transistor a une résistance à l'état passant. Cette résistance affecte la performance et mène a des compromis entre :

    1. surface
    2. vitesse
    3. consommation

    En suivant la règle t=RC, augmenter la résistance diminue la fréquence de fonctionnement. il devient donc nécessaire de définir le nombre maximal de transistors, "Tmax", admis en série.

    Pour cela nous allons utiliser une matrice de cmos, car ce qui se trouve en série en haut, se trouve en parallèle en bas !

    Ainsi une complexité Tmax = 1, est un inverseur (1x1).

    Pour Tmax=2, cela donne une porte à 4 entrées (2x2)

    Matrice que l'on peux ensuite élaguer pour donner une NAND ou une NOR simple.

    Tmax=3 donne un bon compromis en terme de complexité et de complexité de routage, si on limite le nombre d'entrées, car ce dernier peut monter à 3×3=9.

    Ces configurations "maximales" ont deux avantages :

    • D'abord, chaque entrée séparée a un fan-in de 1 donc pas besoin d'ajouter un inverseur pour booster en enrée de la porte. (Par contre si un signal va sur plusieurs entrées, il faut soit ajouter un inverseur en entrée, soit en tenir compte en amont)
    • Ensuite, la matrice des "configurations maximales" peut être réduite à volonté. On peut ainsi construire n'importe quels autre configuration plus petite en élaguant des entrées. Et donc, on choisit si chaque noeud est un AND ou un OR en prenant l'équation booléenne a l'envers, puis on élimine le superflu.

    L'utilisation de profondeurs plus grandes a un avantage si cela permet de réduire la profondeur logique du circuit (le nombre de nœuds d'inversion traversés pas une entrée vers la sortie).

    Par exemple,

    Un OR4 prendra moins de place et peut-être un peu moins de temps que deux 0R2 en série. Mais les fronts seront plus lents !

    C'est en effet un compromis à trouver et à tester, en fonction des caractéristiques de la technologie.

    Mais surtout, il faut aussi limiter le nombre d'entrée car sinon, la cellule correspondante devient trop grande et difficile à router.

    Conduisant au débordement probable sur un autre niveau de métal.

    Une limitation à 4 entrées est un bon début mais ce n'est pas une limite absolue puisque nous voyons plus haut que pour atteindre un compromis de Tmax=3, on peut monter à 9 entrées et de nombreuses portes à 5 ou 6 entrées peuvent être très utiles.

    Le layout de la cellule correspondante peut devenir difficile.

    Les PDK "minimalistes" (type OSU) permettent de synthétiser la plupart des circuits courants mais il est plus efficace de synthétiser les portes à la demande, en fonction du circuit.

    C'est plus lourd mais la performance demande toujours plus d'efforts !

  • Equivalence logique algebrique et topologie cmos

    alcim.dev06/12/2023 at 15:14 2 comments

    La logique des équivalence repose sur une triple inversion.

    1. Inversion de l'operateur.
    2. inversion des opérandes.
    3. inversion du résultats.

    Ce qui nous donne une table d'équivalence.

    A & B !(_A | _B )
    _A & B!(A | _B)
    !(_A | B)A & _B
    A ^ B_A ^ _B
    A | B!(_A & _B)
    !(A | B)_A & _B
    !(A ^ B) = A ^ _B = !(_A ^ _B)
    _A | B!(A & _B)
    !(_A & B)A | _B
    !(A & B)_A | _B

    A l'aide de cette table, ou de ces règles,

    L'on peux inverser des suites de portes logiques, afin qu'elles correspondent.

    Cela sans avoir la même structure, ou architecture interne.

    S1R1

    oai_latch VS nor_latch

  • Expansion des portes logique en cmos

    alcim.dev06/12/2023 at 09:37 4 comments

    nand2 -> nand3! (A & B)! (A & B & C)

    Depuis nand2 on ajoute :

    • Haut
      • 1 pmos en parallèle(OR)
    • Bas
      • 1 nmos en série(AND)
    nand3 -> aoi_2_1X = (A & B)
    !(X | C)

    Depuis nand2 on ajoute :

    • Haut
      • 1 pmos en série(AND).
    • Bas
      • 1 nmos en parallèle(OR).
    nand3 -> aoi_2_1 -> aoi_2_2X = (A & B)
    Y = (C & D)
    ! (X | Y)

    Depuis nand2 on ajoute :

    • Haut
      • 2 pmos parallèle(OR) en série(AND).
    • Bas
      • 2 nmos série(AND) en parallèle(OR).
    aoai_3_2_1X = (A & B & C)
    Y =  (D & E)
    Z = ( X | Y)
    ! ( Z & F)

    Ce circuit contient :

    • Haut
      • 3 pmos parallèle(OR).
      • 2 pmos parallèle(OR) en série(AND) du OR.
      • 1  pmos en parallèle(OR) des 3 gates du dessus.
    • Bas
      • 3 nmos série(AND).
      • 2 nmos série(AND) en parallèle(OR) du AND.
      • 1  nmos en série(AND) des 3 gates du dessous.


    mixed_NAND

    Ce circuit contient :

    • Haut
      • 2 pmos parallèle(OR)
      • 2 pmos série(AND) en parallèle (OR) du OR
    • Bas
      • 2 nmos série(AND)
      • 2 nmos parallèle(OR) en série(AND) du AND
    mixed_NOR

    Et on inverse mixed_NAND !

    Ce circuit contient :

    • Haut
      • 2 nmos parallèle(OR) 
      • 2 nmos série(AND) en série(AND) du OR
    • Bas
      • 2 pmos série(AND)
      • 2 pmos parallèle(OR) en parallèle (OR) du AND

    Constat :

    1. Ajouter un cmos en séries reviens a ajouter une gate AND.
    2. Ajouter un cmos parallèles reviens a ajouter une gate OR.
    3. Ajouter 2 cmos (AND / OR) en série(AND) ou en parallèle(OR), reviens a ajouter 2 gates.
    4. Toute jonction entre nmos et pmos donne lieu a une inversion du résultat.
    5. Le dernier niveau est l'inverter (il met automatiquement fin au circuit).
      1. Inclure une NAND ou une NOR dans un niveau implique un inverseur (fin du circuit).
      2. L'on peux utiliser ces inverseurs afin de concevoir une combinaison de gates qui mélange les and et les OR dans le même niveaux !
      3. Cependant cela reviens a utiliser 3 porte logique, et n'est donc d'aucun intérêt.