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

Σχεδίαση hardware και προγραμματισμός

Embed Size (px)

DESCRIPTION

Σχεδίαση hardware και προγραμματισμός. βασικές (αλλά σύγχρονες) μεθοδολογίες Βασίλης Παλιουράς. Διαχείριση πολυπλοκότητας - Z ητήματα και τεχνικές. Αφαιρετικότητα ( abstraction) Αυξητική ανάπτυξη incremental development, progressive refinement - PowerPoint PPT Presentation

Citation preview

Page 1: Σχεδίαση  hardware  και προγραμματισμός

Σχεδίαση hardware και προγραμματισμός

βασικές (αλλά σύγχρονες) μεθοδολογίες

Βασίλης Παλιουράς

Page 2: Σχεδίαση  hardware  και προγραμματισμός

2

Διαχείριση πολυπλοκότητας -Zητήματα και τεχνικές

Αφαιρετικότητα (abstraction) Αυξητική ανάπτυξη

• incremental development, progressive refinement

Έλεγχος ορθής λειτουργίας και διασφάλιση ποιότητας• Πώς διασφαλίζουμε ότι το σχεδιάσαμε το σύστημα σωστά;

• υλικό ή λογισμικό ή οποιοσδήποτε συνδυασμός

• Τι θα πει «σωστή» λύση;

Αξιοποίηση διαθέσιμων δομικών στοιχείων (reusability) Δυνατότητες επέκτασης – τροποποίησης Οι τεχνικές δεν αφορούν μόνο το λογισμικό!

• Εφαρμόζονται στο σύνολο των συστημάτων που σχεδιάζει ο μηχανικός.

Page 3: Σχεδίαση  hardware  και προγραμματισμός

3

Καθημερινότητα του μηχανικού Προδιαγραφές και εξομοιώσεις

συστημάτων σε C/C++, matlab, SystemC,... Περιγραφή υλικού σε VHDL, verilog, SystemC,...

• γράφουμε απευθείας μοντέλα ή μέσω scripts (perl,...) αλλά και matlab ή C

• παράγουμε οδηγίες προς τον εξομοιωτή με script Eπεξεργασία μοντέλων HDL

με εργαλεία αυτόματης σχεδίασης (EDA),

• περιγραφή ενεργειών βελτιστοποίησης σε γλώσσα χαρακτηριστική του εργαλείου

κτλ.

Page 4: Σχεδίαση  hardware  και προγραμματισμός

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

Page 5: Σχεδίαση  hardware  και προγραμματισμός

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);

}}

};

Page 6: Σχεδίαση  hardware  και προγραμματισμός

6

process process

process

process

process

process

process

process

process

modulemodule

module

module

Page 7: Σχεδίαση  hardware  και προγραμματισμός

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);

}}

Page 8: Σχεδίαση  hardware  και προγραμματισμός

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);

};

Page 9: Σχεδίαση  hardware  και προγραμματισμός

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");

}}

Page 10: Σχεδίαση  hardware  και προγραμματισμός

10