1 / 254

Увод у VHDL

Увод у VHDL. Увод. Строго типизиран. Није case sensitive . Основни елементи: библиотека : LIBRARY naziv_ biblioteke; USE naziv_biblioteke.naziv_paketa.deo_paketa; ентитет: ENTITY naziv_entiteta IS port( lista_portova); END [ENTITY][naziv_entiteta] архитектура:

osgood
Download Presentation

Увод у VHDL

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. Увод у VHDL

  2. Увод • Строго типизиран. • Није case sensitive. • Основни елементи: • библиотека: LIBRARY naziv_biblioteke; USE naziv_biblioteke.naziv_paketa.deo_paketa; • ентитет: 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];

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

  4. Коментари • Коментар до краја реда почиње са -- • -- Ovo je komentar • Стандард VHDL-2008 уводи и коментар у више редова • /* Ovo je komentar u vise redova*/

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

  6. Примери • Исправни: • а • а0 • а_b • а_b_c • \a____v$324\ -- проширени идентификатор • Неисправни: • a? --недозвољен знак • 0a --не почиње словом • ab_ --завршава се са доњом цртом • a__b --садржи двe узастопне доње црте

  7. Кључне речи

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

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

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

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

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

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

  14. Целобројни типови • Основни: INTEGER (по стандарду минимално 32 бита) • Дефинисање: RANGEizraz( TO I DOWNTO ) izraz • to: растуће уређени бројеви • downto: опадајуће уређени бројеви • Операције: • + сабирање • – одузимање, или негација • * множење • / дељење • mod модуо • rem остатак • abs апсолутна вриједност • ** експонент • Различит тип од бит вектора • Почетна вредност је најмања вредност у скупу

  15. Дефинисање новог типа • type_declaration ⇐ typeidentifikator_tipa is definicija_tipa ; • Примери: type apples is range 0 to 100; type oranges is range 0 to 100; • Типови су различити иако су дефиниције идентичне. • Није дозвољено вредност једног типа доделити променљивој другог типа.

  16. Дефинисање подтипа • subtype_declaration ⇐ subtype identifikatoris subtype_indication ; • subtype_indication ⇐ type_mark [ range simple_expression ( to I downto ) simple_expression ] • Пример: subtypesmall_int is integer range -128 to 127; variablepomeraj : small_int; variablepozicija : integer; • Исправно је и: pozicija := pozicija + pomeraj; • Резултат се може сместити и у објекат подтипа • ако резултат изађе из опсега, пријављује се грешка.

  17. Набројиви типови • Дефинисање набројивог типа typenaziv_tipais(prva_vrednost{,...} ); • Примјер: • typestanje is(spreman, radi, zavrsio); • Погодан за описивање машина стања • Могуће мењати кодирање стања • Напомена: константе истог назива из различитих типова су различите константе.

  18. Физичке величине • Користи се за опис реалних физичких величина • За нас од интереса само време:type time israngeimplementation definedunitsfs;ps = 1000 fs;ns = 1000 ps;us = 1000 ns;ms = 1000 us;sec = 1000 ms;min = 60 sec;hr = 60 min;endunits;

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

  20. 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;

  21. Низови • Дефинисање: TYPE naziv_tipa IS ARRAY(granica[TO|DOWNTO] granica {,...}) OFtip_pojedinačnog_elementa; • Групишу више елемената истог типа заједно • Погодни за опис магистрала: TYPE address_buss IS ARRAY (63 DOWNTO 0) OF std_logic; • Постоје предефинисани типови: • std_logic_vector • bit_vector

  22. 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 • Препоручује се прва варијанта • Не препотставља ништа о представи броја (све мора експлицитно) • Друга је наметнута од стране једне компаније

  23. 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. ...

  24. 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.

  25. numeric_std 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);

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

  27. Типови

  28. Подаци у VHDL • Постоје 3 класе објеката за чување података: • константе • променљиве • сигнали

  29. Константе • Дефинисање:CONSTANTidentifier { , … } : subtype_indication [ := expression ] ; • За сада, израз за почетну вредност сматрамо обавезним. • Примери дефинисања: • constant number_of_bytes : integer := 4; • constant number_of_bits : integer := 8 * number_of_bytes; • constant e : real := 2.718281828; • constant prop_delay : time := 3 ns; • constant size_limit, count_limit : integer := 255;

  30. Променљиве • Декларисање:VARIABLEidentifier { , … } : 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;

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

  32. Сигнали • Концепт који је осмишљен да би се описале везе које постоје у реалним системима. • Битно се разликују од променљивих. • Дефинисање сигнала: • SIGNAL identifikator {,...}: tip [register|bus] [:=izraz]; • Израз за почетну вредност битан само при симулацији; при синтези се одбацује

  33. Додела вредности сигналу • Битно се разликује од доделе вредности променљивој: • Додела вредности није тренутна – у току симулационог циклуса вредност сигнала се не мења. • Дифинише се трансакција: • вредност и • тренутак када сигнал треба да добије задату вредност. • Више сигнала може у истом тренутку променити вредност. • Свака нова трансакција брише све трансакције заказане за исти или наредни тренутак за дати сигнал • Врсте исказа за доделу вредности сигналу: • секвенцијална, • конкурентна.

  34. Сигнали vs. Променљиве

  35. Ентитет • entity identifier is [ generic ( generic_list ) ;] [ port (port_interface_list ) ; ] { entity_declarative_item }end [ entity ] [ identifier ] ; • interface_list ⇐ ( identifier { , … } : [ mode ] subtype_indication [ := expression ] ) { ; … } • mode ⇐ in I out I buffer I inout • Декларативни део ентитета је заједнички за све имплементације (архитектуре).

  36. Архитектура • 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

  37. Конкурентна додела вредности сигналу • Постоје 3 врсте: • Додела једног фиксног израза • Додела једног од више израза: • Селекциона додела вредности • Условна додела вредности

  38. Конкурентна додела фиксног израза • Додела вредности сигналу као исказ у телу архитектуре. • Синтакса: [label:] (name|aggregate) <= [delay_mechanism] waveform delay_mechanism <= transport |[reject time_expression] inertial waveform <= (value_expression [after time_expression] | null [after time_expression]) {,...} |unaffected • Извршава се увек када дође до догађаја на неком од сигнала који учествују у изразу за израчунавање нове вриједности. • Генерише се комбинациона логика.

  39. Пример • entity mux isport(d0, d1, d2, d3, sel0, sel1:in bit; z:out bit);end entity; • architecture dataflow of mux isbeginzmux: z <= (d0 and not sel1 andnotsel0)or(d1 and not sel1 and sel0) or(d2 and sel1 and not sel0)or(d3 and sel1 and sel0);end architecture;

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

  41. Селекциона додела вредности • with expression select[?] name <= [delay_mechanism] {waveform when choices, } waveform when choices; • Погодно када нова вредност зависи од вредности неког конкретног израза. • Опциони упитник има исту улогу као испред релационих оператора. • Примерalu: with alu_function selectresult <= 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;

  42. Пример • entity mux isport(d0, d1, d2, d3:in bit;sel:in bit_vector(1 downto 0);z:out bit);end entity; • architecture dataflow of mux isbeginwith sel selectz <= d0 when "00",d1 when "01",d2 when "10",d3 when "11";end architecture;

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

  44. Условна додела вредности • name <= [delay_mechanism] {waveform whenboolean_expression else } waveform [whenboolean_expression]; • Погодно када се услов не може за сваки случај добити поређењем вредности једног израза са неком вредношћу. • Приоритетно испитивање услова; додељује се прва вредност код које је услов тачан и прекида се даље испитивање преосталих услова.Примјерzmux: 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';

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

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

  47. Конкурентна додела вредности и секвенцијална логичка кола? • Претходни примери:Условна и селекциона додела вредности се синтетизују као комбинациона логичка кола • У свим условима генерисана нова вриједност за сигнал Z. • Уколико се догоди да при се промени неког улазног сигнала не дефинише нова вриједност сигнала Z, алати ће претпоставити да вриједност треба да остане неизмењена; • Пошто се може догодити да то није била жеља дизајнера, алат ће дизајнера информисати о томе • Вероватно ће бити генерисано упозорење да меморијски елементи можда неће радити како треба, зашто?

  48. Пример – секвенцијално коло • entity mux isport(d0, d1, d3:in bit; sel0, sel1:in bit; z:out bit);end entity; • architecture dataflow of mux isbeginz <= 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;

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

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

More Related