Est-il possible de dessiner des circuits par code?

17

Existe-t-il un meilleur moyen de ne pas écrire de fichiers netlist. quelque chose comme:

Define Battery1 As a Battery
Define Resistor1 As a Resistor

Connect Battery1 First Terminal to Resistor1 Second Terminal
Connect Resistor1 First Terminal to Battery1 Second Terminal

ÉDITER:

Je trouve les réponses assez utiles. Ce sera formidable s'il existe un moyen de simuler le circuit produit par le code.

user37421
la source
5
FWIW, votre exemple de code ressemble à une netlist pour moi. Il définit simplement quelques parties (avec vraisemblablement une bibliothèque indiquant à l'outil combien de terminaux chacun possède), puis indique quels terminaux sont connectés les uns aux autres. Si vous l'avez utilisé un peu, vous pourriez même trouver qu'il est plus facile de nommer des nœuds et de connecter des terminaux à des nœuds plutôt qu'à d'autres terminaux.
The Photon
3
Il existe un large fossé entre «est-ce possible» et «est-il utile», pour de nombreux sujets.
whatsisname
3
Je pense que vous envisagez peut-être le HDL. Bien qu'ils décrivent principalement des circuits numériques, ils ne sont pas techniquement limités à ceux-ci (je pense que Verilog les prend en charge). Comme l'a noté @ThePhoton, ce que vous avez montré ressemble à une netlist, ce à quoi ils compilent généralement.
Maciej Piechotka
2
La raison pour laquelle il faut du temps pour réfléchir à la meilleure façon de le dessiner est que vous devez avoir une bonne compréhension du circuit et comment rendre sa fonction claire pour les personnes qui regardent le dessin. Rien de tout cela n'est un truc pour lequel les ordinateurs sont bons, donc demander à un ordinateur de le faire pour vous, c'est poser des problèmes.
The Photon
1
Si vous pensez que vous allez simplement utiliser cette description comme entrée de l'outil de mise en page de la carte PCB, de sorte qu'elle ne doive pas être utilisée par un lecteur humain, alors qu'utiliserez-vous comme documentation pour quelqu'un (vous) dépannant le circuit après il est construit ou en modifiant la conception ultérieurement. Si vous utilisez une entrée schématique, vous écrivez essentiellement la documentation et l'utilisez comme entrée pour l'outil de mise en page. Vous savez maintenant que votre mise en page correspondra réellement à la documentation.
The Photon

Réponses:

28

Si vous connaissez , vous pouvez utilisercircuitikzpour dessiner de jolis circuits en écrivant du code.LATEX

entrez la description de l'image ici

Exemple .
Plus d'exemples

nidhin
la source
4
Pour ajouter à cela - comme d'autres l'ont dit, dessiner un bon schéma nécessite une certaine intuition humaine. Cependant, si vous dessinez beaucoup de circuits similaires, l'utilisation de laTeX et de circuitikz vous permettra de construire une disposition de modèle et de la personnaliser avec des spécificités. C'est une approche que j'utilise pour produire des supports de cours.
John
2
L'espace manquant entre le numéro et l'unité semble terrible.
Loong
@Loong Vous pouvez toujours mettre de l'espace entre les nombres et les unités si vous le souhaitez. \ ou \,peut ajouter de l'espace dans un environnement mathématique en latex
nidhin
1
@Loong C'est apparemment un problème de localisation. En tant qu'Américain, il semble toujours bizarre d'avoir un espace supplémentaire aléatoire entre les nombres et les unités.
chrylis -on strike-
1
@chrylis Ce n'est pas un problème de localisation, il est spécifié ISO 80000 et doit être utilisé exclusivement.
awjlogan
15

Consultez SKiDL ( https://github.com/xesscorp/skidl ), c'est dans le sens que vous pensez.

Modifier (comme requis): SKiDL permet une description procédurale de tous les circuits (plutôt que simplement numériques), au lieu de saisir graphiquement votre schéma. La sortie de la netlist peut ensuite être importée dans un logiciel de mise en page. Il effectuera également des vérifications ERC et est extensible. Cela signifie, par exemple, que vous pouvez écrire un filtre une fois, puis le réutiliser dans différents projets plutôt que de le dessiner à chaque fois. Écrit en Python, avec tout le support qui l'accompagne.

awjlogan
la source
Ajout d'un peu plus d'informations.
awjlogan
Les autres options de dessin schématique Python sont SchemDraw et lcapy .
phoenix
13

De nombreux programmes peuvent dessiner un schéma. Aucun que je sache ne peut dessiner un bon schéma: celui qui met l'accent sur les informations les plus importantes et organise le circuit de manière claire et facile à comprendre.

Si vous recherchez simplement un langage de description matérielle (pas de sortie schématique graphique), VHDL et Verilog sont largement utilisés pour définir les circuits (numériques) à implémenter dans les circuits intégrés, et peuvent également être utilisés pour la conception au niveau de la carte.

Le photon
la source
Verilog-A peut également être utilisé pour décrire et modéliser / simuler des circuits analogiques, bien que je ne connaisse aucun simulateur non commercial.
Shamtam
J'ai conçu certaines cartes où il était plus facile de décrire les interconnexions par programme qu'avec un schéma; J'ai utilisé un programme pour générer une netlist, puis je l'ai chargé dans le logiciel PCB. Si un éditeur de schéma pouvait importer une liste de réseaux et afficher une liste de rats pour les connexions qui n'avaient pas encore de "vrais" fils ou des étiquettes de réseau explicites dessinées, cela pourrait être utile dans de tels cas, au moins pour les parties du schéma où de vrais fils étaient faits. plus de sens que les "fils d'air".
supercat
@Shamtam, j'ai utilisé Veriolog A, mais uniquement comme langage de simulation. Existe-t-il des systèmes capables de synthétiser un circuit à partir d'une description Verilog A?
Le Photon
@ThePhoton Pas que je sache. Je suppose que mon utilisation du terme «décrire» pourrait être trompeuse dans ce sens.
Shamtam
@Shamtam, je ne m'inquiéterais pas du mot. C'est un langage de description du matériel après tout. Il décrit simplement la fonction plutôt que l'implémentation.
Le Photon
9

Votre exemple ressemble beaucoup à modelica , un langage orienté objet pour la simulation basée sur la création de blocs et la connexion de ports entre les blocs.

Un exemple utilisant la bibliothèque de composants électriques (de maplesoft.com ),

encapsulated model ChuaCircuit "Chua's circuit, ns, V, A"
  import Modelica.Electrical.Analog.Basic;
  import Modelica.Electrical.Analog.Examples.Utilities;
  import Modelica.Icons;
  extends Icons.Example;

  Basic.Inductor L(L=18);
  Basic.Resistor Ro(R=12.5e-3);
  Basic.Conductor G(G=0.565);
  Basic.Capacitor C1(C=10, v(start=4));
  Basic.Capacitor C2(C=100);
  Utilities.NonlinearResistor Nr(
    Ga(min=-1) = -0.757576,
    Gb(min=-1) = -0.409091,
    Ve=1);
  Basic.Ground Gnd;
equation 
  connect(L.p, G.p);
  connect(G.n, Nr.p);
  connect(Nr.n, Gnd.p);
  connect(C1.p, G.n);
  connect(L.n, Ro.p);
  connect(G.p, C2.p);
  connect(C1.n, Gnd.p);
  connect(C2.n, Gnd.p);
  connect(Ro.n, Gnd.p);
end ChuaCircuit;

Bien que vous puissiez générer un schéma à partir du modèle, cela se fait normalement dans une interface graphique qui annote les composants avec des informations de position et d'orientation.

Pete Kirkham
la source
4

Cirkuit est un éditeur pour convertir une simple description textuelle en schéma de circuit. Il fournit un ensemble de macros M4 pour les symboles électriques.

Il peut être utilisé avec circuitikz qui a été suggéré par nidhin . circuitikz utilise le système graphique pgf / TikZ plus moderne . La communauté stackexchange a des utilisateurs très actifs de cirkuitikz , mais il existe plus de solutions dans TeX .

Source: https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/quick.png

Photo de https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/examples.html .

Jonas Stein
la source
3

PSTricks est une autre bibliothèque pour les utilisateurs de TeX. Il peut même effectuer des calculs mathématiques complexes tels que des équations différentielles.

\documentclass[pstricks,border=12pt,12pt]{standalone}
\usepackage{pst-eucl,pst-circ}
\psset
{
    dipolestyle=zigzag,
    labelangle=0,
    labeloffset=-.9,
    intensitylabeloffset=-.4,
    tensionstyle=pm,
    tensionoffset=.9,
    tensionlabeloffset=.9,
    %tensioncolor=red,
    %tensionlabelcolor=blue,
}
\begin{document}
\begin{pspicture}[showgrid=none](12,-12)
	\pstGeonode[PosAngle={135,90,45,0,-45,-90,-135,180,45}]
		(2,-2){A}
		(6,-2){B}
		(10,-2){C}
		(10,-6){D}
		(10,-10){E}
		(6,-10){F}
		(2,-10){G}
		(2,-6){H}
		(6,-6){I}
	%
	\resistor[intensitylabel=$i_1$,tensionlabel=$V_{HA}$](H)(A){$R_1$}
	\resistor[tensionlabel=$V_{AB}$](A)(B){$R_2$}
	\vdc[tensionlabel=$V_{BC}$](B)(C){$E_1$}
	\resistor[tensionlabel=$V_{CB}$](C)(D){$R_3$}
	%
	\resistor[intensitylabel=$i_2$,tensionlabel=$V_{HI}$](H)(I){$R_4$}
	\vdc[tensionlabel=$V_{ID}$](I)(D){$E_2$}
	%
	\resistor[intensitylabel=$i_3$,tensionlabel=$V_{HG}$](H)(G){$R_5$}
	\newSwitch[ison=true,tensionlabel=$V_{GF}$](G)(F){$S_2$}
	\wire(F)(E)
	\resistor[tensionlabel=$V_{DE}$,dipoleconvention=generator](E)(D){$R_6$}
	%
	\vdc[tensionlabel=$V_{FI}$,dipoleconvention=generator](I)(F){$E_3$}
	\newSwitch[intensitylabel=$i_4$,tensionlabel=$V_{BI}$,ison=false](B)(I){$S_1$}	
\end{pspicture}
\end{document}

entrez la description de l'image ici

Programmeur orienté argent
la source
2

Oui, vous pouvez utiliser des HDL pour décrire votre circuit à travers du code, vous pouvez utiliser Verilator, Xilinx ou tout autre logiciel ou vous pouvez utiliser le https://www.edaplayground.com/ (qui fonctionne en ligne sans avoir à installer quoi que ce soit sur votre PC ).

Shunya
la source