Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Σχεδίαση hardware και προγραμματισμός βασικές (αλλά σύγχρονες) μεθοδολογίες Βασίλης Παλιουράς.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Σχεδίαση hardware και προγραμματισμός βασικές (αλλά σύγχρονες) μεθοδολογίες Βασίλης Παλιουράς."— Μεταγράφημα παρουσίασης:

1 Σχεδίαση hardware και προγραμματισμός βασικές (αλλά σύγχρονες) μεθοδολογίες Βασίλης Παλιουράς

2 2 Διαχείριση πολυπλοκότητας - Zητήματα και τεχνικές Αφαιρετικότητα (abstraction) Αυξητική ανάπτυξη incremental development, progressive refinement Έλεγχος ορθής λειτουργίας και διασφάλιση ποιότητας Πώς διασφαλίζουμε ότι το σχεδιάσαμε το σύστημα σωστά; υλικό ή λογισμικό ή οποιοσδήποτε συνδυασμός Τι θα πει «σωστή» λύση; Αξιοποίηση διαθέσιμων δομικών στοιχείων (reusability) Δυνατότητες επέκτασης – τροποποίησης Οι τεχνικές δεν αφορούν μόνο το λογισμικό! Εφαρμόζονται στο σύνολο των συστημάτων που σχεδιάζει ο μηχανικός.

3 3 Καθημερινότητα του μηχανικού Προδιαγραφές και εξομοιώσεις συστημάτων σε C/C++, matlab, SystemC,... Περιγραφή υλικού σε VHDL, verilog, SystemC,... γράφουμε απευθείας μοντέλα ή μέσω scripts (perl,...) αλλά και matlab ή C παράγουμε οδηγίες προς τον εξομοιωτή με script Eπεξεργασία μοντέλων HDL με εργαλεία αυτόματης σχεδίασης (EDA), περιγραφή ενεργειών βελτιστοποίησης σε γλώσσα χαρακτηριστική του εργαλείου κτλ.

4 4 // dff.v module dff(clock, reset, din, dout); input clock, reset, din; output dout; reg dout; always @(posedge clock or reset) begin if (reset) dout<= 1'b0; elsedout = din; end endmodule C, C++, matlab, SystemC... HDLs (verilog,VHDL, SystemC)... ? EDA

5 5 counter σε SystemC #include "systemc.h" class counter : public sc_module { int value; public: sc_in clk; sc_in count; sc_in reset; sc_out q; SC_HAS_PROCESS(counter); counter(sc_module_name nm): sc_module(nm),value(0) { SC_METHOD(do_count); sensitive << clk.pos() << reset; } protected: void do_count(){ if (reset){ value = 0;} else if (count) { value++; q.write(value); } };

6 6 process module

7 7 Verilog vs. SystemC // dff.v module dff(clock, reset, din, dout); input clock, reset, din; output dout; reg dout; always @(posedge clock or reset) begin if (reset) dout<= 1'b0; elsedout = din; end endmodule // dff.h #include "systemc.h“ SC_MODULE(dff) { sc_in clock; sc_in reset; sc_in din; sc_out dout; void do_dff( ) { if (reset) dout = false; else if (clock.event()) dout=din; } SC_CTOR(dff) { SC_METHOD(do_dff); sensitive(reset); sensitive_pos(clock); }

8 8 testbench.h #include "systemc.h" SC_MODULE(testbench) { sc_out add; sc_out en; sc_out rw; sc_out we; sc_inout_rv data; sc_in clock; void do_test(); SC_CTOR(testbench) { SC_CTHREAD(do_test,clock.pos()); } private: int read_cycle(int); void write_cycle(int, int); };

9 9 testbench.cpp #include "testbench.h" void testbench::do_test() { int i, j, flag, tmpA, tmpDW, tmpDR; for(j=0; 1; j++) { flag=0; wait(2); tmpA=1; tmpDW=123; for (i=0;i<3;i++) read_cycle(tmpA+i+j); for (i=0;i<3;i++) write_cycle(tmpA+i+j,tmpDW+i+j); for (i=0;i<3;i++) { tmpDR=read_cycle(tmpA+i+j); if (tmpDR!=(tmpDW+i+j)) { fprintf(stderr, "error: expected0x%x, but 0x%x", tmpDW+i+j, tmpDR); flag =1; } if (!flag) fprintf(stderr, "test passed...Wn"); }

10 10


Κατέβασμα ppt "Σχεδίαση hardware και προγραμματισμός βασικές (αλλά σύγχρονες) μεθοδολογίες Βασίλης Παλιουράς."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google