diff options
Diffstat (limited to 'testsuite/vests/vhdl-ams/ad-hoc/fromUC/simultaneous_stmts/wein_bridge.ams')
-rw-r--r-- | testsuite/vests/vhdl-ams/ad-hoc/fromUC/simultaneous_stmts/wein_bridge.ams | 463 |
1 files changed, 463 insertions, 0 deletions
diff --git a/testsuite/vests/vhdl-ams/ad-hoc/fromUC/simultaneous_stmts/wein_bridge.ams b/testsuite/vests/vhdl-ams/ad-hoc/fromUC/simultaneous_stmts/wein_bridge.ams new file mode 100644 index 0000000..5cf47ba --- /dev/null +++ b/testsuite/vests/vhdl-ams/ad-hoc/fromUC/simultaneous_stmts/wein_bridge.ams @@ -0,0 +1,463 @@ + +-- Copyright (C) 2000-2002 The University of Cincinnati. +-- All rights reserved. + +-- This file is part of VESTs (Vhdl tESTs). + +-- UC MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE +-- SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, +-- OR NON-INFRINGEMENT. UC SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY +-- LICENSEE AS A RESULT OF USING, RESULT OF USING, MODIFYING OR +-- DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + +-- By using or copying this Software, Licensee agrees to abide by the +-- intellectual property laws, and all other applicable laws of the U.S., +-- and the terms of this license. + +-- You may modify, distribute, and use the software contained in this +-- package under the terms of the "GNU GENERAL PUBLIC LICENSE" version 2, +-- June 1991. A copy of this license agreement can be found in the file +-- "COPYING", distributed with this archive. + +-- You should have received a copy of the GNU General Public License +-- along with VESTs; if not, write to the Free Software Foundation, +-- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +-- --------------------------------------------------------------------- +-- +-- $Id: wein_bridge.ams,v 1.1 2002-03-27 22:11:20 paw Exp $ +-- $Revision: 1.1 $ +-- +-- --------------------------------------------------------------------- + +--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +-- REMARKS +-- ------- +-- TESTED : Works great for freq of 1.0 KHz - 30.0MHz +-- COMMENTS : The Values of R1_a and R1_b have to be 18.0k & 32.0K resp. +-- The freq. is given by the equation +-- F = 1/(2*PI*R*C) +-- where R=R3=R4 and +-- C=C3=C4. +--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +--************************************************************************* +-- Structural Level Model of a WEIN BRIDGE OSCILLATOR. +-- VHDL-AMS implementation +-- Developed at Distributed Processing Laboratory +-- University of Cincinnati +--************************************************************************* + +--######################################################################### +-- BLOCK DIAGRAM +-- ------------- +-- o V_out +-- | D1 +-- |__________|\_______________ +-- R1_a R1_b | |/ R2=10.0K | +-- -----^^^.^^^---o--------/\/\/\/\-----------| +-- | | T4 |__________/|_______________| +-- ------- | \| | +-- -- | D2 | +-- | |\ | +-- ------------------|-\ | +-- | \____________o T3 +-- | / | +-- -------------------|+/ | +-- | |/ | +-- |T1 T2 | +-- _________o__________||____o_____/\/\/\/\_____| +-- | | || +-- | | C4=16.0pF R4=10.0K +-- | < +-- C3 |16.0pF < R3=10.0K +-- ----- < +-- ----- | +-- | | +-- ------- ------- +-- -- -- +-- +--######################################################################### + + PACKAGE electricalsystem IS + NATURE electrical IS real ACROSS real THROUGH ground reference; + FUNCTION SIN(X:real) RETURN real; + FUNCTION COS(X:real) RETURN real; + FUNCTION EXP(X:real) RETURN real; + END PACKAGE electricalsystem; + +------------------------ RESISTOR --------------------------- + +use work.electricalsystem.all; + +entity resistor is + generic(res :real:=1.0 ); + port(terminal r_in,r_out: electrical); +end entity resistor; + +architecture behav of resistor is + quantity vr across ir through r_in to r_out; + +begin + vr==ir*res; +end architecture behav; + +------------------------ CAPACITOR--------------------------- +use work.electricalsystem.all; + +entity capacitor is + generic(cap :real:=1.0); + port(terminal c_in,c_out: electrical); +end entity capacitor; + +architecture behav of capacitor is + +quantity vc across ic through c_in to c_out; +begin + init: break vc=>0.0; + + ic==cap*vc'dot; +end architecture behav; + +---------------------------- Diode ----------------------------- +use work.electricalsystem.all; + +entity diode is +generic ( + Isat : real := 1.0e-14; -- saturatioin current + n : real := 1.0; -- emmission coefficient + bv : real := 1.0; -- reverse breakdown voltage + ibv : real := 1.0e-3; -- Breakdown current + rds : real := 1.0 -- Ohnic resistamce + ); +port (terminal pos, neg : electrical); +end diode; + +architecture behav of diode is + terminal td : electrical; + quantity vd across id through td to neg; + quantity vrd across ird through pos to td; + quantity vdiode : real := 2.0; + constant gmin : real := 1.0e-12; -- conductance + constant vt : real := 0.026; -- thermal voltage +begin -- behav + brk : break vd => 1.0; + diodecondition : if(vd >= -5.0*(vt*n)) use + dfow : id == ((isat*(exp(vd/(vt*n)) - 1.0)) + (gmin*vd)); + elsif(vd < -5.0*(vt*n) and (vd > -1.0*bv)) use + drev: id == ((-1.0*isat) + (gmin*vd)); + elsif vd = -1.0*bv use + dbv : id == -1.0*ibv; + elsif vd < -1.0*bv use + blbv : id == -1.0*Isat*(exp(-1.0*((bv + vd)/vt)) - 1.0 + (bv/vt)); + end use; + diododeres : vrd == ird * rds; + diodevolt : vdiode == vd + vrd; + +end behav; + +-------------------- NPN transistor --------------------------- +use work.electricalsystem.all; + +entity trans_npn is + port( terminal emitter,base,collector : electrical); +end trans_npn; + +architecture trans_behav of trans_npn is + +terminal t1,t2,t3,t4,t5,e,b :electrical; + +constant Lb :real:=0.5e-9; +constant rb1 :real:=1.0; +constant rb2 :real:=3.1; +constant rb3 :real:=2.7; +constant r_pi :real:=110.0; +constant c_pi :real:=18.0e-12; +constant gm :real:=0.88; +constant cc1 :real:=0.091e-12; +constant cc2 :real:=0.048e-12; +constant cc3 :real:=0.023e-12; +constant Le :real:=0.2e-9; +constant Rbase:real:=22.0; +constant Remit:real:=0.6; + + +quantity v1 across i1 through b to t1; +quantity v2 across i2 through t1 to t2; +quantity v3 across i3 through t2 to t3; +quantity v4 across i4 through t3 to t4; +quantity v_pi across i5 through t4 to t5; +quantity i6 through t4 to t5; +quantity v7 across i7 through t1 to collector; +quantity v8 across i8 through t2 to collector; +quantity v9 across i9 through t3 to collector; +quantity v10 across i10 through t5 to e; +quantity v11 across i11 through collector to t5; +quantity v_base across i_base through base to b; +quantity v_emit across i_emit through e to emitter; + + +BEGIN + + v1 ==Lb*i1'dot; + v2 ==i2*rb1; + v3 ==i3*rb2; + v4 ==i4*rb3; + v_pi==i5*r_pi; + i6 ==c_pi*v_pi'dot; + i7 ==cc1*v7'dot; + i8 ==cc2*v8'dot; + i9 ==cc3*v9'dot; + v10 ==Le*i10'dot; + i11 ==gm*v_pi; + v_base==rbase*i_base; + v_emit==remit*i_emit; + +end architecture trans_behav; + + +-------------------- PNP transistor --------------------------- +use work.electricalsystem.all; + +entity trans_pnp is + port( terminal emitter,base,collector : electrical); +end trans_pnp; + +architecture trans_behav of trans_pnp is + +terminal t1,t2,t3,t4,t5,e,b :electrical; + +constant Lb :real:=0.5e-9; +constant rb1 :real:=1.0; +constant rb2 :real:=3.1; +constant rb3 :real:=2.7; +constant r_pi :real:=110.0; +constant c_pi :real:=18.0e-12; +constant gm :real:=0.88; +constant cc1 :real:=0.091e-12; +constant cc2 :real:=0.048e-12; +constant cc3 :real:=0.023e-12; +constant Le :real:=0.2e-9; +constant Rbase:real:=22.0; +constant Remit:real:=0.6; + + +quantity v1 across i1 through t1 to b; +quantity v2 across i2 through t2 to t1; +quantity v3 across i3 through t3 to t2; +quantity v4 across i4 through t4 to t3; +quantity v_pi across i5 through t5 to t4; +quantity i6 through t5 to t4; +quantity v7 across i7 through collector to t1; +quantity v8 across i8 through collector to t2; +quantity v9 across i9 through collector to t3; +quantity v10 across i10 through e to t5; +quantity v11 across i11 through t5 to collector; +quantity v_base across i_base through b to base; +quantity v_emit across i_emit through emitter to e; + + +BEGIN + + v1 ==Lb*i1'dot; + v2 ==i2*rb1; + v3 ==i3*rb2; + v4 ==i4*rb3; + v_pi==i5*r_pi; + i6 ==c_pi*v_pi'dot; + i7 ==cc1*v7'dot; + i8 ==cc2*v8'dot; + i9 ==cc3*v9'dot; + v10 ==Le*i10'dot; + i11 ==gm*v_pi; + v_base==rbase*i_base; + v_emit==remit*i_emit; + +end architecture trans_behav; + + +--> Constant Voltage source +--------------------------- +use work.electricalsystem.all; +ENTITY voltSource IS + generic(amp:real:=22.0); + PORT( TERMINAL ta2,tb2 : electrical); +END voltSource; + +ARCHITECTURE voltbehavior OF voltSource IS + +terminal t1: electrical; +quantity V_volt across i_volt through t1 to tb2; +quantity V_drop across i_drop through ta2 to t1; + +BEGIN + V_volt == amp; + V_drop == i_drop*100.0; + +END ARCHITECTURE voltbehavior; + +-- ********* Structural Model Of a simple High Frequency OpAmp *********-- + +use work.electricalsystem.all; +entity op_amp is +port(terminal inverting_ip,non_inverting_ip,output :electrical); +end entity op_amp; + +architecture struct of op_amp is + +--> components + +COMPONENT trans_pnp is + port( terminal emitter,base,collector : electrical); +end component; +for all : trans_pnp use entity work.trans_pnp(trans_behav); + +COMPONENT trans_npn is + port( terminal emitter,base,collector : electrical); +end component; +for all : trans_npn use entity work.trans_npn(trans_behav); + +component resistor is +generic(res :real:=1.0 ); +port(terminal r_in,r_out: electrical); +end component; +for all: resistor use entity work.resistor(behav); + +component voltsource is +generic(amp:real:=22.0); +PORT( TERMINAL ta2,tb2 : electrical); +end component; +for all: voltsource use entity work.voltsource(voltbehavior); + +terminal t1,t2,t3,t4,t5,t6,t7,t8,t9,t10:electrical; +terminal V_pos,V_neg: electrical; + +BEGIN + + Q01_npn: trans_npn port map(emitter=>T2 ,base=>T1 ,collector=>T9); + Q02_npn: trans_npn port map(emitter=>T2 ,base=>T3 ,collector=>T4); + Q03_npn: trans_npn port map(emitter=>T5 ,base=>T6 ,collector=>T2); + Q04_npn: trans_pnp port map(emitter=>T7 ,base=>T4 ,collector=>T8); + Q05_npn: trans_npn port map(emitter=>output,base=>T8 ,collector=>V_pos); + + Res_i1 : resistor generic map(1.0e3) + port map(inverting_ip,T1); + Res_i2 : resistor generic map(1.0e3) + port map(non_inverting_ip,T3); + Res_a : resistor generic map(220.0e3) + port map(T6,V_pos); + Res_c1 : resistor generic map(13.0e3) + port map(T9,V_pos); + Res_c2 : resistor generic map(13.0e3) + port map(V_pos,T4); + Res_e4 : resistor generic map(10.0e3) + port map(V_pos,T7); + Res_b : resistor generic map(20.0e3) + port map(T6,V_neg); + Res_e3 : resistor generic map(1.3e3) + port map(T5,V_neg); + Res_c4 : resistor generic map(21.0e3) + port map(T8,V_neg); + Res_e5 : resistor generic map(12.0e3) + port map(output,V_neg); + + vpos : voltsource generic map(amp=>15.0) -- test case + port map(V_pos,ground); + vneg : voltsource generic map(amp=>-15.0) -- test case + port map(V_neg,ground); + +end architecture struct; + +--------------------------------------------------------------------- +------------------- WEIN BRIDGE OSCILLATOR --------------------- +--------------------------------------------------------------------- +use work.electricalsystem.all; + +entity wein_bridge_osc is +port( terminal signal_out :electrical); +end entity wein_bridge_osc; + +architecture struct of wein_bridge_osc is + +--> components +component op_amp is +port(terminal inverting_ip,non_inverting_ip,output :electrical); +end component; +for all:op_amp use entity work.op_amp(struct); + +component diode +generic ( + Isat : real := 1.0e-14; -- saturatioin current + n : real := 1.0; -- emmission coefficient + bv : real := 1.0; -- reverse breakdown voltage + ibv : real := 1.0e-3; -- Breakdown current + rds : real := 1.0 -- Ohnic resistamce + ); +port (terminal pos, neg : electrical); +end component; +for all : diode use entity work.Diode(behav); + +component capacitor is +generic(cap :real:=1.0); +port(terminal c_in,c_out: electrical); +end component; +for all: capacitor use entity work.capacitor(behav); + +component resistor is +generic(res :real:=1.0 ); +port(terminal r_in,r_out: electrical); +end component; +for all: resistor use entity work.resistor(behav); + +terminal t1,t2,t3,t4: electrical; + +begin + +op_amplifier : op_amp port map(inverting_ip=>t4,non_inverting_ip=>t1,output=>t3); + +D1 : diode port map(t3,signal_out); +D2 : diode port map(signal_out,t3); + +R1_a : resistor generic map(18.0e3) + port map(t4, ground); +R1_b : resistor generic map(32.0e3) + port map(t4,signal_out); +R2 : resistor generic map(10.0e3) + port map(signal_out,t3); +R3 : resistor generic map(10.0e3) + port map(t1,ground); +R4 : resistor generic map(10.0e3) + port map(t2,t3); + +C3 : capacitor generic map(16.0e-12) + port map(T1,ground); +C4 : capacitor generic map(16.0e-12) + port map(T1,T2); +end struct; + +---------------------------- Test Bench ----------------------------- + +use work.electricalsystem.all; + +entity testbench is +end entity; + +architecture basic of testbench is + +-->components +component wein_bridge_osc is +port( terminal signal_out :electrical); +end component; +for all: wein_bridge_osc use entity work.wein_bridge_osc(struct); + +terminal t1: electrical; + +quantity V_out across i_out through t1 to ground; + +BEGIN + +osc: wein_bridge_osc port map(T1); + +V_out == i_out*1.0e6; + +end basic; |