1 / 30

Teised riistvara kirjelduskeeled

Teised riistvara kirjelduskeeled. L 1 1, L 1 2. Riistvara kirjelduskeel VHDL L13. Mäluga süsteemid VHDL-s L14. VHDL -i paketid ja teegid Sünteesitav VHDL L 1 5. T eised r i i stvara kirjelduskeeled. VHDL-AMS. VHDL-AMS - A nalog & M ixed S ignal extensions IEEE Standard 1076.1

akira
Download Presentation

Teised riistvara kirjelduskeeled

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Teised riistvara kirjelduskeeled L11, L12. Riistvara kirjelduskeel VHDL L13. Mäluga süsteemid VHDL-s L14. VHDL-i paketid ja teegid Sünteesitav VHDL L15. Teised riistvara kirjelduskeeled I207 - Digitaalloogika ja -süsteemid - L15

  2. VHDL-AMS • VHDL-AMS - Analog & Mixed Signal extensions • IEEE Standard 1076.1 • VHDL (IEEE Standard 1076-1993) laiendus • Matemaatiline alus • Analoogi (pidevalt muutuv osa) kirjeldavad algebralised differentsiaalvõrrandid (differential algebraic equations – DAEs) • Võrrandisüsteemi F(x,dx/dt)=0 lahendamine numbriliselt • x – tundmatute vektor • F – avaldiste vektor I207 - Digitaalloogika ja -süsteemid - L15

  3. VHDL-AMS • Kaks uut objekti • terminal • terminalide abil luuakse analoogahelaid terminal t1,t2:electrical; • quantity • koguste abil luuakse signaalide voo mudelid quantity a,b,c: voltage; • Täiendavad atribuudid • tuletis • integraal • Laplace’ teisendus • jne. I207 - Digitaalloogika ja -süsteemid - L15

  4. VHDL-AMS • Elektriliste omaduste pakett package electrical_system is subtype voltage is real; subtype current is real; subtype charge is real; subtype flux is real; nature electrical is voltage across current through; nature electrical_vector is array(natural range <>) of electrical; alias ground is electrical’reference; end package electrical_system; I207 - Digitaalloogika ja -süsteemid - L15

  5. Näide – põrkuv pall entity bouncer is end entity bouncer; architecture ball of bouncer is quantity v:velocity; -- m/sec quantity s:displacement; -- m constant g: real := 9.81; -- m/sec**2 constant air_res : real := 0.001; -- 1/m begin s’Dot == v; if v>0.0 use v’Dot == -g - v**2*air_res; else v’Dot == -g + v**2*air_res; end use; -- Announce discontinuity, reset velocity value break v => -v when not s’Above(0.0); -- Specify initial conditions break v => 0.0, s => 10.0; end architecture ball; I207 - Digitaalloogika ja -süsteemid - L15

  6. Teised riistvara kirjelduskeeled • Verilog • 1983/85 – Automated Integrated Design Systems • 1989/90 – omandatud Cadence Design Systems’i poolt • 1990/91 – OVI (Open Verilog International) • 1995 mai – IEEE Standard 1364-1995 • HardwareC, HandelC, uC++, SystemC • jt. C/C++ laiendused • Java • SDL, Erlang, Lotos • Petri-Nets • jne. ... I207 - Digitaalloogika ja -süsteemid - L15

  7. Verilog • Põhielement – moodul (module) • Signaalid • wire (traat) – pidevalt tüüritavad • reg ~ hoiab omistatud väärtust • muutujad puuduvad • piiratud andmetüübid • Simulatsioonimudel – nullviide • blokeerivad ja mitteblokeerivad omistamised • fork-join paar paralleelseteks lõimedeks I207 - Digitaalloogika ja -süsteemid - L15

  8. // structural module AND2 (in1, in2, out);     input in1, in2;     output out;     wire in1, in2, out;     and u1 (out, in1, in2); endmodule // behavioral module AND2 (in1, in2, out);     input in1;     input in2;     output out;     wire in1, in2;     reg out;     always @( in1 or in2 )         out = in1 & in2; endmodule Verilog // data flow module AND2 (in1, in2, out);     input in1, in2;     output out;     wire in1, in2, out;     assign out = in1 & in2; endmodule I207 - Digitaalloogika ja -süsteemid - L15

  9. Verilog // Test-bench module test_and2; reg i1, i2; wire o; AND2 u2 (i1, i2, o); initial begin i1 = 0; i2 = 0; #1 $display(”i1 = %b, i2 = %b, o = %b”, i1, i2, o); i1 = 0; i2 = 1; #1 $display(”i1 = %b, i2 = %b, o = %b”, i1, i2, o); i1 = 1; i2 = 0; #1 $display(”i1 = %b, i2 = %b, o = %b”, i1, i2, o); i1 = 1; i2 = 1; #1 $display(”i1 = %b, i2 = %b, o = %b”, i1, i2, o); end endmodule // result i1 = 0, i2 = 0, o = 0 i1 = 0, i2 = 1, o = 0 i1 = 1, i2 = 0, o = 0 i1 = 1, i2 = 1, o = 1 I207 - Digitaalloogika ja -süsteemid - L15

  10. Verilog • Andmetüübid integer i, j; real f, d; wire [7:0] bus;          // 1x8 bits reg [0:15] word;         // 1x16 bits reg arr[0:15];           // 16x1 bits reg [7:0] mem[0:127];    // 128x8 bits event trigger, clock_high; time t_setup, t_hold; parameter width=8; parameter width2=width*2; wire [width-1:0] ww; // The following are illegal wire w[0:15];            // No arrays wire [3:0] a, [7:0] b;   // Only one width per decl. I207 - Digitaalloogika ja -süsteemid - L15

  11. Konkatenatsioon {2’b1x, 4’h7} === 6’b1x0111 {cout, sum} = in1 + in2 + cin; {sreg, out} = {in, reg}; {3{2’b01}} === 6’b010101 Verilog • Indekseerimine reg [15:0] array [0:10]; reg [15:0] temp;     ... temp = array[3]; ... temp[7:5] ... // array[3][7:5] is illegal • fork-join module fork_join;   event a, b; // Block name!   fork : block1     @a disable block1;     @b disable block1;   join endmodule I207 - Digitaalloogika ja -süsteemid - L15

  12. s1 wb1 wb1d wb3 wb3d wn1 wn1d wn3 wn3d Verilog • blokeeriv always @(s1) #1 wb1  = s1; always @(s1) wb1d = #1 s1; always @(s1) #3 wb3  = s1; always @(s1) wb3d = #3 s1; • mitteblokeeriv always @(s1) #1 wn1  <= s1; always @(s1) wn1d <= #1 s1; always @(s1) #3 wn3  <= s1; always @(s1) wn3d <= #3 s1; I207 - Digitaalloogika ja -süsteemid - L15

  13. Mitte-determinism • Null-viitest põhjustatud mitte-determinisn module stupidVerilogTricks (f,a,b); input a, b; output f; reg f, q; initial f = 0; always @(posedge a) #10 q = b; not ( qBar, q ); always @q f = qBar; endmodule 1) qBar=0 [q==1] q=0 a=1 f=0 f=qBar=b=1 --> #10 q=1 [b==1] 2) f=1 [qBar==1] a=0 f==? qBar=0 [q==1] I207 - Digitaalloogika ja -süsteemid - L15

  14. Eelised Tootlikkus täidetav spetsifik. täpsustamine Süsteemi tase tarkvara osakaalu kasv koos-disain, -simul. jne. Korduvkasutamine OO eelised testkeskkond C/C++ on levinud! Puudused C/C++ pole riistvara C/C++ ei toeta riistvara infovahetust signaalid, protokollid aja mõistet (takt) sama-aegsust reaktiivsust nt. katkestused riistavara andmetüüpe bit, bitivektor, MVL C/C++ & riistvara? I207 - Digitaalloogika ja -süsteemid - L15

  15. Mis on SystemC? • C++ klasside teek • protsessid (sama-aegsus) • taktsignaalid (aja mõiste) • moodulid, väratid, signaalid (hierarhia) • ootamine, valvamine (reaktiivsus) • riistvara andmetüübid • Modelleerimis-stiil • ... süsteemide jaoks, mis koosnevad mitmest doomenist, abstraktsioonitasemest, arhitektuursest komponendist ja realistlikest piirangutest • Lõimeil põhinev simulatsiooni-mehanism I207 - Digitaalloogika ja -süsteemid - L15

  16. SystemC – koostisosad • Moodul – põhikomponent • protsessid (käitumine) & alam-moodulid (struktuur) • Väratid • ühendus mooduli ja väliskeskkonna vahel • mood: in, out, inout;  tüüp: C++, SystemC & kasutaja sc_in< type > in_port_name; // input port sc_out< type > out_port_name; // output port sc_inout< type > inout_port_name; // bidirectional sc_out< int > result [32]; // vector • taktsignaal - sc_clock sc_clock my_clk (”CLK”, 20, 0.5, 5, true); my_module.clk( my_clk.signal() ); sc_clock clock_name(”label”,period,duty_ratio,offset,start_value); I207 - Digitaalloogika ja -süsteemid - L15

  17. SystemC – koostisosad • Signaalid • semantika sarnane VHDL & Verilog signaalidele • tüüp: C++, SystemC & kasutaja sc_signal< type > signal_name; // signal declaration sc_signal< double > a[4]; // vector / array • Muutujad • lokaalsed andmed (protsess, funktsioon jne.) • tüüp: C++, SystemC & kasutaja • Lahendatud väratid ja signaalid • 4-väärtuseline loogika (0,1,Z,X) sc_signal_rv< n> y; // n bits wide resolved signal I207 - Digitaalloogika ja -süsteemid - L15

  18. SystemC – andmetüübid • C/C++ tüübid • char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, float, double, long double • SystemC tüübid • 2- (‘0’, ‘1’) ja 4-väärtuseline (‘0’, ‘1’, ‘Z’, ‘X’) loogika / vektor • märgiga ja märgita täis- ja fikskomaarvud (suvaline pikkus) • sc_bit, sc_logic, sc_int, sc_uint, sc_bigint, sc_biguint, sc_bv, sc_lv, sc_fixed, sc_ufixed, sc_fix, sc_ufix sc_uint<4> var_4bits;    sc_biguint<124> var_124bits; sc_lv<24> logic_vector;  sc_fixed<6,10> cff_1(0.125); • Kasutaja tüübid I207 - Digitaalloogika ja -süsteemid - L15

  19. SC_MODULE( plus ) {   sc_in<int> i1, i2;   sc_out<int> o1;   void do_plus();   SC_CTOR( plus ) {     SC_METHOD( do_plus );     sensitive << i1 << i2;   } }; void plus::do_plus() {   int arg1, arg2, sum;   arg1 = i1.read();   arg2 = i2.read();   sum = arg1 + arg2;   o1.write(sum); } SystemC – protsessid SC_MODULE( plus ) {   sc_in<int> i1, i2;   sc_out<int> o1;   void do_plus();   SC_CTOR( plus ) {     SC_THREAD( do_plus );     sensitive << i1 << i2;   } }; void plus::do_plus() {   int arg1, arg2;   int sum;   while ( true ) {     arg1 = i1.read();     arg2 = i2.read();     sum = arg1 + arg2;     o1.write(sum);     wait();   } } SC_MODULE( plus ) {   sc_in_clk clk;   sc_in<int> i1, i2;   sc_out<int> o1;   void do_plus();   SC_CTOR( plus ) {     SC_CTHREAD       (do_plus,clk.pos());   } }; void plus::do_plus() {   int arg1, arg2;   int sum;   while ( true ) {     arg1 = i1.read();     arg2 = i2.read();     sum = arg1 + arg2;     o1.write(sum);     wait();   } } I207 - Digitaalloogika ja -süsteemid - L15

  20. SystemC simulaator • Ühik- ja delta-viite kombinatsioon • 1) Kõik muutuvad taktsignaalid saavad uue väärtuse • 2) Täidetakse kõik SC_METHOD / SC_THREAD protsessid, mille sisendid on muutunud • 3) SC_CTHREAD protsessid, mille sisendid on muutunud, planeeritakse sammu 5 • 4) Samme 2 ja 3 korratakse kuni signaalide väärtused ei muutu • 5) Täidetakse aktiveeritud SC_CTHREAD protsessid • 6) Samm 1 korratakse järgmise simulatsiooni-ajaga I207 - Digitaalloogika ja -süsteemid - L15

  21. // mux.h #include "systemc.h“ SC_MODULE (mux) { int const static bit_number=8; sc_in <sc_bv <bit_number> > a_in; sc_in <sc_bv <bit_number> > b_in; sc_in <sc_bit> juht; sc_out <sc_bv <bit_number> > out_sig; SC_CTOR(mux):a_in("a_in"),b_in("b_in"), juht("juht"),out_sig("out_sig") { cout<<"mux constructor"<<endl; SC_METHOD( choose_out ); sensitive<<juht<<a_in<<b_in; } void choose_out() { if (juht.read()) out_sig.write(a_in.read()); else out_sig.write(b_in.read()); } }; // t_mux.cpp #include "systemc.h" #include "mux.h" SC_MODULE (t_mux) { int const static num_bits=8; sc_signal <sc_bv <num_bits> > t_a_in; sc_signal <sc_bv <num_bits> > t_b_in; sc_signal <sc_bit> t_juht; sc_signal <sc_bv <num_bits> > t_out_sig; mux* mux_instance; void stimulus(); SC_CTOR(t_mux):t_a_in("t_a_in"), t_b_in("t_b_in"),t_juht("t_juht"), t_out_sig("t_out_sig") { cout<<"t_mux constructor"<<endl; mux_instance=new mux("mux"); mux_instance->a_in(t_a_in); mux_instance->b_in(t_b_in); mux_instance->juht(t_juht); mux_instance->out_sig(t_out_sig); SC_THREAD(stimulus); } }; SystemC – näide I207 - Digitaalloogika ja -süsteemid - L15

  22. // t_mux.cpp ... void t_mux::stimulus() { t_a_in.write("11111111"); t_b_in.write("00001111"); t_juht.write((sc_bit)0); wait(1, SC_PS); t_juht.write((sc_bit)1); wait(10, SC_NS); t_juht.write((sc_bit)0); wait(10, SC_NS); t_a_in.write("11110000"); t_b_in.write("10101010"); t_juht.write((sc_bit)0); wait(10, SC_NS); t_juht.write((sc_bit)1); wait(); } // t_mux.cpp ... int sc_main(int args, char* argv[]) { t_mux testMux("t_mux"); sc_trace_file *trcf= sc_create_vcd_trace_file("trace-it"); if(trcf==NULL) cout<<"Sorry, no tracing..."<<endl; sc_trace(trcf, testMux.t_a_in, "t_a_in"); sc_trace(trcf, testMux.t_b_in, "t_b_in"); sc_trace(trcf, testMux.t_juht, "t_juht"); sc_trace(trcf, testMux.t_out_sig, "t_out_sig"); sc_start(40, SC_NS); sc_close_vcd_trace_file(trcf); return 0; } ---------------------------- > g++ -I/cad/sysC/include -L/cad/sysC/lib t_mux.cpp-lsystemc -o mux > ./mux > gtkwave trace-it.vcd SystemC – näide I207 - Digitaalloogika ja -süsteemid - L15

  23. mux & gtkWave SystemC – näide I207 - Digitaalloogika ja -süsteemid - L15

  24. Näidisprojekt – koodlukk • Neli nuppu (sisendid), üks relee (väljund) • Kolmene kood, kindel vajutamise järjekord • Juhtautomaat • 4 sisendit, 1 väljund • nupule vajutus ja vabastamine –> taktsignaal • s/v puhverdamine on hilisem teema • sisendid – kontaktide värelemine • väljund – signaali võimendamine • Kood – 2, 1, 4 • vale kood ja/või korraga vajutamine viib algusesse I207 - Digitaalloogika ja -süsteemid - L15

  25. 0100 0000 1- 1+ 0 2- 2+ 1000 0001 0000 4+ 0100 0000 1000 0000 OK 0001 0000 Näidisprojekt – koodlukk • Kood – 2, 1, 4 • vale kood ja/või korraga vajutamine viib algusesse • Olekud – algus, vajutus, vabastamine, … • 0, 2+, 2-, 1+, 1-, 4+ (lahti laskmine viib 0 tagasi) • näitamata kombinatsioon viib olekusse 0! I207 - Digitaalloogika ja -süsteemid - L15

  26. Koodlukk – VHDL mudel • Vt. http://www.itcollege.ee/~lrv/I207/koodlukk.vhd ja http://www.itcollege.ee/~lrv/I207/test_koodlukk.vhd • Olemus, st. põhiosa -- Siirde- ja valjundfunktsioon process ( nupud, current_state ) begin relee <= '0'; next_state <= s0; case current_state is when s0 => if nupud = "0100" then next_state <= s2p; end if; when s2p => if nupud = "0100" then next_state <= s2p; elsif nupud = "0000" then next_state <= s2m; end if; when s2m => if nupud = "0000" then next_state <= s2m; elsif nupud = "1000" then next_state <= s1p; end if; when s1p => if nupud = "1000" then next_state <= s1p; elsif nupud = "0000" then next_state <= s1m; end if; when s1m => if nupud = "0000" then next_state <= s1m; elsif nupud = "0001" then next_state <= s4p; end if; when s4p => if nupud = "0001" then next_state <= s4p; elsif nupud = "0000" then relee <= '1'; end if; end case; end process; I207 - Digitaalloogika ja -süsteemid - L15

  27. Koodlukk – simulatsioon • run 100 sec • Vt. http://www.itcollege.ee/~lrv/I207/koodlukk1.gif ja http://www.itcollege.ee/~lrv/I207/koodlukk2.gif I207 - Digitaalloogika ja -süsteemid - L15

  28. Koodlukk – realisatsioon • Automaatne süntees • Synopsys Design Compiler I207 - Digitaalloogika ja -süsteemid - L15

  29. nupud | st | st+ | out ------+-----+-----+---- 0000 | s0 | s0 | 0 0100 | | s2p | 0 1--- | | s0 | 0 0-1- | | s0 | 0 0-01 | | s0 | 0 ------+-----+-----+---- 0100 | s2p | s2p | 0 0000 | | s2m | 0 1--- | | s0 | 0 0-1- | | s0 | 0 0-01 | | s0 | 0 ------+-----+-----+---- 0000 | s2m | s2m | 0 1000 | | s1p | 0 -1-- | | s0 | 0 -01- | | s0 | 0 -001 | | s0 | 0 ------+-----+-----+---- 1000 | s1p | s1p | 0 0000 | | s1m | 0 -1-- | | s0 | 0 -01- | | s0 | 0 -001 | | s0 | 0 ------+-----+-----+---- 0000 | s1m | s1m | 0 0001 | | s4p | 0 1--- | | s0 | 0 01-- | | s0 | 0 001- | | s0 | 0 ------+-----+-----+---- 0001 | s4p | s4p | 0 0000 | | s0 | 1 1--- | | s0 | 0 01-- | | s0 | 0 001- | | s0 | 0 ------+-----+-----+---- espresso-le .i 7 .o 4 0000000 0000 0100000 0010 1---000 0000 0-1-000 0000 0-01000 0000 0100001 0010 0000001 0110 1---001 0000 0-1-001 0000 0-01001 0000 0000011 0110 1000011 0100 -1--011 0000 -01-011 0000 -001011 0000 1000010 0100 0000010 1100 -1--010 0000 -01-010 0000 -001010 0000 0000110 1100 0001110 1000 1---110 0000 01--110 0000 001-110 0000 0001100 1000 0000100 0001 1---100 0000 01--100 0000 001-100 0000 ----101 ---- ----111 ---- .e Koodlukk – realisatsioon nupud | st | st+ | out ------+---------+---------+---- 0000 | s0 000 | s0 000 | 0 0100 | | s2p 001 | 0 1--- | | s0 000 | 0 0-1- | | s0 000 | 0 0-01 | | s0 000 | 0 ------+---------+---------+---- 0100 | s2p 001 | s2p 001 | 0 0000 | | s2m 011 | 0 1--- | | s0 000 | 0 0-1- | | s0 000 | 0 0-01 | | s0 000 | 0 ------+---------+---------+---- 0000 | s2m 011 | s2m 011 | 0 1000 | | s1p 010 | 0 -1-- | | s0 000 | 0 -01- | | s0 000 | 0 -001 | | s0 000 | 0 ------+---------+---------+---- 1000 | s1p 010 | s1p 010 | 0 0000 | | s1m 110 | 0 -1-- | | s0 000 | 0 -01- | | s0 000 | 0 -001 | | s0 000 | 0 ------+---------+---------+---- 0000 | s1m 110 | s1m 110 | 0 0001 | | s4p 100 | 0 1--- | | s0 000 | 0 01-- | | s0 000 | 0 001- | | s0 000 | 0 ------+---------+---------+---- 0001 | s4p 100 | s4p 100 | 0 0000 | | s0 000 | 1 1--- | | s0 000 | 0 01-- | | s0 000 | 0 001- | | s0 000 | 0 ------+---------+---------+---- tulemus 00011-- 1000 010000- 0010 -00001- 0100 000010- 0001 0000--1 0110 0000-10 1100 skeem t1 = i1'i2'i3'i4 q1 t2 = i1'i2 i3'i4'q1'q2' t3 = i2'i3'i4'q1'q2 rl = i1'i2'i3'i4'q1 q2' t5 = i1'i2'i3'i4'q3 t6 = i1'i2'i3'i4'q2 q3' d1 = t1+t6 d2 = t3+t5+t6 d3 = t2+t5 natuke optimeerimist t0 = i1'i2'i3'i4' t0 = not(i1+i2+i3+i4) rl = t0 q1 q2' t5 = t0 q3 t6 = t0 q2 q3' I207 - Digitaalloogika ja -süsteemid - L15

  30. Vt. http://www.itcollege.ee/~lrv/I207/koodlukk.txt • Simulaator – http://www.falstad.com/circuit/ I207 - Digitaalloogika ja -süsteemid - L15

More Related