Organisation des cellules standard (notes d'un Ă©tranger)


Après être tombé sur l'article " Détruire le monopole ... ", l'auteur, en tant que personne, bien que très loin de l' EDA , mais naturellement curieux, n'était pas trop paresseux pour suivre les liens et s'est involontairement surpris en pensant que l'une des principales solutions techniques était l'utilisation de rangées de cellules standard ( cellule standard mise en page) - semble assez controversé.

Oui, cet arrangement est intuitif, car nous écrivons et lisons de manière similaire, en plus, il est technologiquement simple d'organiser les cellules en rangées, il est si pratique de connecter les bus VDD et GND. D'autre part, un problème combinatoire complexe se pose, il est nécessaire de couper le circuit en pièces linéaires et de disposer ces pièces de manière à (grossièrement) minimiser la longueur totale des joints.

Et bien sûr, la question s'est posée de savoir s'il existe des solutions alternatives ... et si ...


Figure 1 lignes typiques de cellules standard ( d'ici )

Et si


Du point de vue de la réduction de la longueur totale des liaisons, il serait utile de disposer des cellules standard le long de certaines courbes ex de balayage : Peano ou Hilbert.

Ces courbes sont constituées d'une masse de divers «coins et recoins», il y a certainement une configuration dans laquelle les cellules standard connectées sont en moyenne proches les unes des autres.
Ou il peut servir d'itération nulle pour une optimisation supplémentaire.


Figure 2 Courbe de Hilbert, champs 8X8 et 64X64

  1. Les courbes de balayage sont auto-similaires, ce qui s'intègre bien dans le concept global.
  2. Ils ont une localité élevée, c'est-à-dire les points situés quelque part à proximité sur la courbe sont très probablement à proximité et dans l'espace.
  3. Contiennent un réseau de canaux organisé hiérarchiquement.
  4. Pour le circuit logique, vous pouvez choisir un carré ou un rectangle 1x2,2x1 approprié dans lequel il est placé en excès et le "déplacer" le long de la courbe de balayage (voir figure 3) pour sélectionner la géométrie optimale, car il ne s'agit que d'un degré de liberté avec une fonction de coût plutôt bon marché. .
  5. La commodité de la connexion des pneus (VDD / GND) restera.
  6. ...


Figure 3 Trois morceaux d'une courbe de Hilbert avec différents décalages.

Donc:

  • nous expĂ©rimenterons la courbe de Hilbert
  • nous allons expĂ©rimenter dans un carrĂ© 64X64 (figure 3)
  • dans l'Ă©tape Ă©lĂ©mentaire de la courbe, il peut y avoir plusieurs cellules et espaces standard - combien et dans quel ordre est le paramètre de l'expĂ©rience
  • toutes les Ă©tapes Ă©lĂ©mentaires sont disposĂ©es de manière identique
  • les Ă©tapes Ă©lĂ©mentaires vont avec un chevauchement, c'est-Ă -dire si l'Ă©tape commence par une cellule standard, il doit y avoir un espace Ă  la fin de celle-ci, et vice versa
  • tous les espaces et cellules standard sont de la mĂŞme taille - 1X1
  • toutes les cellules sont sĂ©rialisĂ©es dans un certain ordre, cet ordre est Ă©galement un paramètre
  • un autre paramètre est le dĂ©calage depuis le dĂ©but de la courbe (points (0,0)), Ă  partir duquel nous organiserons les cellules standard dans un certain ordre
  • les longueurs de liaison entre les cellules standard sont calculĂ©es selon L1 (distance de Manhattan)
  • la somme des longueurs de toutes les obligations est la valeur souhaitĂ©e, après avoir dĂ©terminĂ© le montant minimum, nous trouverons l'emplacement optimal

Et en tant que lapin expérimental, prenons un additionneur 8 bits. C'est assez simple, mais pas anodin. Il y a beaucoup d'éléments et de connexions pour ressentir les avantages et les inconvénients potentiels. En même temps, il n'y en a pas assez pour pouvoir expérimenter «sur le genou».

Totalisateur



4 est un diagramme schématique d'un additionneur complet à un seul bit


La figure 5 voit donc cet utilitaire graphique Neato de graphwiz


6 additionneur signé 8 bits, pris ici

Mais nous ne travaillerons qu'avec des entiers, sans le drapeau d'erreur W.


Fig. 7 Ainsi, l'additionneur 8 bits voit l'utilité de point de graphwiz.

Cela ressemble Ă  une danse de petits cygnes.


La figure 8 est le même graphique après optimisation en utilisant neato.

DOT Count
digraph sum8 {
a_0;
a_1;
a_2;
a_3;
a_4;
a_5;
a_6;
a_7;

b_0;
b_1;
b_2;
b_3;
b_4;
b_5;
b_6;
b_7;

s_0;
s_1;
s_2;
s_3;
s_4;
s_5;
s_6;
s_7;

p0;
p1;

and1_0;
et1_1;
and1_2;
et1_3;
and1_4;
and1_5;
and1_6;
and1_7;

et2_0;
and2_1;
and2_2;
et2_3;
and2_4;
and2_5;
et2_6;
and2_7;

and3_0;
and3_1;
and3_2;
and3_3;
and3_4;
and3_5;
and3_6;
and3_7;

and4_0;
and4_1;
and4_2;
and4_3;
and4_4;
and4_5;
and4_6;
and4_7;

or1_0;
or1_1;
or1_2;
or1_3;
or1_4;
or1_5;
or1_6;
or1_7;

or2_0;
or2_1;
or2_2;
or2_3;
or2_4;
or2_5;
or2_6;
or2_7;

or3_0;
or3_1;
or3_2;
or3_3;
or3_4;
or3_5;
or3_6;
or3_7;

or4_0;
or4_1;
or4_2;
or4_3;
or4_4;
or4_5;
or4_6;
or4_7;

not1_0;
not1_1;
not1_2;
not1_3;
not1_4;
not1_5;
not1_6;
not1_7;

a_0 -> et1_0;
a_1 -> et1_1;
a_2 -> et1_2;
a_3 -> et1_3;
a_4 -> et1_4;
a_5 -> et1_5;
a_6 -> et1_6;
a_7 -> et1_7;

b_0 -> et1_0;
b_1 -> et1_1;
b_2 -> et1_2;
b_3 -> et1_3;
b_4 -> et1_4;
b_5 -> et1_5;
b_6 -> et1_6;
b_7 -> et1_7;

a_0 -> or1_0;
a_1 -> or1_1;
a_2 -> or1_2;
a_3 -> or1_3;
a_4 -> ou1_4;
a_5 -> ou1_5;
a_6 -> ou1_6;
a_7 -> or1_7;

b_0 -> or1_0;
b_1 -> or1_1;
b_2 -> or1_2;
b_3 -> or1_3;
b_4 -> ou1_4;
b_5 -> ou1_5;
b_6 -> ou1_6;
b_7 -> or1_7;

et1_0 -> or3_0;
et1_1 -> or3_1;
et1_2 -> or3_2;
et1_3 -> or3_3;
et1_4 -> ou3_4;
et1_5 -> ou3_5;
et1_6 -> ou3_6;
et1_7 -> ou3_7;

et1_0 -> et3_0;
et1_1 -> et3_1;
et1_2 -> et3_2;
et1_3 -> et3_3;
et1_4 -> et3_4;
et1_5 -> et3_5;
et1_6 -> et3_6;
et1_7 -> et3_7;

or1_0 -> and2_0;
ou1_1 -> et2_1;
or1_2 -> and2_2;
or1_3 -> and2_3;
or1_4 -> and2_4;
ou1_5 -> et2_5;
ou1_6 -> et2_6;
or1_7 -> and2_7;

or1_0 -> or2_0;
ou1_1 -> or2_1;
or1_2 -> or2_2;
or1_3 -> or2_3;
or1_4 -> or2_4;
or1_5 -> or2_5;
or1_6 -> or2_6;
or1_7 -> or2_7;

et2_0 -> or3_0;
and2_1 -> or3_1;
and2_2 -> or3_2;
et2_3 -> or3_3;
et2_4 -> ou3_4;
et2_5 -> ou3_5;
et2_6 -> ou3_6;
et2_7 -> or3_7;

or2_0 -> and4_0;
or2_1 -> and4_1;
or2_2 -> and4_2;
or2_3 -> and4_3;
or2_4 -> and4_4;
or2_5 -> and4_5;
or2_6 -> and4_6;
or2_7 -> and4_7;

et3_0 -> or4_0;
and3_1 -> or4_1;
and3_2 -> or4_2;
and3_3 -> or4_3;
et3_4 -> or4_4;
et3_5 -> or4_5;
et3_6 -> or4_6;
and3_7 -> or4_7;

or3_0 -> not1_0;
or3_1 -> not1_1;
or3_2 -> not1_2;
or3_3 -> not1_3;
or3_4 -> not1_4;
or3_5 -> not1_5;
or3_6 -> not1_6;
or3_7 -> not1_7;

not1_0 -> and4_0;
not1_1 -> and4_1;
not1_2 -> and4_2;
not1_3 -> and4_3;
not1_4 -> and4_4;
not1_5 -> and4_5;
not1_6 -> and4_6;
not1_7 -> and4_7;

and4_0 -> or4_0;
and4_1 -> or4_1;
and4_2 -> or4_2;
and4_3 -> or4_3;
and4_4 -> or4_4;
and4_5 -> or4_5;
and4_6 -> or4_6;
and4_7 -> or4_7;

or4_0 -> s_0;
or4_1 -> s_1;
or4_2 -> s_2;
or4_3 -> s_3;
or4_4 -> s_4;
or4_5 -> s_5;
or4_6 -> s_6;
or4_7 -> s_7;

p0 -> et2_0;
p0 -> or2_0;
p0 -> et3_0;

or3_0 -> and2_1;
or3_0 -> or2_1;
or3_0 -> and3_1;

or3_1 -> and2_2;
or3_1 -> or2_2;
or3_1 -> and3_2;

or3_2 -> and2_3;
or3_2 -> or2_3;
or3_2 -> and3_3;

or3_3 -> and2_4;
or3_3 -> or2_4;
or3_3 -> and3_4;

or3_4 -> and2_5;
or3_4 -> or2_5;
or3_4 -> and3_5;

or3_5 -> and2_6;
or3_5 -> or2_6;
or3_5 -> and3_6;

or3_6 -> and2_7;
or3_6 -> or2_7;
or3_6 -> and3_7;

or3_7 -> p1;
}


Expérience 1


  • pas Ă©lĂ©mentaire de la courbe de Hilbert - (passe, cellule, cellule, passe)
  • sommets du graphique (cellules unitaires) triĂ©s par ordre alphabĂ©tique


Fig.9 sur X - décalage depuis le début, sur Y - la longueur de tous les chemins

La distance minimale (la première) à un décalage de 207 (La longueur totale de toutes les liaisons est 1968), voyons à quoi ressemble cet arrangement optimal.


La figure 10 est le graphique optimal pour le shift 207, il n'a pas l'air très joli.

Expérience 2


  • pas Ă©lĂ©mentaire de la courbe de Hilbert - (passe, cellule, cellule, passe)
  • sommets du graphique (cellules unitaires) dans l'ordre naturel (comme indiquĂ© dans la description du graphique, voir la description du graphique ci-dessus) -


11 sur X - le décalage depuis le début, sur Y - la longueur de tous les chemins


Fig.12 graphique optimal pour cisaillement 11 longueur 750

Expérience 3


  • pas Ă©lĂ©mentaire de la courbe de Hilbert - (passe, cellule, cellule, passe)
  • l'ordre des sommets est dĂ©terminĂ© en parcourant la largeur du graphe, des sommets sans liens au dĂ©but de la liste, le week-end Ă  la fin


Fig.13 sur X - décalage depuis le début, sur Y - la longueur de tous les chemins


Fig.14 Disposition optimale - décalage 3, longueur totale 1451
Mettez tous les sommets d'entrée au début et la sortie à la fin n'était pas très bonne
une idée.

Expérience 4


  • le pas Ă©lĂ©mentaire de la courbe de Hilbert - (passe, cellule, cellule) Sic!
  • l'ordre des sommets est naturel, comme dans l'expĂ©rience 2


Fig.15 sur X - décalage depuis le début, sur Y - la longueur de tous les chemins


Fig.16 Disposition optimale - décalage 10, longueur totale 503

Expérience 5


Nous devons faire quelque chose avec IO, nous les définissons en post-traitement, c'est-à-dire pour chaque quart de travail
construire un arrangement sans sommets IO, puis construire un cadre d'étendue absorbante autour du graphique, appliquer des sommets IO au point inoccupé le plus proche du cadre et calculer la longueur finale

  • pas Ă©lĂ©mentaire de la courbe de Hilbert - (saut, cellule, cellule)
  • l'ordre des sommets est dĂ©terminĂ© par la visualisation en largeur, mais sans sommets IO


Fig.17 sur X est le décalage depuis le début, sur Y est la longueur de tous les chemins


Fig.18 L'emplacement optimal est le quart de travail 607, la longueur totale de 484, la moyenne de 3.33793

Il a l'air bien, mais que se passe-t-il si nous optimisons non pas la longueur totale des chemins, mais sa somme avec l'aire du rectangle occupé. Leurs dimensions sont différentes, nous supposerons donc que nous calculons non pas la longueur du chemin, mais la zone sous les chemins.

Expérience 6


Les paramètres sont les mêmes que dans l'expérience 5, nous optimisons la zone.


Fig.19 sur X - décalage depuis le début, sur Y - la longueur de tous les chemins


Fig.20 Disposition optimale - décalage 966, longueur totale 639, moyenne 3,30345

Le rectangle s'est avéré assez allongé. Mais que se passe-t-il si nous considérons non pas l'aire du rectangle, mais le carré de l'hypoténuse, nous poussant vers des formes plus carrées?

Expérience 7


Les paramètres sont les mêmes que dans l'expérience 5, nous optimisons le carré de l'hypoténuse.


Fig.21 sur X est le décalage depuis le début, sur Y est la longueur de tous les chemins


Fig.22 Disposition optimale - décalage 70, longueur totale 702, moyenne 3,46207

Expérience 8


  • pas Ă©lĂ©mentaire de la courbe de Hilbert - (cellule, sauter) Sic!
  • l'ordre des sommets est dĂ©terminĂ© par la visualisation en largeur, mais sans sommets IO

Nous supposons que le coût de la marche en Y est deux fois plus élevé qu'en X, c'est plus proche de la réalité.

Fig.23 sur X est le décalage depuis le début, sur Y est la longueur de tous les chemins


Fig.24 Disposition optimale - décalage 344, longueur totale 650, moyenne 3,8

Conclusions


«Choix des rédacteurs» préliminaire - Expérience 6.

Ce serait bien d'organiser les sommets d'E / S, mais cela nécessite une indication latérale,
où exactement (direction) cette classe de sommets doit être située.

Mais je voudrais d'abord entendre l'avis d'experts.

PS : merci à YuriPanchul et andy_p pour l'absence de réaction négative réflexe.

UPD (11/02/2019): ajout de «l'expérience 8», où les cellules standard sont situées aux nœuds de la courbe de Hilbert, c'est-à-dire strictement sur un réseau carré. De plus, d'une part, ils sont combinés en rangées traditionnelles et, d'autre part, ils sont situés le long de la courbe de Hilbert.

Source: https://habr.com/ru/post/fr474032/


All Articles