simuleren van een DAC in Cadence

C

curious_engineer

Guest
Hi all,

Ik probeer een 12-bits DAC simuleren in Cadence, specifiek de uitgangsspanning bij iedere digitale ingang combinatie.Ik wil alle input Digitial input combinaties 000000000000 tot 111111111111 (0 tot 4096), verhogen met 1 per keer.Ik zou dan in staat zijn om de output te gebruiken waarden te berekenen dnl, inl, enz.

Het probleem is dat het niet erg haalbaar is om deze inputs met 12 vpulse of pwl componenten set.Ik vroeg me af of iemand wist van een veriloga / VHDL programma dat kon de uitvoering van dit type digitale loket functie die ik kan gebruiken om de juiste input in mijn DAC in om Vout vs digitaal in de plot 0 tot 4096.

Thanks a lot.

 
je kon gewoon schrijven van een eenvoudige matlab code die de input golfvorm in een bestand schrijft en het gebruik in een vpwlf bron.

 
bedoel je met importeren matlab code cadans en een symbool van te maken?Ik dacht alleen cadans leest veriloga / VHDL.

 
Nee, nee!Ik bedoel dat in cadans u gebruik maken van een pwlf bron die verwijst naar een bestand.Het bestand bevat twee kolommen, de eerste voor de tijd en de tweede voor de spanning.
Je zou kunnen gebruiken om de gegevens te matlab punten te genereren met een eenvoudig script.

 
wow dat klinkt precies als wat ik zoek.Thanks a lot.

Dus als ik twee kolommen in een. Txt-bestand dat in de vorm zijn:
time1 voltage1
Time2 voltage2
time3 voltage3

dan de pwlf bron die correct zal interpreteren?Dat lijkt erg handig.Ik waardeer de hulp

 
Ja, dat is juist.Merk op dat u nodig heeft om zorg van opkomst en ondergang tijd in de golfvorm definitie te nemen.

 
ja, zou ik dat te doen.Bedankt.

Ik realiseerde een potentieel probleem.De inbreng in de DAC is 12 bits, dus ik nodig zou hebben 12 van deze pwlf bronnen met de timings goed ingesteld voor elk van hen.Dat lijkt het heel moeilijk zou zijn om te doen.Ik hoopte dat ik kon voeden in een bron in de DAC, die mijn 12-bit digitale ingang code vertegenwoordigt, maar ik denk niet dat dat zou worden toegestaan.

 
Mmm ...rechts!
Wat over het gebruik van verilog-a en laden van een bestand met
time1 voltage1_1 ...voltage1_12
Time2 voltage2_1 ...voltage2_12
time3 voltage3_1 ...voltage3_12
en stuur het op een bus.
Het voordeel is dat u kunt nog steeds een golfvorm met uw Matlab script te maken.Uw verilog-een rechtvaardige zal vertalen het voor cadans.Toegevoegd na 4 minuten:Eigenlijk denk ik niet dat verilog-een kan lezen in bestanden ...

 
Hm ...

Hoe zit het gebruik van een 12-bit Verilog-een teller, en gebruik de uitgang van de DAC-station.increment de teller elke cyclus.

 
Dit moet het werk doen ...

"include" constants.vams "
"include" disciplines.vams "

module ramp_gen (b);
output [11:0] b;
elektrische [11:0] b;

parameter real tp = 100e-9;
parameter real tr = 10e-9;
parameter real tf = 10e-9;
parameter real td = 0;
parameter real vh = 1.2;
parameter real vl = 0;

echt tellen
bit_v0,
bit_v1,
bit_v2,
bit_v3,
bit_v4,
bit_v5,
bit_v6,
bit_v7,
bit_v8,
bit_v9,
bit_v10,
bit_v11;

integer count_v;

analoge beginnen
@ (initial_step)
count = 0;

@ (timer (0.0, tp)) beginnen
if (count == 4096)
count = 0;

count_v = count;
bit_v0 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v1 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v2 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v3 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v4 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v5 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v6 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v7 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v8 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v9 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v10 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

bit_v11 = vh * (count_v% 2) vl;
count_v = floor (count_v / 2);

count = count 1;
eindigen

V (b [0]) < overgang (bit_v0, td, tr, TF);
V (b [1]) < overgang (bit_v1, td, tr, TF);
V (b [2]) < overgang (bit_v2, td, tr, TF);
V (b [3]) < overgang (bit_v3, td, tr, TF);
V (b [4]) < overgang (bit_v4, td, tr, TF);
V (b [5]) < overgang (bit_v5, td, tr, TF);
V (b [6]) < overgang (bit_v6, td, tr, TF);
V (b [7]) < overgang (bit_v7, td, tr, TF);
V (b [8]) < overgang (bit_v8, td, tr, TF);
V (b [9]) < overgang (bit_v9, td, tr, TF);
V (b [10]) < overgang (bit_v10, td, tr, TF);
V (b [11]) < overgang (bit_v11, td, tr, TF);
eindigen
endmodule

 
Bedankt!Het lijkt erop dat de code zal het lukken.Alleen ding is dat ik het zien van uw LSB is bit 11 en MSB bit 0 is (het is omgedraaid, no big deal).

Enorm Bedankt voor de hulp.Ik waardeer het.

 
curious_engineer wrote:

uw LSB is wat 11 en MSB bit 0 is (het is omgedraaid, no big deal).
 
curious_engineer wrote:

Hi all,Ik probeer een 12-bits DAC simuleren in Cadence, specifiek de uitgangsspanning bij iedere digitale ingang combinatie.
Ik wil alle input Digitial input combinaties 000000000000 tot 111111111111 (0 tot 4096), verhogen met 1 per keer.
Ik zou dan in staat zijn om de output te gebruiken waarden te berekenen dnl, inl, enz.Het probleem is dat het niet erg haalbaar is om deze inputs met 12 vpulse of pwl componenten set.
 
je hebt gelijk, zou ik zojuist heb gedaan.Bedankt.

Anyways, nu ben ik benieuwd hoe ik gemakkelijk Vout gegevens op te halen bij elke relevante tijdsinterval tot de uitgangsspanning voor elke ingang combinatie vangen.Dus zeg ik wil de output waarde record op elke 48us, opslaan van de waarden op een tafel, en een of andere manier het bestand opgeslagen als een tekstbestand.

Ik heb geprobeerd handmatig te simuleren, maar het duurt eeuwig.Ik wil gewoon draaien de simulatie en hebben automatisch een tekstbestand met deze Vout waarden opgeslagen.Is dit misschien mogelijk door het toevoegen van enkele lijnen in de oceaan script?

Nogmaals bedankt jongens voor de hulp.

 
curious_engineer wrote:

Anyways, nu ben ik benieuwd hoe ik gemakkelijk Vout gegevens op te halen bij elke relevante tijdsinterval tot de uitgangsspanning voor elke ingang combinatie vangen.
Dus zeg ik wil de output waarde record op elke 48us, opslaan van de waarden op een tafel, en een of andere manier het bestand opgeslagen als een tekstbestand.Ik heb geprobeerd handmatig te simuleren, maar het duurt eeuwig.
Ik wil gewoon draaien de simulatie en hebben automatisch een tekstbestand met deze Vout waarden opgeslagen.
Is dit misschien mogelijk door het toevoegen van enkele lijnen in de oceaan script?
 
Hier is een oceaan fragment dat de dac_out gegevens verzamelt en drukt het naar een bestand.
U moet het aanpassen aan uw behoeften.
Code:eek:penResults (<your_result_dir>)

selectResults ( 'tran)fid = outfile ( "<your_data_file>" "w")tsample_list = cross (VT ( "/ CLK" <your_result_dir>), 0.55, 0, "Rising")foreach (tsample tsample_listdac_out = waarde (VT ( "/ dac_out" <your_result_dir>), tsample)

fprintf (fid "% g \ t% g \ n" tsample dac_out)

drain (FID)

)

close (FID)

 
Ik zal kijken naar de Knipperen.Bedankt.

Ik zal ook proberen met uw code.Dit is de code die ik had voordat (testen w / net 1uS intervallen voor 3us):

out = outfile ( "<data_out tekst bestand>" w ")
selectResults ( `tran)
voor (x 1 3
tijd = x * 0.000001 - 1 * 0,000001
fprintf (out "% 5.3f" tijd)
fprintf (out "% 1.6e \ n" waarde (VT ( "/ dacout"), tijd))
)
close (out)

De tijd was niet verhogen, zodat het net genoemde dezelfde lijn 3 keer.Het zag er als volgt uit:
0,0000 waarde
0,0000 waarde
0,0000 waarde

Ik was niet in staat om uit het probleem met dat.Ik denk dat ik zal proberen de foreach methode.Bedankt.

 
curious_engineer wrote:voor (x 1 3

tijd = x * 0.000001 - 1 * 0,000001

fprintf (out "% 5.3f" tijd)

fprintf (out "% 1.6e \ n" waarde (VT ( "/ dacout"), tijd))

)

close (out)De tijd was niet verhogen, zodat het net genoemde dezelfde lijn 3 keer.
Het zag er als volgt uit:

0,0000 waarde

0,0000 waarde

0,0000 waardeIk was niet in staat om uit het probleem met dat.
Ik denk dat ik zal proberen de foreach methode.
 

Welcome to EDABoard.com

Sponsor

Back
Top