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
HDL mindset & RTL coding style
László Lajkó
Design migration from ASIC to FPGA | EHUG 2012 | 2012-04-16 | Page 2
Bemutatkozás
› Lajkó László› [email protected]
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
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
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
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
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
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
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
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
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
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
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;
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;
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;
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;
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;
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;
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;
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’;
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
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
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ó
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
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
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
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
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
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
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ú
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
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
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
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
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;
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;
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);
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;
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;
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;
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
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