Presentation is loading. Please wait.

Presentation is loading. Please wait.

Увод у VHDL.

Similar presentations


Presentation on theme: "Увод у VHDL."— Presentation transcript:

1 Увод у VHDL

2 Главне особине Језик за опис хардвера (hardware description language)
Строго типизиран. Није case sensitive. Основне јединице дизајна (design units): ентитет (entity) архитектура (architecture) конфигурација (configuration) пакет (package) тело пакета (package body)

3 Ентитет и архитектура entity naziv_entiteta is port( lista_portova );
end ⟦ entity ⟧ ⟦ naziv_entiteta ⟧; architecture naziv_arhitekture of naziv_ent is deklarativna_sekcija begin konkurentni_iskazi end ⟦ architecture ⟧ ⟦ naziv_arhitekture ⟧;

4 Лексички елементи Коментари Идентификатори Кључне речи
Специјални симболи Бројеви Карактери Стрингови Бит стрингови

5 Коментари Коментар до краја реда почиње са --
-- ovo je komentar u jednom redu Стандард VHDL-2008 уводи и коментар у више редова /* ovo je komentar u vise redova*/

6 Идентификатори Идентификатори: Проширени идентификатори:
могу садржати мала и велика слова, бројеве и доњу црту "_", морају почети словом, не смeју се завршити доњом цртом, не смeју садржати доњу црту два пута узастопно. Проширени идентификатори: уведени са стандардом VHDL-93, пишу се између карактера \ могу да садрже све карактере.

7 Пример Исправни идентификатори: Неисправни идентификатори: а а0 а_b
а_b_c \a____v$324\ -- prosireni identifikator Неисправни идентификатори: a? nedozvoljen znak 0a ne pocinje slovom ab_ --zavrsava se donjom crtom a__b --sadrzi dve uzastopne donje crte

8 Кључне речи

9 Специјални симболи Један карактер: Више карактера:
" # & ' ( ) * , . / : ; < = > ? @ [ ] ` | Више карактера: ** => := /= >= <= <> ?? ?= ?/= ?> ?< ?>= ?<= << >>

10 Целобројни литерали Декадне константе:
-32 је комбинација оператора '-' и константе 32 Декадне константе са експонентом: 10е2 12Е14 експонент је ненегативан цeо број Константе у основи из опсега од 2 до 16: бинарна: 2# # = 2#1#е12 октална: 8#12000# = 8#12#Е3 хексадесимална: 16#F1A# = 16#f1a#е0 Раздвајање цифара помоћу доње црте (ради прегледности): 2_150_252 2#1100_0101_1010#

11 Реални литерали Декадне реалне константе:
Декадне реалне константе константе са експонентом: 1.0е Е-14 експонент је цeо број Реалне константе у основи из опсега од 2 до 16: бинарна: 2# # = 2#1.0#е12 октална: 8#1200.0# = 8#1.2#Е3 хексадецимална: 16#F1.A# = 16#f1.a#е0

12 Знаковни литерали и литерали стрингова
Знаковни литерали и литерали стрингова Знакови: 'а', 'А', '1', ... Стрингови: "Pera" "Mika" "Tekst ""pod"" dvostrukim navodnicima" Оператор & служи за надовезивање стрингова

13 Бит стрингови Стрингови који описују бинарне вредности.
Садрже само цифре у одговарајућој основи. Бројевни системи: бинарни: B" ", B"0010_0110" октални: О"1532" хексадецимални: Х"a3b5" декадни: D"123" (подржано тек у стандарду VHDL-2008)

14 Типови података VHDL је строго типизиран језик. Тип дефинише:
скуп вредности могуће операције Скаларни типови: цели бројеви реални бројеви физичке величине типови којима се описује један бит знакови набројиви логички Сложени типови: фајлови низови записи

15 Целобројни типови integer_type_definition ⇐
range simple_expr ⦅ to | downto ⦆ simple_expr; Растуће уређени бројеви (to) Опадајуће уређени бројеви (downto) Операције: + сабирање – одузимање, или негација * множење / дељење mod модуо rem остатак abs апсолутна вредност ** експонент Различит тип од бит вектора.

16 Декларација новог типа
type_declaration ⇐ type identifier is type_definition; Пример: type apples is range 0 to 100; type oranges is range 0 to 100; Типови су различити иако су дефиниције идентичне. Није дозвољено вредност једног типа доделити променљивој другог типа (строго типизиран језик).

17 Декларација подтипа Пример: Исправно је написати:
subtype_declaration ⇐ subtype identifier is subtype_indication; subtype_indication ⇐ type_mark ⟦ range simple_expr ⦅ to | downto ⦆ simple_expr ⟧ Пример: subtype small_int is integer range -128 to 127; variable pomeraj : small_int; variable pozicija : integer; Исправно је написати: pozicija := pozicija + pomeraj; Резултат се може сместити и у објекат подтипа (ако резултат изађе из опсега, пријављује се грешка).

18 Набројиви типови Пример: Погодан за описивање машина стања.
enumeration_type_declaration ⇐ type naziv_tipa is ( prva_vrednost ⦃,...⦄ ); Пример: type stanje is (spreman, radi, zavrsio); Погодан за описивање машина стања. Могуће мењати начин кодирања стања. Напомена: константе истог назива из различитих типова су различите константе.

19 Набројиви типови Где је лакше пратити вредности?
type state is (ONE, TWO, THREE); subtype state is integer range 1 to 3; Где је лакше пратити вредности?

20 Физичке величине Користи се за опис реалних физичких величина.
За нас од интереса само време: type time is range implementation defined units fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; sec = 1000 ms; min = 60 sec; hr = 60 min; end units;

21 Битови Предефинисани набројиви тип са могућим вредностима:
'0' '1' Дефинисане су стандардне логичке операције: and or not xor ...

22 std_logic Скуп могућих вредности: 'U' – неиницијализовано
'X' – строго непознато '0' – строго 0 '1' – строго 1 'Z' – стање високе импедансе 'W' – слабо непознато 'L' – слабо 0 'H' – слабо 1 '-' – није битно Ретко се користе све вредности Велики скуп различитих вредности боље моделује понашање реалног система олакшава детектовање и уклањање грешака За проверу поклапања нивоа испред релационих оператора додати упитник. Тачно је: '0' /= 'L' , али и '0' ?= 'L' На почетку сваког фајла неопходно укључити IEEE библиотеку: library ieee; use ieee.std_logic_1164.all;

23 Низови Групишу више елемената истог типа заједно
array_type_declaration ⇐ type naziv_tipa is array( granica ⦅ to | downto ⦆ granica ⦃,...⦄ ) of tip_pojedinacnog_elementa; Групишу више елемената истог типа заједно Погодни за опис магистрала: type addr_bus is array (63 downto 0) of std_logic; Постоје предефинисани типови: std_logic_vector bit_vector

24 std_logic_vector Не постоји нумеричка интерпретација std_logic_vector типа због чега: не постоје аритметичке операције за овај тип сигнали std_logic_vector типа не могу да се користе као индекси низова Решење: користити пакете из библиотека ieee.numeric_std и ieee.numeric_bit користити пакете из библиотека ieee.std_logic_arith и ieee.std_logic_unsigned и ieee.std_logic_signed препоручује се прва варијанта јер не претпоставља ништа од представи број (све мора да се наведе експлицитно)

25 numeric_std type unsigned is array (natural range <>) of std_logic; type signed is array (natural range <>) of std_logic; Id: A.3 function "+" (L,R: unsigned) return unsigned; -- result subtype: -- unsigned(max(L‘length, R‘length)-1 downto 0). -- result: Adds two unsigned vectors -- that may be of different lengths.

26 numeric_std Id: D.1 function to_integer (ARG: unsigned) return natural; -- result subtype: natural. Value cannot be negative -- since parameter is an unsigned vector. -- Result: Converts the unsigned vector -- to an integer.

27 numeric_std Конверзија између unsigned и std_logic_vector:
signal reg : std_logic_vector(7 downto 0); signal reg_unsigned : unsigned(7 downto 0); Конверзија између unsigned и std_logic_vector: reg_unsigned <= unsigned(reg); reg <= std_logic_vector(reg_unsigned);

28 numeric_std - конверзија

29 Типови

30 Објекти у VHDL Постоје три класе објеката за чување података:
константе променљиве сигнали

31 Константе За сада, израз за почетну вредност сматрамо обавезним.
constant_declaration ⇐ constant identifier ⦃,...⦄ : subtype_indication ⟦ := expression ⟧ ; За сада, израз за почетну вредност сматрамо обавезним. Примери дефинисања: constant num_of_bytes : integer := 4; constant num_of_bits : integer := 8 * num_of_bytes; constant e : real := ; constant prop_delay : time := 3 ns; constant size_limit, count_limit : integer := 255;

32 Променљиве Користе се у процесима, потпрограмима и функцијама Пример:
variable_declaration ⇐ variable identifier ⦃,...⦄ : subtype_indication ⟦ := expression ⟧ ; Користе се у процесима, потпрограмима и функцијама свака променљива сме бити видљива и коришћена у само једном процесу (осим дељених). Пример: variable index : integer := 0; variable sum, average, largest : real; variable start, finish : time := 0 ns; Последња линија је еквивалентна са: variable start : time := 0 ns; variable finish : time := 0 ns;

33 Додела вредности променљивој
simple_variable_assignment ⇐ promenljiva := izraz; Увек секвенцијални исказ Израз мора бити истог типа као и променљива Променљиве тренутно добијају нову вредност променљива може и у оквиру истог симулационог циклуса да промени вредност више пута, све промене су видљиве и у текућем симулационом циклусу.

34 Сигнали signal_declaration ⇐ signal identifier ⦃,...⦄ : subtype_indication ⟦ register | bus ⟧ ⟦ := expression ⟧; Израз за почетну вредност битан само при симулацији (при синтези се најчешће одбацује). Концепт који је осмишљен да би се описале физичке везе које постоје у реалним системима. Битно се разликују од променљивих.

35 Додела вредности сигналу
Битно се разликује од доделе вредности променљивој: додела вредности није тренутна (у току симулационог циклуса вредност сигнала се не мења). доделом вредности сигналу дeфинише се трансакција: вредност тренутак када сигнал треба да добије задату вредност. више сигнала може у истом тренутку променити вредност. свака нова трансакција брише све трансакције заказане за исти или наредни тренутак за дати сигнал Врсте исказа за доделу вредности сигналу: секвенцијални, конкурентни.

36 Сигнали vs Променљиве Сигнал Променљива Оператор доделе <= :=
Шта моделује Физичка веза Локална информација Опсег важења Може бити глобалан Локалан Понашање Додела није тренутна у секвенцијалном коду Додела је тренутна Употреба У пакетима, ентитетима и/или архитектурама У секвенцијалним изразима

37 Када шта користити? У већини случајева треба користити сигнале:
они моделује физичке везе операције над сигналима моделују логичке уређаје Променљиве служе само за срачунавање међувредности које се користе на више места. Наведени ставови не представљају ограничење језика, али другачија употреба може да направи више компликација него користи.

38 Ентитет entity identifier is ⟦ generic( generic_list ); ⟧ ⟦ port( port_interface_list ); ⟧ ⦃ entity_declarative_item ⦄ end ⟦ entity ⟧ ⟦ identifier ⟧; port_interface_list ⇐ ⦅ identifier ⦃,...⦄ : ⟦ mode ⟧ subtype_indication ⟦ := expression ⟧ ⦆ ⦃;...⦄ mode ⇐ in | out | buffer | inout Декларативни део ентитета је заједнички за све имплементације (архитектуре). buffer – као out који може и да се чита унутар архитектуре.

39 Архитектура architecture identifier of entity_name is ⦃ block_declarative_item ⦄ begin ⦃ concurrent_statement ⦄ end ⟦ architecture ⟧ ⟦ identifier ⟧; concurrent_statement ⇐ concurrent_signal_assignment_statement | process_statement | block_statement | concurrent_procedure_call_statement | concurrent_assertion_statement | component_instantiation_statement | generate_statement

40 Архитектура Сматрати да се свака конкурентна наредба:
симулира у паралели са свим осталим хардвер ће све функционалности обављати у паралели Никако не покушавати међусобну синхронизацију конкурентих наредби

41 Конкурентна додела вредности сигналу
Постоје 3 врсте конкурентних додела вредности сигналу: додела једног фиксног израза додела једног од више израза: селекциона додела вредности условна додела вредности

42 Конкурентна додела фиксног израза
Додела вредности сигналу као исказ у телу архитектуре. concurrent_simple_signal_assignment ⇐ ⟦label:⟧ ⦅name|aggregate⦆ <= ⟦delay_mechanism⟧ waveform; delay_mechanism ⇐ transport | ⟦ reject time_expression ⟧ inertial waveform ⇐ ⦅ value_expression ⟦ after time_expression ⟧ | null ⟦ after time_expression ⟧ ⦆ ⦃,...⦄ | unaffected Извршава се увек када дође до догађаја на неком од сигнала који учествују у изразу за израчунавање нове вредности. Генерише се комбинациона логика.

43 Пример entity mux is port( d0, d1, d2, d3 : in bit;
sel0, sel1 : in bit; z : out bit ); end entity mux; architecture dataflow of mux is begin zmux_label : z <= (d0 and not sel1 and not sel0) or (d1 and not sel1 and sel0) or (d2 and sel1 and not sel0) or (d3 and sel1 and sel0); end architecture dataflow;

44 Синтетизовани модел

45 Конкурентна селекциона додела вредности
concurrent_selected_signal_assignment ⇐ with expression select⟦?⟧ ⦅ name|aggregate ⦆ <= ⟦ delay_mechanism ⟧ ⦃ waveform when choices, ⦄ waveform when choices; Погодно када нова вредност сигнала зависи од вредности неког конкретног израза. Опциони упитник има исту улогу као испред релационих оператора. Пример: alu_label : with alu_function select alu_result <= a + b after Tpd when alu_add | alu_add_unsigned, a - b after Tpd when alu_sub | alu_sub_unsigned, a and b after Tpd when alu_and, a or b after Tpd when alu_or, a after Tpd when alu_pass_a; Морају да се покрију све варијанте...

46 Пример entity mux is port(
d0, d1, d2, d3 : in bit; sel : in bit_vector(1 downto 0); z : out bit ); end entity mux; architecture dataflow of mux is begin with sel select z <= d0 when "00", d1 when "01", d2 when "10", d3 when "11"; end architecture dataflow;

47 Синтетизован модел

48 Конкурентна условна додела вредности
concurrent_conditional_signal_assignment ⇐ ⦅ name|aggregate ⦆ <= ⟦ delay_mechanism ⟧ ⦃ waveform when boolean_expression else ⦄ waveform ⟦ when boolean_expression ⟧; Погодно када се услов не може за сваки случај добити поређењем вредности једног израза са неком вредношћу. Приоритетно испитивање услова; додељује се прва вредност код које је услов тачан и прекида се даље испитивање преосталих услова. Пример: zmux_label : z <= d0 when sel1 = '0' and sel0 = '0' else d1 when sel1 = '0' and sel0 = '1' else d2 when sel1 = '1' and sel0 = '0' else d3 when sel1 = '1' and sel0 = '1';

49 Синтетизован модел

50 Алат за синтезу Алат може радити оптимизацију на нивоу Булових једначина. Када се утврди да не постоји могућност да контролни пин леча са претходног слајда не буде активан, дати леч се у коначној имплементацији избацује. Гранични случај (ентитет без излазних сигнала): entity dummy is port ( clk : in std_logic; rst : in std_logic ); end entity dummy; Коначна имплементација:

51 Упоредни приказ претходна 3 синтетизована модела

52 Конкурентна додела вредности и секвенцијална логичка кола?
У оквиру претходних примера конкурентна условна и конкурентна селекциона додела вредности сигналу се синтетизују као комбинациона логичка кола у свим случајевима генерисана нова вредност за сигнал z. Уколико се приликом промене било ког улазног сигнала не дефинише нова вредност сигнала z, алат ће претпоставити да вредност сигнала z треба да остане неизмењена пошто се може догодити да то није била жеља дизајнера, алат ће дизајнера информисати о томе вероватно ће бити генерисано упозорење да меморијски елементи можда неће радити како треба (зашто?) Ако се секвенцијална логика формира на начин описан на датом слајду, у израчунавању нове вредности ће учествовати сигнал који учествује и у израчунавању такта меморијског елемента те то може за резултат дати непредвидиву вредност. Пример дат на наредном слајду.

53 Пример – секвенцијално коло
entity mux is port( d0, d1, d3 : in bit; sel0, sel1 : in bit; z : out bit ); end entity mux; architecture dataflow of mux is begin z <= d0 when sel1 = '0' and sel0 = '0' else d1 when sel1 = '0' and sel0 = '1' else d2 when sel1 = '1' and sel0 = '0' else d3 when sel1 = '1' and sel0 = '1'; end architecture dataflow;

54 Синтетизовани модел – RTL поглед

55 Синтетизовани модел – технолошки поглед


Download ppt "Увод у VHDL."

Similar presentations


Ads by Google