Forum: Platinen PCB Layout automatisch generieren


von Tim  . (cpldcpu)


Lesenswert?

Ich würde für ein Projekt gerne ein PCB-Layout basierend auf 
vorgegebenen Einheitszellen automatisch generieren. z.B. eine Matrix aus 
LEDs samt Ansteuertransistor oder eine digitale Schaltung basierend auf 
einzelnen Gates.

Ich frage mich, wie ich das am besten und flexibelsten mit frei 
verfügbarer Software erreiche.

1) Die Schaltung liegt als Spice-Netliste vor. Basierend darauf könnte 
man natürlich auch andere Formate generieren
2) Der nächste Schritt wäre das Placement. Hierzu müsste man die 
Bauteile basierend auf schon vorhandenen Footprints auf dem PCB 
anordnen. Idealerweise erfolgt das mit einer heuristischen Optimierung, 
um benachbarte Zellen nahe beieinander anzuordnen. Für einen ersten 
Schritt reicht auch eine Matrix.
3) Das Routing könnte man mit vorhandenen Autoroutern machen (z.B. 
Freerouting oder eingebauten Routern)

Welche Open Source Software oder freie Software wäre hierfür gut 
geeignet? Gibt es ein freies PNR-Tools für PCBs? Für ICs gibt es 
Greywolf und OpenROAD, allerdings sind diese weniger für den PCB-Flow 
zugeschnitte. Theoretisch wäre eine Adaption denkbar, allerdings wird 
der Import ins PCB-Tools nicht einfach?

Bliebe die Option, ein einfaches Placement als Script zu implementieren. 
Ich habe mir KiCad, Horizon, EasyEDA und LibrePCB angeschaut. Alle 
bieten eine Art Scriptinterface, allerdings gibt es dafür meist wenig 
Beispiele. Integriertes PNR scheint Target anzubieten, aber nur ein 
einer teuren Bezahlversion.

Habe ich etwas übersehen? Gibt es hierzu noch weitere Ideen?

Ich weiß, dass das kein triviales Problem ist. Meist wird man per Hand 
auch nicht lange brauchen und bessere Ergebnisse erzielen - das ganze 
ist eher als akademische Aufgabe zu sehen :)

: Bearbeitet durch User
von Wühlhase (Gast)


Lesenswert?

Du hast bereits alle Programme aufgezählt, wo ich mal geschaut hätte.

Wenn es eine akademische Aufgabe ist: Altium bietet für akademische 
Projekte eine kostenlose Lizenz für ein halbes Jahr an (kann immer 
wieder verlängert werden).
Vorraussetzung ist eine gültige Hochschul-Emailadresse.

Schau dir den Multichannel-Kram in Altium an...ich denke das ist es was 
du suchst.

von Tim  . (cpldcpu)


Lesenswert?

Wühlhase schrieb:
> Wenn es eine akademische Aufgabe ist: Altium bietet für akademische
> Projekte eine kostenlose Lizenz für ein halbes Jahr an (kann immer
> wieder verlängert werden).

Das war leider eher sprichwörtlich gemeint :)

Danke für Deine Antwort. Es scheint also keine einfache Lösung zu geben.

von Pro (Gast)


Lesenswert?

Ich kenne eine Firma die nix anderes macht als LED Matrix Displays, für 
die musste ich ein Layout machen. Die machen alles von Hand mangels 
guter Tools.

Mit Altium kannst du das schnell erledigen mit Copy-Paste ohne Skript.

von Gustl, der Echte! (Gast)


Lesenswert?

Pro schrieb:
> Die machen alles von Hand mangels
> guter Tools.

Bitte WAS?

In vielen Tools kann man die Positionen schön lesbar als Koordinaten 
angeben. Wenn man ganze Baugruppen hat und die im Raster platzieren 
will, dann gibt es für die Positionen aller Elemente der Baugruppe einen 
X und Y Offset.

von Tim  . (cpldcpu)


Lesenswert?

Habe ein paar Beispiele für das Erzeugen von Layouts per Python in KiCad 
gefunden:

https://forum.kicad.info/t/python-scripting-example-studio-clock/5387/13

SKIDL sieht auch sehr interessant aus:

https://xess.com/skidl/docs/_site/index.html

: Bearbeitet durch User
von Wühlhase (Gast)


Lesenswert?

Gustl, der Echte! schrieb:
> In vielen Tools kann man die Positionen schön lesbar als Koordinaten
> angeben. Wenn man ganze Baugruppen hat und die im Raster platzieren
> will, dann gibt es für die Positionen aller Elemente der Baugruppe einen
> X und Y Offset.

Und was ist daran komfortabel oder schnell? Leute, die sich solcher 
Handarbeit hingeben, sollten entlassen werden.

von Gustl, der Echte! (Gast)


Lesenswert?

Wühlhase schrieb:
> Handarbeit

Natürlich nicht. Zumindest bei Eagle stehen in der .brd die Koordinaten 
direkt drinnen. Ich wette da gibt es schon fertige Sktipte um Bauteile 
automatisch zu platzieren. Und wenn nicht dann ist das auch selber 
schnell geschrieben.

von Chris K. (kathe)


Lesenswert?

Wiebiele LED sind das zum plazieren? Bitte genauere Angaben.
Wieviele Stunden würde es dauern diese manuell zu plazieren im Vergleich 
das Script zum gewünschten Ergebniss zu programmieren ?

Und meistens macht der Autorouter dann auch noch Probleme und im 
Vergleich zu manuellem routing ist der Autorouter auch noch viel 
schlechter.

AI die das Gehirn eines guten Layouters ersetz gibt es afaik noch nicht.
Auch wenn das in so tollen Videos versucht wird zu verkaufen. Denn die 
AI muss auch trainiert werden. Was ist günstiger?  Zig Leute zusätzlich 
beschäftigen um den Versuch zu starten das zu Automatisieren oder 
einfach die Leute zu bezahlen.

Das Gehirn ist noch immer im Kopf der Leute zu finden und nicht im dem 
umgebenden Konstrukt.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Gustl, der Echte! schrieb:
> In vielen Tools kann man die Positionen schön lesbar als Koordinaten
> angeben. Wenn man ganze Baugruppen hat und die im Raster platzieren
> will, dann gibt es für die Positionen aller Elemente der Baugruppe einen
> X und Y Offset.

Bei anderen Programmen (z.B. EAGLE), stellt man sich das Raster ein, so 
wie die Elemente plaziert werden sollen, fügt eine Reihe ein und kopiert 
sie dann noch ein paar mal. Das geht schneller, als irgendwelche Tools 
rauszukramen.

Und in ernsten Fällen, kann man sich in der Tabellenkalkulation seiner 
Wahl ein Script erzeugen lassen, mit dem im ECAD die Module dann 
beliebig angeordnet werden können.

von Christian B. (luckyfu)


Lesenswert?

Chris K. schrieb:
> Das Gehirn ist noch immer im Kopf der Leute zu finden und nicht im dem
> umgebenden Konstrukt.

Solche Aufgaben sind zwar für einen geübten Layouter kein Ding, der wird 
auch sehr oft, wenn nicht immer, schneller sein als der Autorouter, wenn 
man beide gleichzeitig startet (sprich: Den Autorouter erst noch 
konfigurieren muss). Anders sieht es bei Menschen aus, die noch nie ein 
Layout gemacht haben. Da hat der Autorouter, insbesondere bei 
Matrixanordnungen, die Nase ziemlich sicher vorn, das ist quasi die 
Paradedisziplin. Gib ihm mindestens 2 Innenlagen auf denen er sich 
austoben kann, dann klappt das sicher. Problematisch wirds erst, wenn 
man nur 2 Lagen zur Verfügung hat und beide die Außenlagen sind, wo auch 
die Bauteile Platziert werden oder wenn es sehr Eng zugeht.

Altium wäre hier auch mein Favorit: Schaltplan einmal erstellen für ein 
Teilelement und dann beliebig oft widerholen und ebenso verhält es sich 
mit dem Layout: Einmal erstellen, so oft wie es Schaltplanseiten gibt 
wird das Layout quasi identisch "gestempelt". Einzig die Ansteuerung 
muss man dann noch zu den Einzelnen Blöcken ziehen, esseidenn, es gibt 
ein Serielles Bussystem. Dann entfällt das.

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Wühlhase.

Wühlhase schrieb:
> Gustl, der Echte! schrieb:
>> In vielen Tools kann man die Positionen schön lesbar als Koordinaten
>> angeben. Wenn man ganze Baugruppen hat und die im Raster platzieren
>> will, dann gibt es für die Positionen aller Elemente der Baugruppe einen
>> X und Y Offset.
>
> Und was ist daran komfortabel oder schnell? Leute, die sich solcher
> Handarbeit hingeben, sollten entlassen werden.

1) Es ist oft effizienter, das parametrisch durch Eintrageb von 
Zahlenwerten zu erledigen als durch "intuitives" Pixelschupsen mit der 
Maus.

2) Das offene Dateiformat bei KiCad animiert dazu, diese Einträge direkt 
per Skript in der Datei zu editieren. Ist letztlich nur eine Textdatei. 
Selbst copy und past mit einem Dateieditor wäre oft eine bequeme 
Methode, wenn man gut Kopfrechnen kann. :O)

3) Bei Altium wird das so nicht gehen, weil das Dateiformat nicht offen 
ist, aber ich gehe mal davon aus, das Altium genau so eine API als 
Schnittstelle für Skripte oder andere Programme hat wie KiCad oder Eagle 
auch. Per API wäre also die dritte Methode.

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de

von Taz G. (taz1971)


Lesenswert?

Bernd W. schrieb:
> 3) Bei Altium wird das so nicht gehen, weil das Dateiformat nicht offen
> ist, aber ich gehe mal davon aus, das Altium genau so eine API als
> Schnittstelle für Skripte oder andere Programme hat wie KiCad oder Eagle
> auch. Per API wäre also die dritte Methode.

Doch geht in Altium, sogar sehr leicht.
Man kann in der der PCB List die Spalten X,Y und Rotation einfach nach 
Excel vor und zurück kopieren.
Zweitens gib es die Möglichkeit über ein Text File "Place from File".
Einfach ein Pick and Place file erzeugen, die Koordinaten ändern und 
wieder rein laden. Das Dateiformat ist leider beschixxx (Altium Bugs 
hurra) und mit Excel nicht einfach hinzu bekommen. Mit Phython usw. 
easy. Aber das sind technische Feinheiten. Es geht auf jeden Fall.

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Taz G.

Taz G. schrieb:

>> 3) Bei Altium wird das so nicht gehen, weil das Dateiformat nicht offen
>> ist, aber ich gehe mal davon aus, das Altium genau so eine API als
>> Schnittstelle für Skripte oder andere Programme hat wie KiCad oder Eagle
>> auch. Per API wäre also die dritte Methode.
>

> Man kann in der der PCB List die Spalten X,Y und Rotation einfach nach
> Excel vor und zurück kopieren.

Das ist natürlich etwas umständlich, verglichen mit einem offenen 
Dateiformat direkt. Excel Formate sind auch nicht gerade einfach, CSV 
wäre netter.....

> Zweitens gib es die Möglichkeit über ein Text File "Place from File".
> Einfach ein Pick and Place file erzeugen, die Koordinaten ändern und
> wieder rein laden. Das Dateiformat ist leider beschixxx (Altium Bugs
> hurra) und mit Excel nicht einfach hinzu bekommen. Mit Phython usw.
> easy.

Das würde dann einer Skript oder API Methode ähneln, wenn auch etwas 
verschroben. Python würde ich persönlich gegenüber Excel vorziehen.

> Aber das sind technische Feinheiten. Es geht auf jeden Fall.

ok, die nicht offenen Formate sind natürlich bei proprietärer Software 
obligatorisch, aber davon abgesehen gehören solche Möglichkeiten einfach 
zu einem guten Platinenlayoutsystem.

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de

von Taz G. (taz1971)


Lesenswert?

Bernd W. schrieb:
> Das ist natürlich etwas umständlich, verglichen mit einem offenen
> Dateiformat direkt. Excel Formate sind auch nicht gerade einfach, CSV
> wäre netter.....

Nun ja STRG+C und STRG+V empfinde ich nicht als umständlich. Und das 
Datei format für "Place from File" ist offen. Eine einfache Textdatei, 
Werte mit Leerzeichen getrennt. Nur wie gesagt versucht mal mit Excel 
eine vernüpftige Textdatei mit Leerzeichen getrennt hinzu bekommen. CSV 
ohne Probleme (hat Altium in den alten Versionen gefressen) aber *.PRN - 
da waren meine Versuche echt ätzend.

von Nikolaus S. (Firma: Golden Delicious Computers) (hns)


Lesenswert?

> Bliebe die Option, ein einfaches Placement als Script zu implementieren.
> Ich habe mir KiCad, Horizon, EasyEDA und LibrePCB angeschaut. Alle
> bieten eine Art Scriptinterface, allerdings gibt es dafür meist wenig
> Beispiele.

Fehlt EAGLE. Ist zwar wie Altium keine Freie Software, aber das in einer 
Board-Datei verwendete XML-Format ist frei und sogar per DTD 
dokumentiert.
Allerdings auch nicht ganz einfach, weil man die Struktur penibel 
einhalten muss und relativ viele Daten vorab kennen und reinkopieren 
muss (z.B. Packages aus der Library, Layer-Definitionen, Design-Rules).
Aber dann wäre die Plazierung eines Teils einfach:
1
<element name="R4711" library="MyLibrary" package="SMD-0402" value="10k" x="132.2" y="10">
Evtl. kann man in EAGLE ein leeres Board erzeugen und in einem 
Texteditor in einen Vorspann und einen Nachspann aufspalten 
(Boilerplate).
Dazwischen baut das Script die <element>-Definition. Ähnlich macht man 
es mit den Netzen und Wires und fertig ist ein Board-File auf das man 
den Autorouter loslassen kann.
Es gibt aber auch viele Beispiele für die eingebaute Scriptsprachen SCR 
und ULP.

: Bearbeitet durch User
von Wühlhase (Gast)


Lesenswert?

Tim  . schrieb:
> Es scheint also keine einfache Lösung zu geben.

Doch. Und die Lösung(en) wurden ja genannt, daß Altium Textdateien zum 
platzieren frisst wußte ich auch noch nicht.

Es ist halt nur keine kostenlose Lösung. ;)

von Forist (Gast)


Lesenswert?

Christian B. schrieb:
> und dann beliebig oft widerholen

Damit kannst du vielleicht WIEderstände routen.

von Falk B. (falk)


Lesenswert?

Nikolaus S. schrieb:
> Fehlt EAGLE. Ist zwar wie Altium keine Freie Software, aber das in einer
> Board-Datei verwendete XML-Format ist frei und sogar per DTD
> dokumentiert.
> Allerdings auch nicht ganz einfach, weil man die Struktur penibel
> einhalten muss und relativ viele Daten vorab kennen und reinkopieren
> muss (z.B. Packages aus der Library, Layer-Definitionen, Design-Rules).
> Aber dann wäre die Plazierung eines Teils einfach:

So einen Käse veranstaltet man nicht! Praktisch alle CAD-Programme 
bieten ausreichend Scriptfähigkeiten, um derartige Strukturen zu 
erzeugen.
Ich hab hier vor einigen Wochen eine Platine mit 200 identischen Zellen 
entwickelt. Dabei optimiert man zunächst eine Zelle incl. der 
Nachbarschaftsverbindung. Dann kopiert man diese mehrfach über die 
Import-Funktion rein (Eagle 6.5.0). Als Zwischenstufe habe ich 5er und 
10er Blöcke angelegt und dann passend reinkopiert und platziert, ohne 
viel nacharbeiten zu müssen. Ein gescheites Raster hilft hier ungemein. 
Das Ganze kann man je nach Anforderung auch als Script umsetzen. Macht 
etwas mehr Arbeit am Anfang, läuft dann aber auf Knopfdruck, im 
Idealfall sogar parametrisch. Dafür braucht es aber wieder ein ULP.

von Uli S. (uli12us)


Lesenswert?

Grade Altium findet sich seit Jahren auf vielen Piratenseiten. Es sollte 
also kein grosses Problem sein, sich eine Datei zu beschaffen, auch wenn 
man keine Uni-Adresse hat.

von Tim  . (cpldcpu)


Lesenswert?

Ein kleines Update, falls jemand eine ähnliche Problemstellung lösen 
will:

Letztendlich hat es sich als einfachste Lösung erwiesen, eagle brd files 
offline zu bearbeiten und sie danach in das PCB-Tool der Wahl zu 
importieren. Danke für die Tips oben!

Es gibt einige Python-Packages zur Bearbeitung von Eagle-Dateien (z.B. 
Swoop, pyEAGLE, eaglepy). Allerdings scheinen die allesamt nicht mehr 
gepflegt zu werden.

Da Eagle ein XML-basiertes Fileformat nutzt, lässt sich dieses 
allerdings auch vorzüglich mit der lxml lib bearbeiten.

Beispielcode in Python zum Laden eines Eagle-BRD files, Einfügen eines 
Bauteils und Speichern unten.

Einfacher geht es kaum...
1
from lxml import etree as et
2
3
filein = "input file.brd"
4
fileout = "output file.brd"
5
6
dom = et.parse(filein)
7
n_eagle = dom.getroot()
8
n_board = n_eagle.find('drawing').find('board')
9
n_elements = n_board.find('elements')
10
11
et.SubElement(n_elements, 'element', name = "Q2", library="lib", package="SOT23", value="BC847", x=str(0), y=str(0))
12
13
xml_str = et.tostring(dom,  xml_declaration=True,  pretty_print=True)
14
15
f = open(fileout, 'wb')
16
f.write(xml_str)
17
f.close()

: Bearbeitet durch User
von udok (Gast)


Lesenswert?

Danke für die Rückmeldung.

In meinen Augen klingt deine Lösung aber eher kompliziert.
Das können doch alle Programme mit den eingebauten Skriptmöglichkeiten
von Haus aus.  Einfach ein ULP in Eagle schreiben, sind sicher nicht 
mehr
Zeilen.

Ich vermute mal, am schnellsten geht es per Hand.
Ein kleines Layout mit 8 Leds verdrahten, das Grid richtig setzen,
und dann 4x kopieren, dann dieses Layout wieder 4x kopieren, usw.

von Andreas (Gast)


Lesenswert?

CuFlow wäre eine Möglichkeit:
https://github.com/jamesbowman/cuflow

von Tim  . (cpldcpu)


Angehängte Dateien:

Lesenswert?

udok schrieb:
> Einfach ein ULP in Eagle schreiben, sind sicher nicht
> mehr
> Zeilen.

Das ist ja nur ein kleiner Teil meines Codes. Mein Python code macht 
automatisches Placement mit einer Spice netlist als input. Alleine die 
Datenstrukturen dafür will ich nicht in einer ULP verwalten :)

Anbei ein Beispiel. Jetzt muss nur noch der Autorouter mitspielen, eagle 
ist hier sehr schnell an Grenzen gekommen. Integriere gerade Freerouting 
in den Flow.

Andreas schrieb:
> uFlow wäre eine Möglichkeit:
> https://github.com/jamesbowman/cuflow

Danke, der spannend! Sieht aus wie SKIDL für PCBs. Bisher konnte ich 
noch nicht erkennen, wie das Routing übernommen wird?

von udok (Gast)


Lesenswert?

Kannst mal sagen, was das ganze mal werden soll?
Schreibst du ein super Python Layout Tool, oder willst du nur
eine Schaltung einmal erzeugen?  Wenn letzteres, dann machst du das viel 
zu kompliziert, und wenn ersteres, dann hast du die falschen Tools.

Aus meiner Erfahrung heraus kann ich dir sagen, dass die ganzen
skriptbasierten Layout und Spice Tools in der Praxis zu vergessen sind.
Da gibt es immer Spezialfälle, die nicht gehen, und dann musst du
in einer Netzliste mit mit dem Editor herumwerkeln.  Nein Danke.

Der Mensch denkt viel besser visuell, und textbasierte Lösungen sind da 
Krücken.

von Tim  . (cpldcpu)


Angehängte Dateien:

Lesenswert?

udok schrieb:
> Kannst mal sagen, was das ganze mal werden soll?

Das hatte ich im ersten Post schon ungefähr beschrieben. Im Detail 
versuche ich einen automatisierten Workflow zu erstellen, der aus einem 
in VHDL beschriebenen Logikdesign ein PCB erzeugt. Genau so, wie es bei 
ICs gemacht wird. Der Vorteil ist, dass man die PCBs einfacher fertigen 
kann.

Als Beispiel unten ein in VHDL beschriebener Zähler. Mein Workflow 
erzeugt daraus ein PCB (Anhang), welches man direkt bei JLCPB bestellen 
und bestücken lassen kann (Anhang).

Der Flow sieht aktuell so aus:

1) Synthese mit GHDL+Yosys in eine Spice-netlist. Die Zellen sind über 
ein liberty-File beschrieben
2) Ein Python-Programm liest die Netzliste, bricht einige der 
Standardzellen in weitere Primitives herunter (z.B. DFF in NOR2) und 
platziert sie in einem Grid. Das Placement wird anschließend mit einem 
einfachen Simulated Annealing Algorithmus optimiert. Danach wird das 
Grid ein Einzelbauteile zerlegt und in ein eagle-PCB eingefügt.
3) Der Eagle Autorouter (oder freerouting) erzeugt die Verbindungen
4) Order bei JLPCB

Ist zugegebenermaßen nur bedingt Produktrelevant, aber ich habe eine 
Menge über Designflows gelernt, wie sie auch für ASICs verwendet werden. 
Ich muss  die erzeugte Logik noch etwas optimieren, aktuell verbauchen 
die DFF 15 Transistoren. Hatte auch überlegt, den OpenROAD P&R zu 
verwenden, aber für kleine Designs reicht der aktuelle 
Optimierungsalgorithmus aus.

Auch noch wichtig: Extraction aus dem PCB, LVS, Powergrid optimierung, 
bypass caps.
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
5
entity counterx is
6
  port (clk:  in  std_logic;
7
        rst:  in  std_logic;
8
      count: out std_logic_vector(3 downto 0)
9
  );
10
end;
11
12
architecture main of counterx is
13
  signal  cnt:  unsigned(3 downto 0);
14
begin
15
16
   process (clk,rst)
17
  begin
18
    if rising_edge(clk) then
19
      if (rst = '1') then
20
        cnt <= (others => '0');
21
      else
22
        cnt <= cnt + 1;
23
      end if;      
24
    end if;
25
  end process;
26
27
  count <= std_logic_vector(cnt);    
28
end;

: Bearbeitet durch User
von udok (Gast)


Lesenswert?

Kann mich dunkel erinnern, das Synopsis sowas ähnliches konnte.
Die hatten eine 74-TTL Bibliothek, mit der man beliebige
VHDL Logikdesigns in Standardgatter synthetisieren konnte... ist aber 
lange her. Es gibt aber open source Synthese tools, die das vielleicht 
können.

Spendiere wenigstens eine Groundplane und/oder ein paar 
Stützkondensatoren.
Mit dem Kupfer musst du auch nicht so geizen.

Aber wozu macht man sowas? Langeweile? Long Covid Folgen?

Aber selbst wenn man sowas sinnvoll findet,
wozu verwendet man dann einzelne Transistoren,
wenn man zu faul ist, die händisch zu verdrahten?
Dann kannst doch gleich einen FPGA verwenden,
oder übersehe ich da was.

Ich mein, als Hobby für Pensionisten mit übermässig viel Freizeit
kann ich mir ja sowas vorstellen, aber was ist dann der Sinn,
da alles automatisch zu machen.

De fakto bekommst du eine Blackbox per Post,
und hast nicht das Gefühl "Super, das habe ich selber zusammengelötet".

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Ein wesentlicher Unterschied zwischen den Logikelementen in einem FPGA 
und einem diskreten Aufbau besteht darin, dass im FPGA entsprechende 
Taktverteilstrukturen vorhanden sind, die sicherstellen, dass die 
Register gleichzeitig getaktet werden. Die ganze Logik ist mit ihren 
Setup-Zeiten genau darauf optimiert.

Bei diskreter Logik muss man jedoch die teils recht langen Setup-Zeiten 
an Flip-Flops bzw. Registern einhalten. Bei 5 ns Setup benötigt man 
dafür schon einige Dezimeter an Leiterbahn. Wesentlich sinnvoller für 
den diskreten Aufbau ist daher ein mehrphasiger Takt, so dass 
aufeinanderfolgende Stufen immer phasenversetzt angesteuert werden und 
somit die Setup- und Hold-Zeiten eingehalten werden. Bei einem FPGA 
würde dieser zusätzliche Aufwand innerhalb einer Taktdomäne jedoch nur 
unnötig Ressourcen fressen.

Gibt es denn Synthesewerkzeuge für diskrete oder integrierte Logik, 
denen man beibringen kann, dass unbedingt mit mehrphasigem Takt 
gearbeitet werden muss? Natürlich kann man das manuell in der 
Hardwarebeschreibung genau so formulieren, was ich auch schon getan 
habe, aber kann man automatisiert prüfen lassen, ob die Mehrphasigkeit 
strikt eingehalten wurde?

von Tim  . (cpldcpu)


Lesenswert?

udok schrieb:
> Kann mich dunkel erinnern, das Synopsis sowas ähnliches konnte.
> ... Es gibt aber open source Synthese tools, die das vielleicht
> können.

Yosys kann so etwas mit dem richtigen Library file. Der Output ist 
allerdings nur eine Netzliste. P&R muss man selber machen.

udok schrieb:
> Spendiere wenigstens eine Groundplane und/oder ein paar
> Stützkondensatoren.
> Mit dem Kupfer musst du auch nicht so geizen.

Später :)


udok schrieb:
> Aber selbst wenn man sowas sinnvoll findet,
> oder übersehe ich da was.

Vielleicht interessiert es mich mehr, an dem Flow zu arbeiten, als 
Schaltungen zu löten?

: Bearbeitet durch User
von Tim  . (cpldcpu)


Lesenswert?

Andreas S. schrieb:
> Bei diskreter Logik muss man jedoch die teils recht langen Setup-Zeiten
> an Flip-Flops bzw. Registern einhalten. Bei 5 ns Setup benötigt man
> dafür schon einige Dezimeter an Leiterbahn. Wesentlich sinnvoller für
> den diskreten Aufbau ist daher ein mehrphasiger Takt, so dass
> aufeinanderfolgende Stufen immer phasenversetzt angesteuert werden und
> somit die Setup- und Hold-Zeiten eingehalten werden. Bei einem FPGA
> würde dieser zusätzliche Aufwand innerhalb einer Taktdomäne jedoch nur
> unnötig Ressourcen fressen.
>
> Gibt es denn Synthesewerkzeuge für diskrete oder integrierte Logik,
> denen man beibringen kann, dass unbedingt mit mehrphasigem Takt
> gearbeitet werden muss?

Ja, bei diskreter Logik arbeitet man üblicherweise mit mehrphasiger 
Logik und Latches. Die Pipelinestufen halbiert man auf die Halbzyklen.

Für Synthesewerkzeuge und HDL ist so etwas allerdings nur schwer 
umsetzbar. Verilog kann zwar Latches beschreiben, aber Yosys hat bisher 
keine Möglichkeit, diese zu extrahieren. Es gibt einige Workarounds, 
welche aber allesamt nicht sehr schön sind.

Ich habe mich daher entschieden nur DFF einzusetzen. Der Nachteil ist 
ein relativ hoher Aufwand in Transistoren: 15 Transistoren pro DFF für 
ein "sauberes" Design, 7 in einem pseudoanalogen Design. Die DFF nutzen 
interne clockbuffer, was Probleme mit glitches und setup-time violations 
etwas reduziert.

Ein super-high-speed Design bekommt man damit natürlich trotzem nicht.

von Tim  . (cpldcpu)


Lesenswert?

Btw, hier ist der aktuelle Stand des Projektes:

Beitrag "PCBFlow - Automatisches Generieren von PCB Layouts aus VHDL code (Work in Progress)"
https://github.com/cpldcpu/PCBFlow

Diskussionen zu Sinn und Unsinn sind, glaube ich, nicht sehr 
zielführend.

Der Ansatz ziehlt ausschließlich auf diskrete Digitaldesigns ab, die 
seit den 70/80er Jahren außerhalb des Hobbybereichs eher selten auf PCBs 
umgesetzt werden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.