systemverilog — συγκεντρωτικός οδηγός — DedSec Project
systemverilog — συγκεντρωτικός οδηγός SystemVerilog Συνήθης χρήση: Περιγραφή υλικού. Προτεινόμενη επέκταση αρχείου: .sv . Εκτέλεση / περιβάλλον: Εκτέλεση με προσομοιωτή SystemVerilog…
SystemVerilog
Συνήθης χρήση: Περιγραφή υλικού.
Προτεινόμενη επέκταση αρχείου: .sv.
Εκτέλεση / περιβάλλον: Εκτέλεση με προσομοιωτή SystemVerilog.
Αρχικό παράδειγμα
module hello;
initial begin
string name = "Ada";
$display("Hello, %s!", name);
$finish;
end
endmodule
Πώς διαβάζεται
Διαθέτει πλουσιότερους τύπους και δυνατότητες ελέγχου από τη Verilog.
Συνηθισμένο λάθος
Διαθέτει πλουσιότερους τύπους και δυνατότητες ελέγχου από τη Verilog. Έλεγξε την έκδοση διερμηνευτή/μεταγλωττιστή και μην εκλαμβάνεις το δείγμα ως έτοιμη εφαρμογή παραγωγής.
SystemVerilog — Αναλυτικός οδηγός εξάσκησης
Μικρή αφετηρία πηγαίου κώδικα
module hello;
initial begin
string name = "Ada";
$display("Hello, %s!", name);
$finish;
end
endmodule
Περιβάλλον: Run with a SystemVerilog-capable simulator.. Κράτησε αντίγραφο του αρχικού κώδικα και σημείωσε έκδοση εργαλείου. Ξεχώρισε αν η εκτέλεση επιστρέφει τιμή, εμφανίζει κείμενο ή αλλάζει state. Για τις πρώτες δοκιμές χρησιμοποίησε απομονωμένο περιβάλλον, όχι πραγματικούς λογαριασμούς ή δεδομένα.
Ανάλυση του ιδιαίτερου μηχανισμού
Φτιάξε register με always_ff @(posedge clk), testbench με assertions και εξήγησε blocking έναντι nonblocking assignments σε sequential process.
Διάγνωση κρίσιμου ορίου
Μη θεωρείς ότι τα simulation delta cycles είναι πραγματικό hardware delay. Δες lint και simulator πριν από synthesis.
SystemVerilog — Διαδρομή ουσιαστικής εξάσκησης
Πρακτικές εργασίες
- Περιέγραψε καταχωρητή με ενημέρωση στο μέτωπο ρολογιού σε προσομοιωτή.
- Φτιάξε testbench με αρχικές τιμές και ακολουθίες εισόδου.
- Έλεγξε παραδοχές χρονισμού και ξεχώρισε προσομοίωση από σύνθεση.
Ερωτήσεις ουσίας
- Περιγράφει παράλληλο υλικό αντί διαδοχικών εντολών;
- Ποια εργαλεία εκτελούν ή ελέγχουν το παράδειγμα και σε ποια έκδοση;
- Ποιο είναι το μικρότερο ελεγμένο πρόγραμμα; Ποιες είναι οι παρενέργειες;
- Πώς γίνεται διάκριση μεταξύ σφάλματος σύνταξης, λογικής και περιβάλλοντος;
- Πώς δοκιμάζονται άκυρα δεδομένα χωρίς βλάβη σε αρχεία ή σύστημα;
VHDL
Συνήθης χρήση: Περιγραφή υλικού.
Προτεινόμενη επέκταση αρχείου: .vhd.
Εκτέλεση / περιβάλλον: Μεταγλώττιση και προσομοίωση με GHDL ή ισοδύναμο.
Αρχικό παράδειγμα
entity hello is end entity;
architecture demo of hello is
begin
process begin
report "Hello, Ada!";
wait;
end process;
end architecture;
Πώς διαβάζεται
Τα σήματα και η παραλληλία είναι βασικά στην περιγραφή υλικού.
Συνηθισμένο λάθος
Τα σήματα και η παραλληλία είναι βασικά στην περιγραφή υλικού. Έλεγξε την έκδοση διερμηνευτή/μεταγλωττιστή και μην εκλαμβάνεις το δείγμα ως έτοιμη εφαρμογή παραγωγής.
VHDL — Αναλυτικός οδηγός εξάσκησης
Μικρή αφετηρία πηγαίου κώδικα
entity hello is end entity;
architecture demo of hello is
begin
process begin
report "Hello, Ada!";
wait;
end process;
end architecture;
Περιβάλλον: Compile and simulate with GHDL or equivalent.. Κράτησε αντίγραφο του αρχικού κώδικα και σημείωσε έκδοση εργαλείου. Ξεχώρισε αν η εκτέλεση επιστρέφει τιμή, εμφανίζει κείμενο ή αλλάζει state. Για τις πρώτες δοκιμές χρησιμοποίησε απομονωμένο περιβάλλον, όχι πραγματικούς λογαριασμούς ή δεδομένα.
Ανάλυση του ιδιαίτερου μηχανισμού
Φτιάξε D flip-flop entity και testbench με rising_edge(clk). Έλεγξε reset, ενημέρωση σε clock edge και σταθερή έξοδο ενδιάμεσα.
Διάγνωση κρίσιμου ορίου
Τα signals ενημερώνονται μέσω προγραμματισμένων events, ενώ οι variables διαφορετικά. Simulation δεν αποδεικνύει synthesizeable design.
VHDL — Διαδρομή ουσιαστικής εξάσκησης
RTL ενός σύγχρονου καταχωρητή
Η VHDL περιγράφει κυκλώματα παράλληλης συμπεριφοράς. Μέσα σε clocked process, το signal assignment <= προγραμματίζει ενημέρωση του σήματος και όχι άμεση ανάθεση όπως σε μια τοπική μεταβλητή imperative προγράμματος.
library ieee;
use ieee.std_logic_1164.all;
entity reg8 is
port(clk, en : in std_logic;
d : in std_logic_vector(7 downto 0);
q : out std_logic_vector(7 downto 0));
end entity;
architecture rtl of reg8 is
signal stored : std_logic_vector(7 downto 0) := (others => '0');
begin
process(clk)
begin
if rising_edge(clk) then
if en = '1' then
stored <= d;
end if;
end if;
end process;
q <= stored;
end architecture;
Το q κρατά την προηγούμενη τιμή όσο en='0'. Μόνο σε rising edge με en='1' μπορεί να φορτωθεί το d. Η αρχική τιμή (others=>'0') λειτουργεί ως δήλωση για την προσομοίωση, αλλά η εγγύηση εκκίνησης πραγματικού ASIC/FPGA εξαρτάται από την τεχνολογία και την υλοποίηση.
Testbench, όχι μόνο εμφάνιση κυματομορφής
Δημιούργησε ρολόι με περίοδο 10 ns και input d=0x35. Κράτα enable χαμηλό σε δύο μέτωπα, μετά ανέβασέ το για ένα. Έλεγξε q μετά από κατάλληλο simulation delta delay, όχι στο ίδιο delta ακριβώς με τη μεταβολή clk. Κατέγραψε assertions για «αμετάβλητο πριν» και «0x35 μετά» με συγκεκριμένες χρονικές στιγμές.
Τι θα ήταν latch
Γράψε ξεχωριστό combinational process χωρίς ανάθεση output σε κάθε κλάδο. Η διατήρηση παλιάς τιμής σε combinational λογική μπορεί να δημιουργήσει inferred latch. Μη συγχέεις αυτό με το edge-triggered storage του παραπάνω register. Σύγκρινε synthesis reports αν διαθέτεις εργαλεία αντί να βασίζεσαι μόνο σε οπτική ερμηνεία.
Κριτήρια επαλήθευσης
Παράδωσε source του testbench, κύματα για enable 0/1, GHDL ή άλλη simulator version και σαφή διάκριση simulation από synthesis. Τα setup/hold και η μετασταθερότητα δεν αποδεικνύονται από απλή RTL προσομοίωση. Δοκίμασε αλλαγή d ανάμεσα σε μέτωπα και εξήγησε γιατί το q πρέπει να μείνει ίδιο.