เป็นไปได้หรือไม่ที่จะวาดวงจรผ่านโค้ด?


17

มีวิธีที่ดีกว่าไม่ได้โดยการเขียนไฟล์ netlist สิ่งที่ต้องการ:

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

แก้ไข:

ฉันพบคำตอบที่เป็นประโยชน์มาก มันจะดีถ้ามีวิธีจำลองวงจรที่ผลิตโดยรหัส


5
FWIW โค้ดตัวอย่างของคุณดูเหมือน netlist สำหรับฉัน เพียงแค่กำหนดสองส่วน (โดยมีห้องสมุดที่บอกเครื่องมือจำนวนเทอร์มินัลแต่ละอันมี) แล้วบอกว่าเทอร์มินัลใดเชื่อมต่อกัน หากคุณใช้บิตคุณอาจพบว่าสามารถตั้งชื่อโหนดและเชื่อมต่อเทอร์มินัลกับโหนดแทนการใช้เทอร์มินัลอื่น ๆ ได้ง่ายขึ้น
โฟตอน

3
มีช่องว่างที่กว้างระหว่าง "เป็นไปได้" และ "มีประโยชน์" สำหรับหลาย ๆ วิชา
whatsisname

3
ฉันคิดว่าคุณอาจจะดู HDL ในขณะที่พวกเขาส่วนใหญ่อธิบายวงจรดิจิตอลพวกเขาไม่ จำกัด ทางเทคนิคเช่นนี้ (ฉันคิดว่า Verilog มีการสนับสนุนสำหรับพวกเขา) ตามที่ระบุไว้โดย @ThePhoton สิ่งที่คุณแสดงให้ดูเหมือนว่าเป็น netlist ซึ่งเป็นสิ่งที่พวกเขามักจะคอมไพล์
Maciej Piechotka

2
เหตุผลที่ต้องใช้เวลาในการคิดเกี่ยวกับวิธีการวาดที่ดีที่สุดก็คือคุณต้องมีความเข้าใจวงจรและวิธีการทำให้ฟังก์ชั่นการใช้งานชัดเจนสำหรับคนที่มองภาพวาด ไม่มีสิ่งใดที่คอมพิวเตอร์ทำได้ดีดังนั้นขอให้คอมพิวเตอร์ทำเพื่อคุณกำลังขอปัญหา
โฟตอน

1
หากคุณคิดว่าคุณเพียงแค่ใช้คำอธิบายนี้เป็นข้อมูลป้อนเข้าในเครื่องมือเค้าโครง pcb ดังนั้นจึงไม่จำเป็นต้องใช้โดยผู้อ่านที่เป็นมนุษย์ดังนั้นคุณจะใช้อะไรเป็นเอกสารประกอบการแก้ไขปัญหาวงจรหลังจากนั้น มันสร้างขึ้นหรือปรับเปลี่ยนการออกแบบในภายหลัง หากคุณใช้รายการแผนผังคุณจะต้องเขียนเอกสารเป็นหลักและใช้สิ่งนั้นเป็นอินพุตไปยังเครื่องมือโครงร่าง ตอนนี้คุณก็รู้แล้วว่าเลย์เอาต์ของคุณจะตรงกับเอกสารจริง
The Photon

คำตอบ:


28

หากคุณคุ้นเคยกับ , คุณสามารถใช้circuitikzเพื่อวาดวงจรที่ดีโดยการเขียนรหัสLATEX

ป้อนคำอธิบายรูปภาพที่นี่

ตัวอย่าง
ตัวอย่างเพิ่มเติม


4
เพื่อเพิ่มสิ่งนี้ - อย่างที่คนอื่น ๆ พูดไว้ว่าการวาดแผนผังที่ดีนั้นต้องใช้สัญชาตญาณของมนุษย์ อย่างไรก็ตามหากคุณกำลังวาดวงจรที่คล้ายกันจำนวนมากจากนั้นการใช้ laTeX และ circuitikz จะช่วยให้คุณสามารถสร้างเค้าโครงแม่แบบและปรับแต่งมันด้วยเฉพาะมันเป็นวิธีที่ฉันใช้ในการผลิตวัสดุหลักสูตร
จอห์น

2
ช่องว่างระหว่างตัวเลขกับตัวเครื่องดูแย่มาก
Loong

@Long คุณสามารถเว้นช่องว่างระหว่างตัวเลขและหน่วยต่าง ๆ ได้ถ้าต้องการ \ หรือ\,สามารถเพิ่มพื้นที่ว่างในสภาพแวดล้อมทางคณิตศาสตร์น้ำยาง
nidhin

1
@Long นั่นเห็นได้ชัดว่าเป็นปัญหาการแปล ในฐานะที่เป็นคนอเมริกันดูเหมือนว่าแปลก ๆ เสมอที่จะมีช่องว่างแบบสุ่มระหว่างตัวเลขและหน่วย
chrylis -on strike-

1
@chrylis นั่นไม่ใช่ปัญหาการแปลเป็น ISO 80000 ที่ระบุและควรใช้โดยเฉพาะ
awjlogan

15

ลองใช้ SKiDL ( https://github.com/xesscorp/skidl ) นี่คือสิ่งที่คุณคิด

แก้ไข (ตามที่ขอ): SKiDL อนุญาตให้อธิบายขั้นตอนของวงจรทั้งหมด (แทนที่จะเป็นแค่ระบบดิจิตอล) แทนที่จะเข้าสู่วงจรของคุณในรูปกราฟิก เอาต์พุต netlist สามารถนำเข้าสู่ซอฟต์แวร์เลย์เอาต์ มันจะทำการตรวจสอบ ERC และสามารถขยายได้ ซึ่งหมายความว่าเช่นคุณสามารถเขียนตัวกรองหนึ่งครั้งจากนั้นนำมาใช้ใหม่ในโครงการต่าง ๆ แทนที่จะวาดในแต่ละครั้ง เขียนใน Python ด้วยการสนับสนุนทั้งหมดที่มาพร้อมกับที่


เพิ่มข้อมูลอีกเล็กน้อย
awjlogan

ตัวเลือกการวาดแผนผังงูใหญ่อื่น ๆ ที่มีSchemDrawและlcapy
ต้นอินทผลัม

13

หลายโปรแกรมสามารถวาดแผนผังได้ ไม่มีที่ฉันรู้ว่าสามารถวาดแผนผังที่ดี: หนึ่งที่เน้นข้อมูลที่สำคัญที่สุดและจัดวงจรในทางที่ชัดเจนและง่ายต่อการเข้าใจ

หากคุณกำลังมองหาภาษาคำอธิบายฮาร์ดแวร์ (ไม่มีเอาต์พุตกราฟิกแผนผัง), VHDL และ Verilog ถูกนำมาใช้กันอย่างแพร่หลายในการกำหนดวงจร (ดิจิตอล) เพื่อนำไปใช้ในไอซีและยังสามารถใช้สำหรับการออกแบบระดับคณะกรรมการ


Verilog-A สามารถใช้เพื่ออธิบายและจำลอง / จำลองวงจรอะนาล็อกได้เช่นกัน แต่ฉันไม่ได้ตระหนักถึงเครื่องจำลองที่ไม่ใช่เชิงพาณิชย์
Shamtam

ฉันได้ออกแบบบอร์ดบางอันซึ่งง่ายต่อการอธิบายการเชื่อมต่อระหว่างกันโดยทางโปรแกรมมากกว่ากับแผนผัง ฉันใช้โปรแกรมสร้างเน็ตลิสต์แล้วโหลดลงในซอฟต์แวร์ PCB หากตัวแก้ไขแผนผังสามารถนำเข้า netlist และแสดง ratsnest สำหรับการเชื่อมต่อที่ยังไม่ได้มีการวางสาย "ของจริง" หรือป้ายกำกับสุทธิชัดเจนซึ่งอาจเป็นประโยชน์ในกรณีเช่นนี้อย่างน้อยก็ในส่วนของแผนผังที่ทำสายจริง รู้สึกมากกว่า "สายอากาศ"
supercat

@hamtam ฉันใช้ Veriolog A แต่เป็นภาษาจำลองเท่านั้น มีระบบที่สามารถสังเคราะห์วงจรจากคำอธิบาย Verilog A ได้หรือไม่?
The Photon

@ThePhoton ไม่ว่าฉันจะรู้ ฉันคิดว่าการใช้คำว่า "อธิบาย" อาจทำให้เข้าใจผิดในแง่นั้น
Shamtam

@ ธรรมแทมฉันไม่กังวลหรอก มันเป็นภาษาคำอธิบายฮาร์ดแวร์หลังจากทั้งหมด มันอธิบายฟังก์ชั่นแทนการใช้งาน
โฟตอน

9

ตัวอย่างของคุณดูเหมือนmodelicaภาษาเชิงวัตถุสำหรับการจำลองตามการสร้างบล็อกและการเชื่อมต่อพอร์ตระหว่างบล็อก

ตัวอย่างการใช้ไลบรารี่ของอุปกรณ์ไฟฟ้า (จาก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;

แม้ว่าคุณจะสามารถสร้างแผนผังจากโมเดลได้ แต่โดยปกติจะทำใน GUI ที่ใส่คำอธิบายประกอบส่วนประกอบด้วยข้อมูลตำแหน่งและทิศทาง


4

Cirkuitเป็นเครื่องมือในการแปลงคำอธิบายข้อความอย่างง่ายเป็นแผนภาพวงจร มีชุด M4 แมโครสำหรับสัญลักษณ์ไฟฟ้า

มันสามารถใช้ร่วมกับcircuitikzซึ่งได้รับการแนะนำโดยnidhin circuitikz ใช้ระบบกราฟิกpgf / TikZ ที่ทันสมัยกว่า ชุมชน stackexchange มีผู้ใช้งานมาก cirkuitikzแต่มีการแก้ปัญหาอื่น ๆ ในเท็กซ์

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

ภาพจากhttps://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/examples.html


3

PSTricksเป็นอีกหนึ่งห้องสมุดสำหรับผู้ใช้ TeX มันสามารถทำการคำนวณทางคณิตศาสตร์ที่ซับซ้อนเช่นสมการเชิงอนุพันธ์

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

enter image description here


2

ใช่คุณสามารถใช้ HDL เพื่ออธิบายวงจรของคุณผ่านโค้ดคุณสามารถใช้ verilator, Xilinx หรือซอฟต์แวร์อื่น ๆ หรือคุณสามารถใช้https://www.edaplayground.com/ (ซึ่งทำงานออนไลน์โดยไม่ต้องติดตั้งอะไรบนพีซีของคุณ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.