È possibile tracciare circuiti attraverso il codice?


17

Esiste un modo migliore non scrivere i file della netlist. qualcosa di simile a:

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

MODIFICARE:

Trovo le risposte abbastanza utili. Sarà fantastico se c'è un modo per simulare il circuito prodotto dal codice.


5
FWIW, il tuo codice di esempio mi sembra una netlist. Definisce solo un paio di parti (presumibilmente una libreria che dice allo strumento quanti terminali hanno ciascuno) e quindi indica quali terminali sono collegati tra loro. Se lo hai usato un po ', potresti persino trovare più facile essere in grado di nominare i nodi e collegare i terminali ai nodi piuttosto che ad altri terminali.
The Photon,

3
Esiste un ampio divario tra "è possibile" e "è utile", per molte materie.
whatsisname

3
Penso che potresti guardare HDL. Mentre descrivono principalmente circuiti digitali, non sono tecnicamente limitati a tali (penso che Verilog abbia un supporto per loro). Come notato da @ThePhoton, ciò che hai mostrato sembra una netlist, che è ciò che solitamente compilano.
Maciej Piechotka,

2
Il motivo per cui ci vuole tempo per pensare al modo migliore per disegnarlo è che devi avere una buona comprensione del circuito e come renderlo chiaro alle persone che guardano il disegno. Niente di tutto ciò è roba di cui i computer sono bravi, quindi chiedere a un computer di farlo per te è chiedere problemi.
The Photon,

1
Se stai pensando che userai solo questa descrizione come input per lo strumento di layout del pcb, quindi non deve essere utilizzato da un lettore umano, quindi cosa userai come documentazione per qualcuno (tu) dopo aver risolto il circuito viene costruito o modificando il design in un secondo momento. Se usi una voce schematica, stai essenzialmente scrivendo la documentazione e la stai usando come input per lo strumento di layout. Ora sai che il tuo layout corrisponderà effettivamente alla documentazione.
Il fotone

Risposte:


28

Se hai familiarità con , puoi usarecircuitikzper disegnare bei circuiti scrivendo codice.LATEX

enter image description here

Esempio .
Altri esempi


4
Per aggiungere a questo - come altri hanno detto che disegnare un buon schema richiede un po 'di intuizione umana. Tuttavia, se stai disegnando molti circuiti simili, l'utilizzo di laTeX e circuitikz ti consentirà di costruire un layout modello e personalizzarlo con specifici. È un approccio che uso nella produzione di materiali per il corso.
Giovanni,

2
Lo spazio mancante tra il numero e l'unità sembra terribile.
Loong

@Loong Puoi sempre mettere spazio tra numeri e unità se vuoi. \ o \,può aggiungere spazio in ambiente matematico in lattice
nidhin

1
@Loong Questo è apparentemente un problema di localizzazione. Come americano, sembra sempre strano avere uno spazio extra casuale tra numeri e unità.
Chrylis sciopero -

1
@chrylis Non è un problema di localizzazione, è specificato ISO 80000 e deve essere utilizzato esclusivamente.
Awjlogan

15

Dai un'occhiata a SKiDL ( https://github.com/xesscorp/skidl ), questo è seguendo le linee che stai pensando.

Modifica (come richiesto): SKiDL consente la descrizione procedurale di tutti i circuiti (piuttosto che solo digitale), invece di inserire graficamente lo schema. L'output della netlist può quindi essere importato nel software di layout. Eseguirà anche controlli ERC ed è estensibile. Ciò significa, ad esempio, che è possibile scrivere un filtro una volta e riutilizzarlo in progetti diversi anziché disegnare ogni volta. Scritto in Python, con tutto il supporto che ne deriva.


Aggiunte altre informazioni.
awjlogan,

Altre opzioni di disegno schematico di Python sono SchemDraw e lcapy .
phoenix,

13

Molti programmi possono disegnare uno schema. Nessuno di quelli che conosco può tracciare un buon schema: uno che enfatizzi le informazioni più importanti e disponga il circuito in modo chiaro e di facile comprensione.

Se stai solo cercando un linguaggio di descrizione hardware (nessun output schematico grafico), VHDL e Verilog sono ampiamente utilizzati per definire circuiti (digitali) da implementare nei circuiti integrati e possono anche essere utilizzati per la progettazione a livello di scheda.


Verilog-A può essere utilizzato anche per descrivere e modellare / simulare circuiti analogici, anche se non sono a conoscenza di simulatori non commerciali.
Shamtam,

Ho progettato alcune schede in cui era più semplice descrivere programmaticamente le interconnessioni che con uno schema; Ho usato un programma per generare una netlist e poi l'ho caricato nel software PCB. Se un editor schematico potesse importare una netlist e mostrare un ratsnest per connessioni che non avevano ancora tracciato fili "reali" o etichette di rete esplicite disegnate, ciò potrebbe essere utile in questi casi, almeno per le parti dello schema in cui sono stati realizzati i fili reali più senso dei "fili dell'aria".
supercat

@Shamtam, ho usato Veriolog A, ma solo come linguaggio di simulazione. Esistono sistemi in grado di sintetizzare un circuito da una descrizione di Verilog A?
The Photon,

@ThePhoton Non che ne sia consapevole. Suppongo che il mio uso del termine "descrivere" potrebbe essere fuorviante in tal senso.
Shamtam,

@Shamtam, non mi preoccuperei della parola. Dopotutto è un linguaggio di descrizione hardware . Descrive semplicemente la funzione piuttosto che l'implementazione.
The Photon,

9

Il tuo esempio assomiglia molto alla modelica , un linguaggio orientato agli oggetti per la simulazione basato sulla creazione di blocchi e sulla connessione di porte tra i blocchi.

Un esempio usando la libreria dei componenti elettrici (da 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;

Sebbene sia possibile generare uno schema dal modello, normalmente ciò avviene in una GUI che annota i componenti con informazioni sulla posizione e sull'orientamento.



3

PSTricks è un'altra libreria per utenti TeX. Può anche fare complicati calcoli matematici come equazioni differenziali.

\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}

inserisci qui la descrizione dell'immagine


2

Sì. Puoi usare le HDL per descrivere il tuo circuito attraverso il codice. Puoi usare Verilator, Xilinx o qualsiasi altro software oppure puoi usare https://www.edaplayground.com/ (che funziona online senza dover installare nulla sul tuo PC ).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.