1 / 43

H DL mindset & R TL coding style

H DL mindset & R TL coding style. L á szl ó Lajk ó. Bemutatkozás. Lajkó László laszlo.lajko @ericsson.com. Tartalom. HDL és imperatív nyelvek közötti különbségek C <-> VHDL, verilog Digitális rendszerek felépítése Tipikus HDL hibák Digitális HW építőelemei RTL kódolási stílus.

zita
Download Presentation

H DL mindset & R TL coding style

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. HDL mindset &RTL coding style László Lajkó

  2. Bemutatkozás • Lajkó László • laszlo.lajko@ericsson.com

  3. Tartalom • HDL és imperatív nyelvek közötti különbségek • C <-> VHDL, verilog • Digitális rendszerek felépítése • Tipikus HDL hibák • Digitális HW építőelemei • RTL kódolási stílus

  4. HDL nylevek es imperatív nyelvek közötti fő különbség • C-ben az utasitasokat a processzor hajtja vegre • Végrehatás sorról sorra • Verilog-ban digitalis HW-t irunk le • Párhuzamos működés • NEM SW • Időben párhuzamos, konkurrens működést írunk le

  5. HDL nylevek es imperatív nyelvek közötti fő különbség • HDL-ben moduláris-hierarchikus felépítés • Entity ~ class (csak analógia nincs egymáshoz közük) • Input/Output definíciók • Egy entitás tetszőleges számban példányosítható • Nem szubrutin • Mindegyik példány önálló HW saját erőforrásokkal • Cél a feladat partícionálása • Az egyes példányok az interfészen keresztül kommunikálnak • Minden példány párhuzamosan működik

  6. HDL nylevek es imperatív nyelvek közötti fő különbség • HDL-ben különbséget kell tenni szintetizálható és nem szintetizálható nyelvi elemek között • Kevés nyelvi elem szintetizálható • A HDL nyelvek jelentős része csak a HW funkciók modellezésére illetve szimulációra használható • Mindig HW-ben kell gondolkozni • Minden esetben tudnunk kell előre, hogy mi szintetizálódik a leírásunkból

  7. Digitális HW általános felépítése • A digtális hálózatunk alapvetően két részből áll • Kombinációs hálózat • Regiszter

  8. Digitális HW általános felépítése • Szinkron rendszer • Egy közös órajel az egész rendszerben • Csak az órajel élére tötrénik változás • Lassabb működés esetén Clock Enable • Az órajel kapuzása tilos

  9. Digitális HW általános felépítése • Tárolóelemek: szintérzékeny latch • TCQ min / TCQ max a latch nyitásakor a kimenet beállási ideje • TDQ min / TDQ max a nyitott latch terjedési ideje • Tsetup / Thold a latch helyes működéséhez szükséges előkészítési és tartási időablak a zárás körül

  10. Digitális HW általános felépítése • Tárolóelemek: élérzékeny D flip flop • TCQ min / TCQ max a kimenet beállási ideje az órajel felfutó élét követően • Tsetup / Thold a helyes működéséhez szükséges előkészítési és tartási időablak az órajel aktív éle körül

  11. Digitális HW általános felépítése • Élvezérelt szinkron rendszer esetén az időzítést meghatározzák: • tárolóelemek paraméterei • huzalozás • logikai kapuk terjedési ideje • Gyors jelutak esetén technológiai korlát • TCQ min + T prop min > Thold • Lassú jelutak miatt működési sebesség korlát • Tclock > TCQ max + T prop max + Tsetup

  12. Digitális HW általános felépítése • Az órajelnek is van terjedési ideje a rendszerben • Az órajel élének helyfüggő csúszása a skew • FPGA-ban globális/lokális órajel hálozat használata minimalizálja a skew-t • Az órajel élének időfüggő időbeli ingadozása a jitter • Jó minőségű kvarc oszcillátor használata • Zajmentes tápegység és föld hálózat • A skew és a jitter csökkenti a rendszer maximálisan elérhető sebességét: • Tclock > TCQ max + T prop max + Tsetup + Tskew + Tjitter

  13. Processzben órajelkét használni egy logikai jelet Miért rossz ez? Példa? Hogyan detektáljuk egy jel felfutó élét? Hogyan detektáljuk egy jel lefutó élét? Hogyan detektáljuk egy jel élét? wrong_proc: process (signal, rst) begin if (rst = '0') then a <= (others=>'0'); elsif rising_edge(signal) then a <= c or b; end if; end process: wrong_proc; Tipikus HDL hibák

  14. Órajel kapuzása Miért rossz ez? Példa? wrong_proc: process (signal, clk) begin out <= signal or clk end process: wrong_proc; Tipikus HDL hibák

  15. Nem teljes if szerkezet kombinációs processzben Miért rossz ez? Példa? Hogyan védjük ki a gyakorlatban? wrong_proc: process (sig1, sig2) begin if(sig1 = ‘1’) out <= sig1 and sig2; end if; end process: wrong_proc; Tipikus HDL hibák

  16. Nem teljes case szerkezet kombinációs processzben Miért rossz ez? Példa? Hogyan lehet kijavítani? wrong_proc: process (sig) case sig is when“00” => out <= “11”; when“01” => out <= “11”; end case; end process: wrong_proc; Tipikus HDL hibák

  17. Case szerkezetben nem kap értéket a signal minden esetben Miért rossz ez? Példa? Hogyan lehet kijavítani? wrong_proc: process (sig) case sig is when“00” => out1 <= “11”; when“01” => out2 <= “11”; when others => out1 <= “00”; end case; end process: wrong_proc; Tipikus HDL hibák

  18. Túl mély if szerkezet Miért rossz ez? Példa? Hogyan lehet kijavítani? wrong_proc: process (sig1, sig2, sig3…) if(sig1=‘1’) then if(sig2=‘0’) then if… … end if; end if; end process: wrong_proc; Tipikus HDL hibák

  19. Wait és after használata szintetizálható kódban Miért rossz ez? wait for5 ns; a <= b after10 ns; Tipikus HDL hibák

  20. Inicializálás használata Nem nagy hiba Használjunk inkább resetet az adott signal-ra signal a : std_logic := ‘0’; Tipikus HDL hibák

  21. Tipikus HDL hibák • Túl nagy bit szélességű számok összeadása • Befolyásolja a maximális elérhető órajelet • Timing violation-hoz vezethet adott órajel esetén • Timing violation figyelmen kívül hagyása esetén random rossz működést eredményez

  22. Tipikus HDL hibák • Headroom hiánya fix pontos számok összeadása esetén • B > Log2 n számú (B egész szám) extra bit szükséges • Ha nincs elég headroom akkor túlcsordulás következhet be bizonyos bemeneti adatokra

  23. Tipikus HDL hibák • Külünböző órajel tartományok közötti jelátvitel • Nagyon veszélyes hibákat okoz • Lehetőleg kerüljük • Lehet-e más megoldást alkalmazni pl clock enable • Ha nem elkerülhető akkor a legnagyobb körültekintéssel végezzük el • Következő előadáson lesz róla szó

  24. Clock Domain Crossing • CDC: órajel tartományok közötti „átlépés” • GALS rendszerek:Globally Asynchronous Locally Sychronous Systems • A különböző órajel tartományokon belül szinkron tervezési módszerek • Szimulációval ellenőrizhető • Probléma: a külvilág nem része a szinkron rendszernek • Bemenetekre setup time specifikáció • Kimenetekre terjedési idő specifikáció • Az órajeltartományok lehetnek: • Teljesen független aszinkron tartományok • Egymással racionális tört arányban álló tartományok

  25. Clock Domain Crossing • Ha nem tartjuk be a setup és hold követelményeket a FF-re • A Flip-Flop nem tartja be az adatlapjában megadott időzítési feltételeket • Lassabb reakcióidő • Kimenet értéke véletlenszerű • Metastabil állapot • A metastabil állapot elvileg nem kizárható, de előfordulási valószínűsége csökkenthető • Megoldás szinkronizáló FF-ek alkalmazása • Nagy frekvenciákon 3x 4x szinkronizáló FF

  26. Clock Domain Crossing • Jel átadása az órajel tartományok között: • Statikus jel átadása • Dinamikus jel átadása (pulzus) • Lassabb tartományból a gyorsabba • Gyorsabb tarományból a lassabba • lehetséges? • Mi történik ha nem törődünk a CDC-vel? • Metastabil állapot – rossz logikai működés • Pulzusok veszhetnek el • Elveszítjük a jelek közötti korrelációt

  27. Clock Domain Crossing • Statikus jel átadása : • Legegyszerűbb eset • DE a késleltetés nem determinisztikus • Szinkronizáló FF-ek, az FF-ek között nem lehet logika

  28. Clock Domain Crossing • Dinamikus jel átadása : • Ha csak szinkronizáló FF-et használunk a dinamikus jel elveszhet • Pulse to toggle – Toggle to pulse megoldás • Kétirányú nyugtázásos kapcsolat • Több adat átadása • Az adatokat a forras oldalon adat érvényes jellel látjuk el • A vevő oldalon átvesszük az adatokat • Nyugtázzuk a kommunikációt • Lehetőleg használjunk FIFO-t vagy block RAM-ot órajel tartományok közötti váltásra • Ha van az FPGA tool-ban felhasználható FIFO primitív használjuk azt

  29. Tipikus HDL hibák • Túl hosszú kombinációs hálózat • Például több aszinkron process használja egymás kimenetét kaszkádban • Befolyásolja a maximális elérhető órajelet • Timing violation-hoz vezethet adott órajel esetén • Timing violation figyelmen kívül hagyása esetén random rossz működést eredményez

  30. Tipikus HDL hibák • Az if utasítás hierarchikus, a case nem • If-else-if utasításban a legelőször vizsgált feltétel az erősebb • Case esetén minden feltétel egyenrangú

  31. Tipikus HDL hibák • Reset aszinkron meghúzás szinkron elengedés szükséges • Ellenkező esetben setup violation lehetséges

  32. Tipikus HDL hibák • FPGA-ban hibás DCM kaszkádosítás • Az első DCM locked jelét be kell építeni a második DCM reset feltételébe • Ha nem figyelünk random hibákat okozhat a design bármely részén

  33. Tipikus HDL hibák • FPGA-ban hibás DCM használat • A design-t resetben kell tartani, amíg az órajelét előállító DCM nem lockolt

  34. Tipikus HDL hibák • Kapcsolók, nyomógombok pergésmentesítése • Megnyomáskor a nyomógomb a két állapot között változik • Elmulasztása esetén nem várt működés

  35. Register Inkább a (rising_edge(C)) konstrukciót használjuk Hogyan valósítsunk meg aszinkron törlést? Hogyan valósítsunk meg szinkron törlést? Hogyan valósítsunk meg clock enable-t? entity dff is port( C, D : in std_logic; Q : out std_logic ); end dff; architecture rtl of dff is begin process (C) begin if (C’event and C=’1’) then Q <= D; end if; end process; end rtl; A digitális HW építőelemei

  36. Tri-state entity three_st is port( T : in std_logic; I : in std_logic; O : out std_logic); end three_st; architecture rtl of three_st is begin process (I, T) begin if (T=’0’) then O <= I; else O <= ’Z’; end if; end process; end rtl; A digitális HW építőelemei

  37. Counter Asznkron reset Szinkron enable Szinkron load Szinkron fel/le számlálás signal cnt : unsigned(width-1 downto 0); counter: process (CLK, RST) begin if (RST = '0') then cnt <= (others=>'0'); elsif rising_edge(CLK) then if (EN = '1') then if (LD = '1') then cnt <= Unsigned(DATA); else if (UPDN = '1') then cnt <= cnt + 1; else cnt <= cnt - 1; end if; end if; end if; end if; end process counter; Q <= std_logic_vector(cnt); A digitális HW építőelemei

  38. Shift register Balra shiftel Szinkron set Soros be/kimenet library ieee; use ieee.std_logic_1164.all; entity shreg is port( C, SI, S : in std_logic; SO : out std_logic); end shreg; architecture rtl of shreg is signal tmp: std_logic_vector(7 downto 0); begin process (C, S) begin if (C’event and C=’1’) then if (S=’1’) then tmp <= (others => ’1’); else tmp <= tmp(6 downto 0) & SI; end if; end if; end process; SO <= tmp(7); end rtl; A digitális HW építőelemei

  39. Multiplexer 4 to 1 bit mux library ieee; use ieee.std_logic_1164.all; entity mux is port ( a, b, c, d : in std_logic; s : in std_logic_vector (1 downto 0); o : out std_logic); end mux; architecture rtl of mux is begin process (a, b, c, d, s) begin if (s = "00") then o <= a; elsif (s = "01") then o <= b; elsif (s = "10") then o <= c; else o <= d; end if; end process; end rtl; A digitális HW építőelemei

  40. FSM 3 process type state_type is (s1,s2,s3,s4); signal state, next_state: state_type; process1: process (clk, reset) begin if (reset =’1’) then state <= s1; elsif (clk = ’1’ and clk’Event) then state <= next_state; end if; end process process1; process2 : process (state, x1) begin case state is when s1 => if x1=’1’ then next_state <= s2; else next_state <= s3; end if; when s2 => next_state <= s4; when s3 => next_state <= s4; when s4 => next_state <= s1; end case; end process process2; process3 : process (state) begin case state is when s1 => outp <= ’1’; when s2 => outp <= ’1’; when s3 => outp <= ’0’; when s4 => outp <= ’0’; end case; end process process3; A digitális HW építőelemei

  41. RTL kódolási stílus • Register Transfer Level kódolási stílus • A korábban bemutatott hibák elkerülésére szükség van egy szigorú stílusra • Kezdőknek érdemes ebben a stílusban fejleszteni • Haladók tudatosan elérhetnek tőle

  42. RTL kódolási stílus • Szigorúan el kell különíteni a kombinációs hálózatot és a regisztereket • Entitásonként csak egy órajelre járó process, ami D flip flopokat tartalmaz • Kombinációs process-ben csak a flip flopok “D” bemenetei kaphatnak értéket • Kombinációs process-ben csak a registerek “Q” kimeneti értékei használhatóak fel • 3 processes state machine • A fentebb bemutatott építőelemek használhatóak

More Related