1 / 28

VHDL ja süntees

VHDL ja süntees. L4, L5. Riistvara kirjelduskeel VHDL L6. Mäluga süsteemid VHDL-s L7. VHDL ja süntees. Sünteesitav VHDL. Eesmärgid üheselt tõlgendatav kirjeldus asendatavus struktuurse kirjeldusega asendatavus loogikaelementidega VHDL-i alamhulk

flint
Download Presentation

VHDL ja süntees

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. VHDL ja süntees L4, L5. Riistvara kirjelduskeel VHDL L6. Mäluga süsteemid VHDL-s L7. VHDL ja süntees I207 - Digitaalloogika ja -süsteemid - L7

  2. Sünteesitav VHDL • Eesmärgid • üheselt tõlgendatav kirjeldus • asendatavus struktuurse kirjeldusega • asendatavus loogikaelementidega • VHDL-i alamhulk • ainult osa konstruktsioone on sünteesitavad • aeg viitena pole toetatud • võimalused erinevateks tõlgendusteks • taktsignaali sagedus – “wait for …;” • andmeformaadid – ujukomaarvud I207 - Digitaalloogika ja -süsteemid - L7

  3. Kombinatoorne loogika • Protsess on interpreteeritav kombinatoorse loogika plokina siis ja ainult siis, kui: • protsessil on tundlikkuse nimistu või sisaldab ainult ühte ajakontrolli käsku • stiilis “wait on a, b, c;” • lokaalsed muutujad puuduvad või neile omistatakse väärtus ainult enne lugemist • kõik signaalid, mille väärtust kasutatakse, kuuluvad ka tundlikkuse nimistusse • kõik väljundsignaalid saavad väärtuse protsessi kõikides tingimuslikes harudes • s.t., pole vaja väärtust eelmisest tsüklist I207 - Digitaalloogika ja -süsteemid - L7

  4. if-käsu süntees • if-käsk = multiplekser signal A,B,C,P1,P2,Z: BIT; . . . if (P1 = ’1’) then Z <= A; elsif (P2 = ’0’) then Z <= B; else Z <= C; end if; I207 - Digitaalloogika ja -süsteemid - L7

  5. Keerukamad omistamised (I) • Mäluta S <= A when X=’1’ else B when Y=’1’ else C; process begin wait on A, B, C, X, Y; if    X=’1’ then   S <= A;   elsif Y=’1’ then   S <= B;   else               S <= C;   end if; end process; I207 - Digitaalloogika ja -süsteemid - L7

  6. Keerukamad omistamised (II) • Mäluga S <= A when X=’1’ else B when Y=’1’ else S; process begin   wait on A, B, X, Y;   if    X=’1’ then   S <= A;   elsif Y=’1’ then   S <= B;   end if; end process; I207 - Digitaalloogika ja -süsteemid - L7

  7. D-triger P1_FF: process (CLK) begin   if CLK=’1’ and CLK’event then     Q<=D;   end if; end process P1_FF; P2_FF: process begin   wait on CLK until CLK=’1’;   Q<=D; end process P2_FF; Nullitav & laetav P3_FF: process (CLK) begin   if CLK=’1’ and CLK’event then     if    RES=’1’ then    Q<=(others=>’0’);     elsif ENA=’1’ then    Q<=D;     end if;  end if; end process P3_FF; Registrid (flip-flop) I207 - Digitaalloogika ja -süsteemid - L7

  8. Registrid (flip-flop) • Asünkroonne nullimine (& sünkroonne laadimine) P3_FF: process (RESET,CLK) begin   if RESET=’1’ then -- async. reset    Q<=(others=>’0’); elsif CLK=’1’ and CLK’event then     if ENA=’1’ then  Q<=D;  end if;  end if; end process P3_FF; • Sama-aegsed käsud Q<= D when CLK’event and CLK=’1’ else unaffected; I207 - Digitaalloogika ja -süsteemid - L7

  9. Sünteesi reeglid • Tähtsuse järjekorras: • omistatav signaal on flip-flop, kui omistamist kontrollib frondi avaldis • nt. CLK’event and CLK=’1’ • üldjuhul on lubatud ainult üks frondi avaldis • eri protsessidel võivad olla erinevad taktsignaalid • omistatav signaal toob sisse kolme-olekulise puhvri, kui talle võib omistada väärtuse ‘Z’ • nt. Q <= D when SEL = ’1’ else ’Z’; I207 - Digitaalloogika ja -süsteemid - L7

  10. Sünteesi reeglid • Tähtsuse järjekorras (jätkub): • omistatav signaal on latch, kui omistamist ei toimu kõigis tingimuslikes harudes ja puudub frondi avaldis • vastasel juhul sünteesitakse kombinatoorskeem • Kasulik on eraldada mäluelemendid ja puhvrid kombinatoorsest osast, et olla kindel tulemuse korrektsuses I207 - Digitaalloogika ja -süsteemid - L7

  11. + / - < / > RG RG Sünteesi reeglid process (a, b, c) begin   x <= f (a, b); y <= g (b, c); end process; process (clk) begin if clk’event and clk=’1’ then q <= d; end if; end process; Funktsionaalsed sõlmed Mäluelemendid I207 - Digitaalloogika ja -süsteemid - L7

  12. Signaal või muutuja? signal A1, A2: BIT; process (CLOCK) variable A3 : BIT; begin if CLOCK=’1’ and CLOCK’event then A3 := A1 and A2; Z <= A3; end if; end process; signal A1,A2,A3 : BIT; process (CLOCK) begin if CLOCK=’1’ and CLOCK’event then A3 <= A1 and A2; Z <= A3; end if; end process; I207 - Digitaalloogika ja -süsteemid - L7

  13. Aritmeetika • Üledefineeritud aritmeetikaoperatsioonid: library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; • Ettevaatust operatsioonidega ‘*’, ‘/’, ‘**’ – äärmiselt palju loogikaelemente • Ohutu mõningatel juhtudel – kahe astmega korrutamine / jagamine • Sulgude kasutamine grupeerib elemente I207 - Digitaalloogika ja -süsteemid - L7

  14. Algväärtustamine • Algväärtused tuletatakse (alam)tüübi deklaratsioonist (nt. “mytype’left”) • Otsene algväärtustamine objekti deklareerimisel • Algväärtustamine toimub omistamisega protsessi alguses • Ainult viimane variant on sünteesitav • osa koodist kulub algväärtustamistele I207 - Digitaalloogika ja -süsteemid - L7

  15. Tsüklite sünteesimine • for-tsükkel või while-tsükkel? • Sõltub üldjuhul sünteesivahendist • Design Compiler (Synopsys):for – paralleelne, while – järjestikuline • ISE (Xilinx):for / while – ainult paralleelne • Leonardo (Mentor Graphics): sõltub ajalistest piirangutest (takt jms.) I207 - Digitaalloogika ja -süsteemid - L7

  16. for-tsükkel paralleelne realisatsioon tsükli keha ei tohi sisaldada ajakontrolli käske (wait) Sõltub süntesaatorist… for i in 0 to 7 loop   x(i) := a(i) and b(i); end loop; Tsüklite sünteesimine I207 - Digitaalloogika ja -süsteemid - L7

  17. while-tsükkel järjestikuline realisatsioon tsükli keha peab sisaldama ajakontrolli käsku (wait) Sõltub süntesaatorist… i := 0; while i<7 loop   data(i) := in_port;   wait on clk until clk=’1’;   i := i + 1; end loop; Tsüklite sünteesimine I207 - Digitaalloogika ja -süsteemid - L7

  18. Kaks protsessi library IEEE; use IEEE.std_logic_1164.all; entity counter03 is port ( clk: in bit; resetn: in std_logic; three: out std_logic ); end entity counter03; library IEEE; use IEEE.std_logic_1164.all; architecture fsm2 of counter03 is subtype state_type is integer range 0 to 3; signal pres_state, next_state: state_type:=0; begin process (clk) begin -- State memory if clk'event and clk = '1' then pres_state <= next_state; end if; end process; -- Next state & output functions process (resetn, pres_state) begin three <= '0'; if resetn='0' then next_state <= 0; else case pres_state is when 0 to 2 => next_state <= pres_state + 1; when 3 => next_state <= 0; three <= '1'; end case; end if; end process; end architecture fsm2; Loendur & süntees 22 ekv.l.elem. / 3,70 ns I207 - Digitaalloogika ja -süsteemid - L7

  19. Kolm protsessi library IEEE; use IEEE.std_logic_1164.all; entity counter03 is port ( clk: in bit; resetn: in std_logic; three: out std_logic ); end entity counter03; library IEEE; use IEEE.std_logic_1164.all; architecture fsm3 of counter03 is subtype state_type is integer range 0 to 3; signal pres_state, next_state: state_type:=0; begin process (clk) begin -- State memory if clk'event and clk = '1' then pres_state <= next_state; end if; end process; -- Next state function process (resetn, pres_state) begin if resetn='0' then next_state <= 0; else if pres_state=3 then next_state <= 0; else next_state <= pres_state + 1; end if; end if; end process; -- Output function process (resetn, pres_state) begin if pres_state=3 then three <= '1'; else three <= '0'; end if; end process; end architecture fsm3; Loendur & süntees 23 ekv.l.elem. / 4,36 ns I207 - Digitaalloogika ja -süsteemid - L7

  20. Üks protsess library IEEE; use IEEE.std_logic_1164.all; entity counter03 is port ( clk: in bit; resetn: in std_logic; three: out std_logic ); end entity counter03; library IEEE; use IEEE.std_logic_1164.all; architecture fsm1 of counter03 is subtype state_type is integer range 0 to 3; signal state: state_type := 0; begin process (clk) begin if clk'event and clk = '1' then three <= '0'; if resetn='0' then state <= 0; else case state is when 0 | 1 => state <= state + 1; when 2 => state <= state + 1; three <= '1'; when 3 => state <= 0; end case; end if; end if; end process; end architecture fsm1; Loendur & süntees 38 ekv.l.elem. / 5,68 ns I207 - Digitaalloogika ja -süsteemid - L7

  21. Eraldi loendur ja automaat architecture synth of TLC2 is type state_type is (S1, S2, S3, S4); signal state: state_type := S1; signal road1, road2: bit_vector (1 to 3); signal counter: integer range 0 to 15 := 0; Begin process begin -- counter wait on timer until timer='1'; if counter = 14 then counter <= 0; else counter <= counter + 1; end if; end process; process begin -- next state wait on timer until timer='1'; case state is when S1 => if counter>=12 then state <= S2; else state <= S1; end if; when S2 => if counter>=12 then state <= S2; else state <= S3; end if; when S3 => if counter>=12 then state <= S4; else state <= S3; end if; when S4 => if counter>=12 then state <= S4; else state <= S1; end if; end case; end process; process (state) begin -- output case state is when S1 => R1 <= '0'; Y1 <= '0'; G1 <= '1'; R2 <= '1'; Y2 <= '0'; G2 <= '0'; when S2 => R1 <= '0'; Y1 <= '1'; G1 <= '0'; R2 <= '1'; Y2 <= '1'; G2 <= '0'; when S3 => R1 <= '1'; Y1 <= '0'; G1 <= '0'; R2 <= '0'; Y2 <= '0'; G2 <= '1'; when S4 => R1 <= '1'; Y1 <= '1'; G1 <= '0'; R2 <= '0'; Y2 <= '1'; G2 <= '0'; end case; end architecture synth; Süntees & valgusfoor??? I207 - Digitaalloogika ja -süsteemid - L7

  22. VHDL & valgusfoor • Simulatsioonide tulemused TLC synth pisierinevused aegades pole praegu oluline… I207 - Digitaalloogika ja -süsteemid - L7

  23. Valgusfoor skeemina? http://www.itcollege.ee/~lrv/I207/tlc-applet.txt I207 - Digitaalloogika ja -süsteemid - L7

  24. Sünteesi metodoloogia • Defineeri disaini tase • automaat, RTL, struktuurne • Defineeri kasutatavad paketid • tarnija, kasutaja poolt määratud • Tükelda disain • komponendid, ühendused, testikava, testkeskkond • Sünteesi disain • komponentide süntees, viidete analüüs • Verifitseeri/valideeri disain • loogikalülid võrreldes RTL-ga I207 - Digitaalloogika ja -süsteemid - L7

  25. Mitu “wait” käsku? • VHDL semantika peab alles jääma • on võimalikud erinevad interpretatsioonid • Operatsioonide hajutamine mitme takti vahel • Algoritm • sisendid: a, b, c, d • väljund: x • kordajad: c1, c2 • x = a + b*c1 + c*c2 + d • ajaline piirang - 3 takti process   variable av, bv, cv, dv: ...; begin   av:=a; bv:=b; cv:=c; dv:=d;   wait on clk until clk=’1’;   wait on clk until clk=’1’;   x <= av + bv*c1 + cv*c2 + dv;   wait on clk until clk=’1’; end process; I207 - Digitaalloogika ja -süsteemid - L7

  26. Mitu “wait” käsku? • Käitumuslik interpretatsioon pole alati parim process   variable av, bv, cv, dv: ...; begin   av:=a; bv:=b; cv:=c; dv:=d;   wait on clk until clk=’1’;   wait on clk until clk=’1’;   x <= av + bv*c1 + cv*c2 + dv;   wait on clk until clk=’1’; end process; process   variable av, bv, cv, dv: ...;   variable r1, r2: ...; begin   av:=a; bv:=b; cv:=c; dv:=d;   r1 := av + dv;  r2 := bv * c1;   wait on clk until clk=’1’;   r1 := r1 + r2;  r2 := cv * c2;   wait on clk until clk=’1’;   x <= r1 + r2;   wait on clk until clk=’1’; end process; 2 korrutit, 3 summaatorit 1 korruti, 1 summaator I207 - Digitaalloogika ja -süsteemid - L7

  27. “wait” käskude lisamine • VHDLi semantika s/v suhtes paigas • 16-järguline filter • lugem - sys_clk • täiendava takti lisamine võimalik • Tsüklid? • 1. paralleelselt • 2. järjestikuliselt process variable sum: ...; variable buff: ...; -- array (0 to 15) begin for i in 15 downto 1 loop buff(i):=buff(i-1); end loop; buff(0):=data_in; sum:=0; for i in 0 to 15 loop sum := sum + buff(i) * coeff(i); end loop; x <= sum; wait on sys_clk until sys_clk=’1’; end process; I207 - Digitaalloogika ja -süsteemid - L7

  28. -- gcd - greates common denominator -- - suurima ühisteguri leidmine -- bit16 = integer range -- -(2**16) to 2**16-1 entity gcd is port (xi, yi : in bit16; rst : in bit; ou : out bit16; clk : in bit); end gcd; architecture behavior of gcd is begin process variable x,y: bit16; begin wait on clk until clk='1' and (rst = '0'); x := xi; y := yi; while (x /= y) loop if (x < y) then y:=y-x; else x:=x-y; end if; end loop; ou <= x; end process; end behavior; Näide ohtlikust koodist… I207 - Digitaalloogika ja -süsteemid - L7

More Related