Thursday, 27 October 2016

simulation - How to make LTSpice sub-circuits available globally?


LTSpice Hierachy block can not be found if it is not in current working directory.


I am using this tutorial to create sub-circuits in LTSpice:


http://www.audio-perfection.com/spice-ltspice/hierarchical-blocks-in-ltspice.html


Everything is fine except that the sub-circuit that I make can not be used globally. Every time that I have a new design I must copy my sub-circuits to the directory that my top-level design resides.


I even moved my sub-circuit (both .asc and .asy files) into a folder under E:\Program Files (x86)\LTC\LTspiceIV\lib\sym but LTSpice can not find it. I suspect there must be a directive such that includes a folder into the global search path (or top-level search path) but I can't locate the option.


I appreciate if you tell me how to make LTSpice sub-circuits available globally?




Update:


This is my inverter_035_1.asc:



Version 4
SHEET 1 880 680
WIRE 208 -96 208 -160
WIRE 272 -96 208 -96
WIRE 208 -80 208 -96
WIRE 160 -32 80 -32
WIRE 272 -32 272 -96
WIRE 272 -32 208 -32
WIRE 80 32 80 -32
WIRE 80 32 -16 32

WIRE 208 32 208 16
WIRE 448 32 208 32
WIRE 208 48 208 32
WIRE 80 96 80 32
WIRE 160 96 80 96
WIRE 400 96 208 96
WIRE 208 176 208 144
WIRE 400 176 400 96
WIRE 400 176 208 176
WIRE 208 240 208 176

FLAG 448 32 out
IOPIN 448 32 Out
FLAG 208 -160 VDD
IOPIN 208 -160 BiDir
FLAG 208 240 GND
IOPIN 208 240 BiDir
FLAG -16 32 in
IOPIN -16 32 In
SYMBOL nmos_035 160 48 R0
SYMATTR InstName M1

SYMATTR Prefix X
SYMATTR Value2 W=1u L=0.35u
SYMATTR SpiceLine ""
SYMBOL pmos_035 160 -80 R0
SYMATTR InstName M2
SYMATTR Value2 W=3u L=0.35u
SYMATTR Prefix X
SYMATTR SpiceLine ""

And this is my inverter_035_1.asy:



Version 4
SymbolType BLOCK
LINE Normal -16 32 -16 -32
LINE Normal 33 0 -16 32
LINE Normal -16 -32 33 0
LINE Normal 64 0 44 0
LINE Normal 0 -48 0 -21
LINE Normal 0 48 0 22
LINE Normal -16 0 -48 0
CIRCLE Normal 44 5 33 -5

PIN -48 0 NONE 8
PINATTR PinName in
PINATTR SpiceOrder 1
PIN 64 0 NONE 8
PINATTR PinName out
PINATTR SpiceOrder 2
PIN 0 -48 NONE 8
PINATTR PinName VDD
PINATTR SpiceOrder 3
PIN 0 48 NONE 8

PINATTR PinName GND
PINATTR SpiceOrder 4

Both files reside in a sub-folder under E:\Program Files (x86)\LTC\LTspiceIV\lib\sym\



Answer



Alright, I found a workaround by myself that works!


1) Design your circuit in LTSpice and name all nets that will be connect to outside world. Save the circuit in .asc format in a subfolder under E:\Program Files (x86)\LTC\LTspiceIV\lib\sym. Like this:


Simple inverter


2) Before leaving the schematic editor go to View - SPICE Netlist. Copy and paste the netlist into a lib file, let's say 'mysubcir.lib'. Add a line above the pasted netlist to define a subcircuit like this:


mysubcir.lib:



.subckt inverter_035_1 in out VDD GND   * Add this line, inverter_035_1 must match the .asy filename 
* E:\Program Files (x86)\LTC\LTspiceIV\lib\sym\5827\inverter_035_1.asc
XM1 out in 0 0 NM W=1u L=0.35u
XM2 out in VDD VDD PM W=3u L=0.35u
.end inverter_035_1 * you need to add this also

3) Go to File - New Symbol and design your symbol. Put the pins with same net names in your schematic, in this case we have four pins: "in out VGD GND". And then save the .asy file in the same folder that you saved .asc file. Like this:


inverter symbol


Now your new subcircuit is available globally. You only need to add ".lib mysubcir.lib" to your top schematic.


The only problem with this approach is that whenever you update the .asc file then you have to export the netlist and copy/paste it again into the .lib file. Any other solution that avoids this double rework is very welcome.



No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...