I am using multiplier (provided in ahdlLib library) to simulate the behaviour of mixer. One of the inputs (RF input to the mixer) is a sinusoid withh 100mV amplitude and frequency f_rf. The other input (LO input to the mixer ) is a square pulse with V_High =1 and V_low = 0 wityh frequency f_LO.
Multiplier gain is set to 1.
I am using PSS analysis (shooting method , errpreset set to moderate) to analyze frequency tones at the multiplier output.
Ideally I expect that multiplier will generate a frequency tone at IF frequency , f_IF= f_RF - f_LO with the peak amplitude given by
(2/pi)* (V_RF =100mV) .
Since I am using an ideal multiplier , I expect RF signal to be present at IF output of multiplier with exactly same ampliude (multiplier gain is set to 1 ).
But , I am observing loss through multiplier . Observed RF amplitude at the RF frequency was supposed to be 100mV but is 60.6mV and I am observing same loss for IF frequency.
To summarize : I am observing loss through ideal multiplier (gain is set to 1 ) when I try to use multiplier as a mixer . I am using PSS analysis shooting method to simulate the multiplier.
Please advise .
With Best Regards,
Are you using vsource (or vsin) as inputs, or port? It behaves perfectly (with vsource) in my case - I actually get half the peak amplitude at each tone (I'm not sure why it it whould be 2/pi). It's a voltage-based system.
Here's my netlist (easier than showing all the properties on the sources):
// Generated for: spectre// Generated on: May 29 18:42:13 2013// Design library name: RFworkshop// Design cell name: checkmult// Design view name: schematicsimulator lang=spectreglobal 0include "model/rfModels.scs"include "gpdk446.v10/models/nmos1.scs" section=nominclude "gpdk446.v10/models/pmos1.scs" section=nominclude "models/npnStd.scs"include "SpectreModels/RFmodels.scs"// Library name: RFworkshop// Cell name: checkmult// View name: schematicI0 (lo rf _net0) multiplier gain=1V0 (lo 0) vsource type=sine freq=1G ampl=1 fundname="LO"V1 (rf 0) vsource type=sine freq=900M ampl=1 fundname="RF"R0 (_net0 0) resistor r=1KsimulatorOptions options reltol=1e-3 vabstol=1e-6 iabstol=1e-12 temp=27 \ tnom=27 scalem=1.0 scale=1.0 gmin=1e-12 rforce=1 maxnotes=5 maxwarns=5 \ digits=5 cols=80 pivrel=1e-3 sensfile="../psf/sens.output" \ checklimitdest=psf pss pss fund=100M harms=20 errpreset=moderate annotate=statusmodelParameter info what=models where=rawfileelement info what=inst where=rawfileoutputParameter info what=output where=rawfiledesignParamVals info what=parameters where=rawfileprimitives info what=primitives where=rawfilesubckts info what=subckts where=rawfilesaveOptions options save=allpubahdl_include "/export/home/apps/IC615_isr/tools/dfII/samples/artist/ahdlLib/multiplier/veriloga/veriloga.va"
And attached is the picture of my results.
In reply to Andrew Beckett:
Thanks for the quick reply.
I am using voltage sources as input . With two sinusoids as input, I am getting correct output. I made two silly mistakes while using multiplier. First was with vpulse source. I assigned v_high=1.2 when I should have assigned v_high=1. I was calculating gain as 2/pi when it should have been 1/pi ( upconverted and downconverted product). pi comes into picture when digital pulse is expanded into fourier series.