43
HDL mindset & RTL coding style László Lajkó

H DL mindset & R TL coding style

  • Upload
    zita

  • View
    40

  • Download
    0

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: H DL  mindset & R TL coding style

HDL mindset & RTL coding style

László Lajkó

Page 2: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 2

Bemutatkozás

› Lajkó László› [email protected]

Page 3: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 4: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 5: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 6: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 7: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 8: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 9: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 10: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 11: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 12: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 13: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 13

Tipikus HDL hibák

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

Page 14: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 14

Tipikus HDL hibák

› Órajel kapuzása› Miért rossz ez?› Példa?

wrong_proc: process (signal, clk)

begin

out <= signal or clk

end process: wrong_proc;

Page 15: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 15

Tipikus HDL hibák

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

Page 16: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 16

Tipikus HDL hibák

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

Page 17: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 17

Tipikus HDL hibák

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

Page 18: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 18

Tipikus HDL hibák

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

Page 19: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 19

Tipikus HDL hibák

› Wait és after használata szintetizálható kódban

› Miért rossz ez?

wait for 5 ns;

a <= b after 10 ns;

Page 20: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 20

Tipikus HDL hibák

› Inicializálás használata › Nem nagy hiba› Használjunk inkább resetet az

adott signal-ra

signal a : std_logic := ‘0’;

Page 21: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 22: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 23: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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ó

Page 24: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 25: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 26: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 27: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 28: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 29: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 30: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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ú

Page 31: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 31

Tipikus HDL hibák

› Reset aszinkron meghúzás szinkron elengedés szükséges

› Ellenkező esetben setup violation lehetséges

Page 32: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 33: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 34: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 35: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 35

A digitális HW építőelemei

› 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 isport( C, D : in std_logic; Q : out std_logic);end dff;architecture rtl of dff isbegin process (C) begin if (C’event and C=’1’) then Q <= D; end if; end process;end rtl;

Page 36: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 36

A digitális HW építőelemei

› Tri-state entity three_st isport( T : in std_logic; I : in std_logic; O : out std_logic);end three_st;architecture rtl of three_st isbegin process (I, T) begin if (T=’0’) then O <= I; else O <= ’Z’; end if; end process;end rtl;

Page 37: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 37

A digitális HW építőelemei

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

Page 38: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 38

A digitális HW építőelemei

› Shift register› Balra shiftel› Szinkron set› Soros be/kimenet

library ieee;use ieee.std_logic_1164.all;

entity shreg isport( 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;

Page 39: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 39

A digitális HW építőelemei

› Multiplexer› 4 to 1 bit mux

library ieee;use ieee.std_logic_1164.all;entity mux isport ( 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 isbeginprocess (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;

Page 40: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 40

A digitális HW építőelemei

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

Page 41: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 42: H DL  mindset & R TL coding style

Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 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

Page 43: H DL  mindset & R TL coding style