προσομοίωση ενός ΕΑΒ στο Cadence

C

curious_engineer

Guest
Hi all,

Προσπαθώ να προσομοιώνουν ένα 12-bit DAC σε Cadence, συγκεκριμένα, η τάση εξόδου σε κάθε ψηφιακή συνδυασμό των εισροών.Θέλω να συμβολή όλων ψηφιακός συνδυασμούς των εισροών από 000000000000 με 111111111111 (0 έως 4096), αύξηση κατά 1 κάθε φορά.Θα είναι σε θέση να χρησιμοποιούν τις τιμές εξόδου για τον υπολογισμό DNL, INL, κλπ.

Το πρόβλημα είναι ότι δεν είναι ιδιαίτερα σκόπιμος ο καθορισμός αυτών των εισροών μέσω 12 vpulse ή pwl συστατικά.Αναρωτιόμουν αν κάποιος ήξερε μιας veriloga / VHDL το πρόγραμμα που θα μπορούσαν να εφαρμόσουν αυτό το ψηφιακό λειτουργία του τύπου την αντιμετώπιση που μπορώ να χρησιμοποιήσω την κατάλληλη συμβολή στην ΕΑΒ μου για να οικόπεδο VOUT vs ψηφιακό Από 0 κατά 4096.

Thanks a lot.

 
θα μπορούσατε να γράψετε ένα απλό κωδικό matlab ότι γράφει η κυματομορφή εισόδου σε ένα αρχείο και να το χρησιμοποιήσετε σε ένα vpwlf πηγή.

 
εννοείτε την εισαγωγή του matlab κώδικα για αυξομείωσης και να κάνει ένα σύμβολο από αυτό;Νόμιζα Cadence διαβάζει μόνο veriloga / VHDL.

 
Οχι, μη!Θέλω να πω ότι σε αυξομείωσης χρησιμοποιείτε pwlf πηγή που οδηγεί σε ένα αρχείο.Το αρχείο περιέχει δύο στήλες, η πρώτη για το χρόνο και το δεύτερο για την τάση.
Θα μπορούσατε να χρησιμοποιήσετε matlab να παράγουν τα σημεία δεδομένων με ένα απλό σενάριο.

 
wow ότι ακούγεται ακριβώς όπως αυτό που ψάχνω.Thanks a lot.

Έτσι, αν έχω δύο στήλες σε ένα αρχείο. Txt αρχείου που είναι με τη μορφή:
time1 voltage1
time2 voltage2
time3 voltage3

τότε η pwlf πηγή που θα ερμηνεύσει σωστά;Αυτό φαίνεται πολύ βολική.Εκτιμώ τη βοήθεια

 
Ναι, αυτό είναι σωστό.Σημειώστε ότι θα πρέπει να ασχοληθούν με άνοδο και την πτώση φορά στην κυματομορφή ορισμό.

 
ναι, θα πρέπει να το κάνουμε αυτό.Ευχαριστώ.

Συνειδητοποίησα μόνο ένα πιθανό πρόβλημα όμως.Η τροφοδότηση της ΕΑΒ είναι 12 bits, γι 'αυτό θα χρειαστεί 12 από αυτές τις pwlf πηγές με τους χρόνους που κανονικά ορίζεται για κάθε μία από αυτές.Αυτό φαίνεται όπως θα ήταν αρκετά δύσκολο να κάνουμε.Ήλπιζα ότι θα μπορούσα να τις ζωοτροφές σε μία πηγή στην ΕΑΒ, οι οποίες αντιπροσωπεύουν το 12 μου-bit ψηφιακό κωδικό εισόδου, αλλά εγώ dont πιστεύω ότι θα πρέπει να επιτρέπεται.

 
Μμμ ...δεξιά!
Τι γίνεται με τη χρήση Verilog-ένα φορτίο και ένα αρχείο με
time1 voltage1_1 ...voltage1_12
time2 voltage2_1 ...voltage2_12
time3 voltage3_1 ...voltage3_12
και να το στείλετε σε ένα λεωφορείο.
Το πλεονέκτημα είναι ότι μπορείτε να δημιουργήσετε ακόμη καμία κυματομορφής με matlab script σας.Verilog σας-ένα θα μεταφράσει ακριβώς για Cadence.Προστίθενται μετά από 4 λεπτά:Στην πραγματικότητα, δεν νομίζω ότι Verilog-α μπορεί να διαβάσει στα αρχεία ...

 
Χμμ ...

Πώς χρησιμοποιούν περίπου ένα 12-bit Verilog-έναν μετρητή, και η χρήση της παραγωγής να οδηγεί την ΕΑΒ.προσαύξηση της καταπολέμησης κάθε κύκλο.

 
Αυτό πρέπει να κάνουμε τη δουλειά ...

»περιλαμβάνουν" constants.vams "
»περιλαμβάνουν" disciplines.vams "

ενότητα ramp_gen (β)?
εξόδου [11:0] b?
ηλεκτρικών [11:0] b?

παράμετρο πραγματική tp = 100e-9?
παράμετρο πραγματική tr = 10e-9?
παράμετρο πραγματική tf = 10e-9?
παράμετρο πραγματική td = 0?
παράμετρο πραγματική γσ = 1,2?
παράμετρο πραγματική VL = 0?

πραγματικός αριθμός,
bit_v0,
bit_v1,
bit_v2,
bit_v3,
bit_v4,
bit_v5,
bit_v6,
bit_v7,
bit_v8,
bit_v9,
bit_v10,
bit_v11?

count_v integer?

αναλογική αρχίσει
@ (initial_step)
count = 0?

@ (timer (0,0, TP)) αρχίζουν
if (count == 4096)
count = 0?

count_v = count?
bit_v0 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v1 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v2 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v3 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v4 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v5 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v6 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v7 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v8 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v9 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v10 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

bit_v11 = γσ * (count_v% 2) vl?
count_v = floor (count_v / 2)?

count = count 1?
τέλος

V (β [0]) < μετάβασης (bit_v0, td, tr, tf)?
V (β [1]) < μετάβασης (bit_v1, td, tr, tf)?
V (β [2]) < μετάβασης (bit_v2, td, tr, tf)?
V (β [3]) < μετάβασης (bit_v3, td, tr, tf)?
V (β [4]) < μετάβασης (bit_v4, td, tr, tf)?
V (β [5]) < μετάβασης (bit_v5, td, tr, tf)?
V (β [6]) < μετάβασης (bit_v6, td, tr, tf)?
V (β [7]) < μετάβασης (bit_v7, td, tr, tf)?
V (β [8]) < μετάβασης (bit_v8, td, tr, tf)?
V (β [9]) < μετάβασης (bit_v9, td, tr, tf)?
V (β [10]) < μετάβασης (bit_v10, td, tr, tf)?
V (β [11]) < μετάβασης (bit_v11, td, tr, tf)?
τέλος
endmodule

 
Ευχαριστώ!Μοιάζει με τον κωδικό που θα κάνει το κόλπο.Μόνο πράγμα είναι ότι βλέπω LSB σας είναι λίγο 11 και MSB είναι λίγο 0 (είναι γυρίσει, δεν είναι μεγάλη υπόθεση).

Σας ευχαριστώ παρά πολύ για τη βοήθεια.Το εκτιμώ.

 
curious_engineer έγραψε:

LSB σας είναι λίγο 11 και MSB είναι λίγο 0 (είναι γυρίσει, δεν είναι μεγάλη υπόθεση).
 
curious_engineer έγραψε:

Hi all,Προσπαθώ να προσομοιώνουν ένα 12-bit DAC σε Cadence, συγκεκριμένα, η τάση εξόδου σε κάθε ψηφιακή συνδυασμό των εισροών.
Θέλω να συμβολή όλων ψηφιακός συνδυασμούς των εισροών από 000000000000 με 111111111111 (0 έως 4096), αύξηση κατά 1 κάθε φορά.
Θα είναι σε θέση να χρησιμοποιούν τις τιμές εξόδου για τον υπολογισμό DNL, INL, κλπ.Το πρόβλημα είναι ότι δεν είναι ιδιαίτερα σκόπιμος ο καθορισμός αυτών των εισροών μέσω 12 vpulse ή pwl συστατικά.
 
έχεις δίκιο, θα μπορούσα να είχα κάνει ακριβώς αυτό.Ευχαριστώ.

Anyways, τώρα αναρωτιέμαι πώς μπορώ να εξαγάγετε εύκολα VOUT δεδομένων σε κάθε σχετική αύξηση του χρόνου για να συλλάβει την τάση εξόδου για κάθε συνδυασμό των εισροών.Έτσι θέλω να πω για την καταγραφή της αξίας παραγωγής σε κάθε 48us, κατάστημα τις τιμές σε ένα τραπέζι, και με κάποιο τρόπο να έχουν το αρχείο αποθηκεύεται ως αρχείο κειμένου.

Προσπάθησα χέρι προσομοίωση αυτό, αλλά χρειάζεται πάντα.Θα ήθελα απλά να τρέχει την προσομοίωση και την έχουν δημιουργήσει αυτόματα ένα αρχείο κειμένου με αυτές τις αξίες VOUT αποθηκεύονται.Είναι αυτό δυνατό με την προσθήκη ίσως μερικές γραμμές στο σενάριο ωκεανό;

Ευχαριστώ και πάλι παιδιά για τη βοήθεια.

 
curious_engineer έγραψε:

Anyways, τώρα αναρωτιέμαι πώς μπορώ να εξαγάγετε εύκολα VOUT δεδομένων σε κάθε σχετική αύξηση του χρόνου για να συλλάβει την τάση εξόδου για κάθε συνδυασμό των εισροών.
Έτσι θέλω να πω για την καταγραφή της αξίας παραγωγής σε κάθε 48us, κατάστημα τις τιμές σε ένα τραπέζι, και με κάποιο τρόπο να έχουν το αρχείο αποθηκεύεται ως αρχείο κειμένου.Προσπάθησα χέρι προσομοίωση αυτό, αλλά χρειάζεται πάντα.
Θα ήθελα απλά να τρέχει την προσομοίωση και την έχουν δημιουργήσει αυτόματα ένα αρχείο κειμένου με αυτές τις αξίες VOUT αποθηκεύονται.
Είναι αυτό δυνατό με την προσθήκη ίσως μερικές γραμμές στο σενάριο ωκεανό;
 
Εδώ είναι ένα απόσπασμα του ωκεανού που συλλέγει τα δεδομένα dac_out και εκτυπώνει σε ένα αρχείο.
Θα πρέπει να το τροποποιήσετε με τις ανάγκες σας.
Κωδικός:eek:penResults (<your_result_dir>)

selectResults ( «TRAN)fid = outfile ( "<your_data_file>" "w")tsample_list = σταυρό (VT ( "/ CLK" <your_result_dir>), 0,55, 0, "Rising")foreach (tsample_list tsampledac_out = αξία (VT ( "/ dac_out" <your_result_dir>), tsample)

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

διαρροή (FID)

)

κοντά (FID)

 
Θα εξετάσουμε το strobing.Ευχαριστώ.

Θα προσπαθήσουμε επίσης χρησιμοποιώντας τον κωδικό σας.Αυτός είναι ο κώδικας που είχα πριν (w δοκιμή / μόνο 1US διαστήματα για 3us):

out = outfile ( "text <data_out file>" w ")
selectResults ( `TRAN)
για το (x 1 3
χρόνος = x * 0.000001 - 1 * 0,000001
fprintf (out "% 5.3f" χρόνο)
fprintf (out "% 1.6E \ n" αξία (VT ( "/ dacout"), χρόνος))
)
κοντά (έξω)

Ο χρόνος δεν ήταν που αυξάνει, έτσι ώστε να αναφέρονται ακριβώς την ίδια γραμμή 3 φορές.Έμοιαζε:
0,0000 αξία
0,0000 αξία
0,0000 αξία

Δεν μπόρεσα να καταλάβω το πρόβλημα με αυτό.Υποθέτω ότι θα προσπαθήσω με τη μέθοδο foreach.Ευχαριστώ.

 
curious_engineer έγραψε:για το (x 1 3

χρόνος = x * 0.000001 - 1 * 0,000001

fprintf (out "% 5.3f" χρόνο)

fprintf (out "% 1.6E \ n" αξία (VT ( "/ dacout"), χρόνος))

)

κοντά (έξω)Ο χρόνος δεν ήταν που αυξάνει, έτσι ώστε να αναφέρονται ακριβώς την ίδια γραμμή 3 φορές.
Έμοιαζε:

0,0000 αξία

0,0000 αξία

0,0000 αξίαΔεν μπόρεσα να καταλάβω το πρόβλημα με αυτό.
Υποθέτω ότι θα προσπαθήσω με τη μέθοδο foreach.
 
haha, ότι ήταν ένα ανόητο λάθος.Ευχαριστώ.

 

Welcome to EDABoard.com

Sponsor

Back
Top