Download presentation
Presentation is loading. Please wait.
Published byPreston Neal Modified over 6 years ago
1
Атрибути сигнала sig’event sig’active sig’last_event sig’last_active
-- boolean vrednost koja predstavlja informaciju da li se -- u tekucem simulacionom ciklusu desio dogadjaj na signalu sig sig’event -- boolean vrednost koja predstavlja informaciju da li je -- u tekucem simulacionom ciklusu izvrsena transakcija na signalu sig sig’active -- vremenski period protekao od poslednjeg dogadjaja na signalu sig sig’last_event -- vremenski period protekao od poslednje transkacije na signalu sig sig’last_active -- vrednost signala sig pre poslednjeg dogadjaja (prethodna vrednost) sig’last_value
2
Атрибути сигнала sig’delayed(T) sig’stable(T) sig’quiet(T)
-- signal sig zakasnjen u vremenu za T sig’delayed(T) -- boolean vrednost koja predstavlja informaciju da li -- signal sig nije menjao svoju vrednost u prethodnom intervalu T sig’stable(T) -- nad signalom sig nije izvrsena transakcija u prethodnom intervalu T sig’quiet(T) -- novi signal cija se vrednost menja (iz '0' u '1' i obrnuto) -- svaki put kada se izvrsi transakcija na signalu sig sig’transaction
3
Пример употребе атрибута
Провера да ли је задовољен setup time услов: if (clk'event) and (clk = '1' or clk = 'H') and (clk'last_value = '0' or clk'last_value = 'L') then assert d'last_event >= Tsu report "Timing error: d changed within setup time of clk"; end if;
4
Пример употребе атрибута
Провера да ли је улазни сигнал такта довољно мале фреквенције тј. довољно велике периоде: assert (not clk'event) or clk'delayed'last_event >= Tpw_clk report "Clock frequency too high";
5
Комбинационе vs Секвенцијалне мреже
6
Асинхроне vs Синхроне мреже
Глобално асихнроне мреже сваки меморијски елемент има свој засебан сигнал такта не постоји синхронизација помоћу глобалног сигнала такта Глобално асинхроне локално синхроне мреже Глобално синхроне мреже сваки меморијски елемент активан на ивицу једног истог сигнала такта (global clock signal)
7
Асинхроне мреже Комбинационе мреже са повратним везама
осетљиве на кашњење! Другачији приступ дизајнирању у односу на комбинационе мреже без повратних веза
8
D latch временски параметри
9
D latch library ieee; use ieee.std_logic_1164.all; entity d_latch is port( en : in std_logic; d : in std_logic; q : out std_logic ); end entity d_latch;
10
D latch architecture demo_arch of d_latch is signal q_latch : std_logic; begin process (en, d, q_latch) is if (en = '1') then q_latch <= d; else q_latch <= q_latch; end if; end process; q <= q_latch; end architecture demo_arch;
11
D latch
12
Синхроне мреже Синтеза се своди на синтезу комбинационих мрежа које генеришу сигнал побуде за меморијске елементе. Временска ограничења: један од најтежих проблема, временска анализа захтева само анализу комбинационих мрежа и једне повратне петље. Симулација помоћу циклуса. Тестирање помоћу scan алгоритама.
13
D flip-flop временски параметри
14
D flip-flop library ieee; use ieee.std_logic_1164.all; entity d_ff is
port( clk : in std_logic; d : in std_logic; q : out std_logic ); end entity d_ff;
15
D flip-flop architecture demo_arch of d_ff is begin process (clk) is
if (clk’event and clk = '1') then q <= d; end if; end process; end architecture demo_arch;
16
D flip-flop
17
Register entity register8 is port( clk : in std_logic; reset : in std_logic; d : in std_logic_vector(7 downto 0); q : out std_logic_vector(7 downto 0) ); end entity register8;
18
Register architecture reg of register8 is begin write : process (clk, reset) is if (reset = '1') then q <= (others => '0'); elsif (clk'event and clk = '1') then q <= d; end if; end process write; end architecture reg;
19
Проста секвенцијална кола
20
D flip-flop са Enable сигналом
21
D flip-flop са Enable сигналом
library ieee; use ieee.std_logic_1164.all; entity d_ff is port( clk : in std_logic; reset : in std_logic; en : in std_logic; d : in std_logic; q : out std_logic ); end entity d_ff;
22
D flip-flop са Enable сигналом
architecture demo_arch of d_ff is signal q_reg, q_next : std_logic; begin memory_elements: process (clk, reset) is if (reset = '1') then q_reg <= '0'; elsif (clk’event and clk = '1') then q_reg <= q_next; end if; end process memory_elements; -- next-state logic q_next <= d when en = '1' else q_reg; -- output logic q <= q_reg; end architecture demo_arch;
23
Једноставан Shift register
24
Једноставан Shift register
25
Једноставан Shift register
26
Shift register Посматрани померачки регистар располаже следећим функционалностима (1) учитавање нове вредности, (2) померање вредности улево, (3) померање вредности удесно и (4) задржавање тренутне вредности.
27
Shift register library ieee; use ieee.std_logic_1164.all; entity shift_register is port( clk : in std_logic; reset : in std_logic; ctrl : in std_logic_vector(1 downto 0); d : in std_logic_vector(3 downto 0); q : out std_logic_vector(3 downto 0) ); end entity shift_register;
28
Shift register architecture rtl of shift_register is signal r_reg : std_logic_vector(3 downto 0); signal r_next : std_logic_vector(3 downto 0); begin memory_elements: process (clk, reset) is if (reset = '1') then r_reg <= (others => '0'); elsif (clk'event and clk = '1') then r_reg <= r_next; end if; end process memory_elements;
29
Shift register -- next-state logic with ctrl select r_next <= r_reg when "00", r_reg(2 downto 0) & d(0) when "01", d(3) & r_reg(3 downto 1) when "10", d when others; -- output logic q <= r_reg; end architecture rtl;
30
Препоручен стил за опис секвенцијалних кола
Раздвојити опис секвенцијалних кола у три логичке целине: опис меморијских елемената (flip-flops) опис комбинационих мрежа које генеришу излаз (output logic) опис комбинационих мрежа које генеришу побуду (next-state logic)
31
Алтернатива Могуће је мешање VHDL кода за меморијске елементе и комбинационе мреже у оквиру једног или више процеса. Алтернативни стил писања VHDL кода за опис секвенцијалних кола може чак бити и елегантнији. Алтернативни стил писања VHDL кода за опис секвенцијалних кола у највећем броју случајева може проузроковати неочекиване грешке! Препорука је избегавати алтернативе!
32
Променљиве Могу се користити за моделовање меморијских елемената.
Променљиве су локални подаци унутар процеса. Додела вредности променљивој пре читања вредности: не захтева меморијски елемент. Читање вредности променљиве пре доделе вредности: захтева меморијски елемент, лако се може направити грешка. Најчешћа употреба: смештање међурезултата (без меморијских елемената).
33
Променљиве – пример (1) library ieee; use ieee.std_logic_1164.all; entity variable_demo is port( clk : in std_logic; a : in std_logic; b : in std_logic; q1, q2, q3 : out std_logic ); end entity variable_demo;
34
Променљиве – пример (2) architecture arch of variable_demo is signal tmp_sig1 : std_logic; begin -- atempt 1 process (clk) is if (clk'event and clk = '1') then tmp_sig1 <= a and b; q1 <= tmp_sig1; end if; end process;
35
Променљиве – пример (3) -- atempt 2 process (clk) is variable tmp_var2 : std_logic; begin if (clk'event and clk = '1') then tmp_var2 := a and b; q2 <= tmp_var2; end if; end process;
36
Променљиве – пример (4) -- atempt 3 process (clk) is variable tmp_var3 : std_logic; begin if (clk'event and clk = '1') then q3 <= tmp_var3; tmp_var3 := a and b; end if; end process; end architecture arch;
37
Променљиве – пример (5)
38
Моделовање Како реализовати алгоритам у хардверу?
Две одлике алгоритама: коришћење променљивих, секвенцијално извршавање.
39
Моделовање Пример алгоритма: сабирање 4 броја, дељење резултата са 8,
заокруживање резултата. size = 4; sum = 0; for i in (0 to size – 1) do { sum = sum + a(i); } q = sum / 8; r = sum rem 8; if (r > 3) { q = q + 1; } outp = q;
40
Dataflow моделовање Имплементација алгоритма помоћу VHDL кода:
алгоритам конвертован у комбинациону мрежу, нема меморијских елемената, секвенца је одређена током података (dataflow) кроз мрежу.
41
Dataflow моделовање sum0 <= a(0); sum1 <= sum0 + a(1);
q <= “000” & sum3(8 downto 3); r <= “00000” & sum3(2 downto 0); outp <= q + 1 when (r > 3) else q;
42
Dataflow моделовање
43
Dataflow моделовање Проблеми који се јављају код dataflow моделовања:
лако изводљиво за тривијалне алгоритме, нескалабилно (нпр. промена броја улазних елемената).
44
Register transfer level (RTL) моделовање
Користити регистре за представу променљивих које се јављају у оквиру алгоритма. Користити ток података (dataflow) за реализацију свих регистарских операција. Користити коначне аутомате (аутомате стања) за одређивање редоследа регистарских операција.
45
Register transfer level (RTL) операције
Формални облик: rdest ← f(rsrc1, rsrc2, …, rsrcn) Интерпретација: после посматране узлазне ивице сигнала такта, излази изворишних регистара (rsrc1, rsrc2, …, rsrcn) постају спремни, излази изворишних регистара се прослеђују на улаз комбинационе мреже која врши произвољну функцију f, на прву следећу узлазну ивицу сигнала такта, излаз комбинационе мреже се смешта у дестинациони регистар rdest
46
Register transfer level (RTL) операције
Пример: r ← 1 r ← r r0 ← r1 n ← n - 1 y ← a xor b xor c xor d s ← a2 + b2
47
Register transfer level (RTL) пример имплементације
r1 ← r1 + r2
48
Коначни аутомат (КА) као управљачка јединица
КА се може користити као управљачка јединица за Register Transfer Level (RTL) операције: стања се мењају на сваки сигнал такта, КА може да омогући секвенцијално извршавање, КА дозвољава опције (гранање). Дијаграм тока се може користити за репрезентовање управљачке јединице.
49
Register transfer level (RTL) систем
50
GCD коло – пример (1) Greatest Common Divisor (највећи заједнички делилац). GCD без дељења: gcd(a, b) = a if a = b gcd(a – b, b) if a > b gcd(a, b - a) if a < b
51
GCD коло – пример (2) Псеудо алгоритам: a ← a_in; b ← b_in;
while (a /= b) { if (b > a) then a ← a – b; else b ← b – a; end if } r ← a;
52
GCD коло – пример (3) Модификован псеудо алгоритам: a ← a_in;
b ← b_in; swap: if (a = b) then goto stop; else if (b > a) then a ← b; --swap a and b b ← a; end if; a ← a – b; goto swap; stop: r ← a;
53
Дијаграм тока
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.