Upload
irma-brennan
View
22
Download
0
Embed Size (px)
DESCRIPTION
Σχεδίαση hardware και προγραμματισμός. βασικές (αλλά σύγχρονες) μεθοδολογίες Βασίλης Παλιουράς. Διαχείριση πολυπλοκότητας - Z ητήματα και τεχνικές. Αφαιρετικότητα ( abstraction) Αυξητική ανάπτυξη incremental development, progressive refinement - PowerPoint PPT Presentation
Citation preview
Σχεδίαση hardware και προγραμματισμός
βασικές (αλλά σύγχρονες) μεθοδολογίες
Βασίλης Παλιουράς
2
Διαχείριση πολυπλοκότητας -Zητήματα και τεχνικές
Αφαιρετικότητα (abstraction) Αυξητική ανάπτυξη
• incremental development, progressive refinement
Έλεγχος ορθής λειτουργίας και διασφάλιση ποιότητας• Πώς διασφαλίζουμε ότι το σχεδιάσαμε το σύστημα σωστά;
• υλικό ή λογισμικό ή οποιοσδήποτε συνδυασμός
• Τι θα πει «σωστή» λύση;
Αξιοποίηση διαθέσιμων δομικών στοιχείων (reusability) Δυνατότητες επέκτασης – τροποποίησης Οι τεχνικές δεν αφορούν μόνο το λογισμικό!
• Εφαρμόζονται στο σύνολο των συστημάτων που σχεδιάζει ο μηχανικός.
3
Καθημερινότητα του μηχανικού Προδιαγραφές και εξομοιώσεις
συστημάτων σε C/C++, matlab, SystemC,... Περιγραφή υλικού σε VHDL, verilog, SystemC,...
• γράφουμε απευθείας μοντέλα ή μέσω scripts (perl,...) αλλά και matlab ή C
• παράγουμε οδηγίες προς τον εξομοιωτή με script Eπεξεργασία μοντέλων HDL
με εργαλεία αυτόματης σχεδίασης (EDA),
• περιγραφή ενεργειών βελτιστοποίησης σε γλώσσα χαρακτηριστική του εργαλείου
κτλ.
4
0 50 100 150 200 250 300-3
-2
-1
0
1
2
3
4
5
6
b=1.3
b=1.6b=1.4
// dff.vmodule dff(clock, reset, din, dout);
input clock, reset, din;output dout;reg dout;
always @(posedge clock or reset)beginif (reset) dout<= 1'b0;else dout = din;
end
endmodule
C,C++,matlab,SystemC...
HDLs(verilog,VHDL,SystemC)...
?
EDA
5
counter σε SystemC
#include "systemc.h"
class counter : public sc_module {int value;
public:sc_in<bool> clk;sc_in<bool> count;sc_in<bool> reset;sc_out<int> 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
process process
process
process
process
process
process
process
process
modulemodule
module
module
7
Verilog vs. SystemC// dff.vmodule dff(clock, reset, din, dout);
input clock, reset, din;output dout;reg dout;
always @(posedge clock or reset)beginif (reset) dout<= 1'b0;else dout = din;
end
endmodule
// dff.h#include "systemc.h“SC_MODULE(dff) {
sc_in <bool> clock;sc_in <bool> reset;sc_in <bool> din;sc_out <bool> 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
testbench.h
#include "systemc.h"
SC_MODULE(testbench) {sc_out <int> add;sc_out <bool> en;sc_out <bool> rw;sc_out <bool> we;sc_inout_rv <16> data;sc_in <bool> clock;
void do_test();
SC_CTOR(testbench) {SC_CTHREAD(do_test,clock.pos());
}
private:int read_cycle(int);void write_cycle(int, int);
};
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