DedSec Project

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 — Διαδρομή ουσιαστικής εξάσκησης

Πρακτικές εργασίες

  1. Περιέγραψε καταχωρητή με ενημέρωση στο μέτωπο ρολογιού σε προσομοιωτή.
  2. Φτιάξε testbench με αρχικές τιμές και ακολουθίες εισόδου.
  3. Έλεγξε παραδοχές χρονισμού και ξεχώρισε προσομοίωση από σύνθεση.

Ερωτήσεις ουσίας

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 πρέπει να μείνει ίδιο.