1 / 53

VHDL RTL синтеза

VHDL RTL синтеза. Увод. Постоји неколико алата за синтезу које праве различити произвођачи. Они се разликују у скуповима команди и начину на који задајемо ограничења у синтези.

kieve
Download Presentation

VHDL RTL синтеза

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 RTL синтеза

  2. Увод • Постоји неколико алата за синтезу које праве различити произвођачи. • Они се разликују у скуповима команди и начину на који задајемо ограничења у синтези. • Већина прихвата једино дизајн описан на нивоу трансфера међу регистрима (RTL) и генерише кола састављена од логичких гејтова и флип-флопова. • Ове разлике су мотивисале састављање IEEE стандарда 1076.6, Стандард за VHDL Register Transfer Level синтезу.

  3. IEEE 1076.6 • Стандард дефинише подскуп VHDL језика који је „најмањи заједнички садржалац” и који би требало да је прихватљив већини алата за синтезу. • Стандард из 1999. године => користити VHDL-87. • Стандард из 2004. године =>користити VHDL-2002.

  4. Типови података • Стандардом су дозвољени само следећи типови: • Типови набрајања, укључујући предефинисане типове boolean, bit и character. • Целобројни типови, укључујући предефинисане типове integer, natural i positive. • Једнодимензионални низови скалара и предефинисаних типовова bit_vector и string • std_ulogic, std_ulogic_vector, std_logic и std_logic_vector, дефинисани у пакету std_logic_1164 • unsigned и signed, дефинисани у пакету numeric_bit • unsigned и signed, дефинисани у пакету numeric_std

  5. Имплементација скаларних типова • Предефинисани типови boolean и bit, као и стандардни логички типови std_logic и std_ulogic имплементирају се у хардверу као појединачни битови.

  6. Имплементација скаларних типова • Кориснички дефинисана набрајања могу да се имплементирају кодирањем које зависи од алата. • Могуће је и задавање кодирања описујући тип стринг атрибутом enum_encoding: • attribute enum_encoding : string; Пример: type state is (idle, preamble, data, crc, ok, error); attribute enum_encoding of state : type is "000 001 010 011 100 111";

  7. Имплементација скаларних типова • Целобројни типови се имплементирају као вектор битова. • Ако тип обухвата негативне вредности, користи се означено кодирање у комплементу двојке: type sample is range –64to 63; —7-битно кодирање у комплементу двојке subtype table_index is natural range 0 to 1023; — 10-битно неозначено кодирање • Алати који се придржавају стандарда треба да подржавају целе бројеве у опсегу –231 до +231 – 1

  8. Композитни и остали типови – низови • Морају бити једнодимензионални и морају да се индексирају целобројним опсегом. • Границе морају бити статичке. • Тип елемента може бити неки од дозвољених скаларних типова или једнодимензиони вектор типа набрајања који представља појединачне битове.=> Забрањено је коришћење низова које ми дефинишемо у моделу.

  9. Композитни и остали типови – низови Пример: • Следеће је дозвољено: type coeffs is array (3 downto 0) of integer; type channel_states is array (0 to 7) of state; — state је тип набрајања subtype word is bit_vector(31 downto 0); type reg_file is array (0 to 15) of word; • Следеће није дозвољено: type color is (red, green, blue); type plane_status is array (color) of boolean; —тип индекса није целобројни type matrix is array (1 to 3, 1 to 3) of real; —2D, елементи су floating–point типа type reg_file_set is array (0 to 3) of reg_file; — елементи нису вектори битова

  10. Интерпретација стандардних логичких вредности • Синтетизован хардвер ради само са вредностима логичка 0 и логичка 1. • У моделу могу да се користе и друге стандардне вредности - металогичке вредности. • Употребу металогичких вредности пожељно свести на моделовање тростатичких бафера.

  11. Интерпретација стандардних логичких вредности • Када модел сигналу додели стандардну логичку вредност 'Z', алат за синтезу генерише тростатички бафер за тај сигнал. Пример: if request_enable = '1' then request := ready; else request <= 'Z'; end if;

  12. Интерпретација стандардних логичких вредности • Ако се металогичке вредности појаве као операнди у релационим операторима (осим једнакости), аритметичким, логичким и операторима померања, алат за синтезу не би требало да прихвати модел. • У случају једнакости, користити std_match.

  13. Функција std_match • Дефинисана је у пакету numeric_std • Користи се за поређење стандардних логичких вредности и вектора. • Предност је што даје исте резултате и у симулацији и у синтези. То није случај са оператором "=" • Алати за синтезу представљају употребу функције std_match тестом еквиваленције. • Синтеза поређења коришћењем std_match са вектором који садржи "don't care" ('–') елементе производи хардвер за поређење који изоставља "don't care" битове из поређења.

  14. Моделовање комбинационих мрежа • Коришћење наредби за конкурентну доделу сигналу. status <= ready and not limit_exceeded; status <= ready and (sample < limit);

  15. Моделовање комбинационих мрежа • Наредба селекционе конкурентне доделе сигалу. Опис мултиплексера: with addr(1downto0) select request<=request_a when "00", request_b when "01", request_c when "10", request_dwhen "11";

  16. Моделовање комбинационих мрежа • Опис мултиплексера коришћењем наредбе условне доделе сигналу: request <= request_a when addr(1 downto 0) = "00" else request_b when addr(1 downto 0) = "01" else request_c when addr(1 downto 0) = "10" else request_d when addr(1 downto 0) = "11"; • Овде услови не морају бити узајамно искључиви, па би алат за синтезу направио приоритетно кодован ланац мултиплексера. • Спорије од простог мултиплексера, зато је боље користити наредбу селекционе доделе.

  17. Моделовање комбинационих мрежа • Наредба условне доделе сигналу је корисна код мреже са тростатичким баферима на излазу. data_bus<= resize(sample_byte, 16) when std_match(sample_enable, '1')else "ZZZZZZZZZZZZZZZZ"; или data_bus<= resize(sample_byte, 16) when std_match(sample_enable, '1')else (others => 'Z');

  18. Моделовање комбинационих мрежа • Коришћење наредбе process • Процес мора бити осетљив на све улазе, излазима се мора доделити вредност у свим могућим гранама извршавања. read_sample : process ( read_enable, sample, limit_exceeded, ready )begin if std_match(read_enable, '1') then data <= sample; parity <= calc_parity(sample); status <= ready and not Iimit_exceeded; else data <= "ZZZZZZZZ"; parity <= 'Z'; status <= 'Z'; end if; end process read_sample;

  19. Моделовање секвенцијалних мрежа • Стандард за синтезу порджава описивање синхроних мрежа. • Већина алата за синтезу, као и сам стандард, не подржавају синтезу асинхроних мрежа. • Сигнали такта морају бити типа bit, std_ulogic или подтип као што је std_logic. Није обавезно да буду скалари, могу бити и елементи низова bit или std_ulogic вредности.

  20. Моделовање мрежа са ивичним окидањем process_statement <= [ process_label : ] process (clock_signal_name) { process_declarative_item } begin if clock_edgethen { sequential_statement } end if ; end process [process_label ] ; • Секвенцијалне наредбе треба да опишу комбинациону мрежу за рачунање нових вредности регистара.=> не користити wait наредбу нити референцирати ивичне (clock-edge) изразе.

  21. Моделовање мрежа са ивичним окидањем • Израз clock_edge је израз догађаја. За растућу ивицу такта мора имати једну од следећих форми: rising_edge( clock_signal_name )clock_signal_name'eventandclock_signal_name= '1'clock_signal_name= '1' and clock_signal_name'eventnot clock_signal_name'stableand clock_signal_name= '1'clock_signal_name= '1' and not clock_signal_name'stable

  22. Моделовање мрежа са ивичним окидањем • За опадајућу ивицу такта мора имати једну од следећих форми: falling_edge( clock_signal_name )clock_signal_name'eventandclock_signal_name= ‘0'clock_signal_name= ‘0' and clock_signal_name'eventnot clock_signal_name'stableand clock_signal_name= ‘0'clock_signal_name= ‘0' and not clock_signal_name'stable

  23. Моделовање мрежа са ивичним окидањем • Пример: ивично окидан регистар simple_reg : process ( clk ) begin if clk'event and clk = '1' then reg_out <= data_in; end if; end process simple_reg;

  24. Моделовање мрежа са ивичним окидањем • Претходни шаблон са додатим асинхроним улазима осетљивим на ниво: process_statement <= [ process_label : ] process ( clock_signal_name, asynchronous_signal_name{, ...}) {process_declarative_item } begin if boolean_expression then { sequential_statement } {elsif boolean_expression then { sequential_statement } } elsif clock_edge then { sequential_statement } end if; end process [process_label ] ;

  25. Моделовање мрежа са ивичним окидањем • Сви контролни сигнали (коришћени у условима) морају бити у листи сигнала на које је процес осетљив;Исто важи и за сигнале који се користе у then гранама које представљају асинхрони дио мреже • Асинхроно се најчешће додељује константна вредност сигналима=> у листи осјетљивости се појављују само контролни сигнали. • Секвенцијални искази: • не садрже wait исказе, • користите ивичне изразе само за рачунање услова.

  26. Моделовање мрежа са ивичним окидањем • Пример: бројач са асинхроним ресетом и уписом count_byte : process ( clk, rst_n, load, load_data ) variable count : unsigned(7 downto 0); begin if std_match(rst_n, '0') then count := "00000000"; q <= count; elsif std_match(Ioad, '1') then count := load_data; q <= count; elsif rising_edge(clk) then count := count + 1; q <= count; end If; end process count_byte;

  27. Моделовање мрежа са ивичним окидањем • Треба приметити да редослед испитивања услова одређује приоритет асинхроног контролног сигнала! • У претходном примеру, ресет сигнал има већи приоритет од сигнала за упис.=> Ако се оба сигнала истовремено поставе на активан ниво, бројач ће се ресетовати.

  28. Моделовање мрежа са ивичним окидањем • Шаблон код кога се користи једна wait наредба за имплементирање осетљивости на ивицу такта: process_statement <= [ process_label : ] processis { process_declarative_item } begin wait on <sensitivity_list>; if <condition> then <sequence_of_statements>; end if; end process [ process_label ] ; • Могуће је и коришћење више wait исказа (тако да сви имају исту ивицу такта у услову), али то алати често не дозвољавају.

  29. Моделовање мрежа са ивичним окидањем • У претходном шаблону се може користити иwait until... • Tada je za clock-edge изразeмогуће користити и један од следећих: clock_signal_name= '1'clock_signal_name= '0‘ • Уколико у једном wait исказу постоји и асинхрони услов, онда треба да постоји исти такав услов у свим wait исказима посматраног процеса. • Ако услов испитује и асинхрони улаз, после wait следи испитивање који део услова је постао тачан.

  30. Пример reg : process is begin wait until reset = '1' or rising_edge(clk); if reset = '1' then q <= X"00"; elsifrising_edge(clk) then if en = '1' then q <= d; end if; end if; end process dual_reg;

  31. Моделовање мрежа са ивичним окидањем • Пример: померачки регистар са синхроним уписом shift_reg: process variable stored_value : bit_vector(7 downto 0); begin waituntil clk = '1'; If load = '1' then stored_value := load_data_in; q <= stored_value; else stored_value := stored_value(6 downto 0) & serial_data_in; q <= stored_value; end If; end process shift_reg;

  32. Мреже осетљиве на ниво и последично памћење • У неким моделима, памћење стања се не задаје експлицитно. Алат за синтезу, на основу понашања модела, сам закључује да је потребно памћење стања. Ово се зове inferred storage. • Пример: транспарентно леч коло latch : process ( enable, d ) begin if enable = '1' then q <=d; end if; end process latch;

  33. Мреже осетљиве на ниво и последично памћење • Понашање овог модела је имплицирано семантиком сигнала и доделе сигналима у VHDL-у. • Када алат за синтезу имплементира овај модел као хардверско коло, он мора да обезбеди памћење тренутне вредности за излаз. Значи потреба за памћењем је последица семантике модела.

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

  35. Ограничења у VHDL моделовању: процеси и подпрограми • Механизми за кашњење (inertial или transport) или after клаузула се игноришу. • Конкурентне наредбе доделе вредности сигналу могу да реферишу на ивичне (clock-edge) или изразе нивоа, али само у својим условима.

  36. Ограничења у VHDL моделовању: конкурентне наредбе • Наредбе за генерисање су дозвољене, само што код итеративног генерисања границе морају бити специфициране у форми статичког опсега.

  37. Ограничења у VHDL моделовању: имена и изрази • Већина имена атрибута не сме да се користи. Дозвољени су једино 'base, 'left, 'right, 'high, 'low, 'range, 'reverse_range и 'length. • Није дозвољено наводити која димензија низа треба да се користи. На пример, A'left(1) није прихватљиво. • Атрибути 'event и 'stable могу да се користе једино у clock-edge изразима.

  38. Ограничења у VHDL моделовању: имена и изрази • Уместо оператора померања, могу се користити shift_left и shift_right функције дефинисане у пакетима numeric_bit и numeric_std. • Оператори "/", mod и rem се могу користити само у случају да су оба операнда статичка, или у случајевима када је десни операнд статички степен двојке. • Оператор "**" такође може да се користи само у случају када су оба операнда статичка, или у случајевима када је леви операнд статички познат као 2.

  39. Ограничења у VHDL моделовању: метакоментари • Стандард за синтезу дефинише два метакоментара, тј. коментара које треба да интерпретира алат за синтезу. То су: rtl_synthesis off и rtl_synthesis on • Није битно да ли су написани малим или великим словима или њиховом комбинацијом. • Алат за синтезу ингнорише сав VHDL код који се налази иза rtl_synthesis off метакоментара и пре следећег rtl_synthesis on метакоментара.

  40. 10 заповести за VHDL

  41. 1. заповест • Познавати структуру система који се дизајнира • Нацртати дијаграм протока података • Разумети временске зависности • Нацртати дијаграме КА • Тек када је осмишљен дизајн треба прећи на кодирање у VHDL-у • VHDL је начин да се поставе компоненте

  42. 2. заповест • ЈЕДАН ГЛОБАЛАН КЛОК • FF генеришу улаз за комбинациона кола • Комбинациона кола генеришу улаз FF • Једна и само једна вредност сигналау току једног циклуса сигнала такта • Екстерни асинхрони ресет може да се користи • FF само осетљиви на ивицу

  43. 2. заповест • СТРОГО ЗАБРАЊЕНО • Генерисање асинхроног сигнала ресета • Логика осетљива на ниво сигнала • Генерисање сигнала такта(Користити мултиплексер за Enable сигнал)

  44. 3. заповест Осетљивост процеса • Комбинациона мрежа • Осетљивост на све сигнале • Секвенцијална мрежа • Осетљивост само на клок,евентуално на асинхрони ресет

  45. 4. заповест Генерисање сигнала process (state, input) begin case state is when S1 => if input = ’1’ then output <= ’0’; end if; when S2 => output <= ’1’; end case; end process; process (state, input) begin case state is when S1 => if input = ’1’ then output <= ’0’; else output <= ’1’; end if; when S2 => output <= ’1’; end case; end process;

  46. 4. заповест Генерисање сигнала Алати за синтезу генеришу лечеве process (state, input) begin case state is when S1 => if input = ’1’ then output <= ’0’; end if; when S2 => output <= ’1’; end case; end process; process (state, input) begin case state is when S1 => if input = ’1’ then output <= ’0’; else output <= ’1’; end if; when S2 => output <= ’1’; end case; end process;

  47. 5. заповест Стања енумерисати type states is (START, RUN, IDLE, ZAPHOD); signal current, next : states; process (current) begin case current is when START => ... when RUN => ... when IDLE => ... end case; end process;

  48. 6. заповест Има заправо 9 заповести

  49. 7. заповест process (Clk, Reset) begin if Reset = ’1’ then Q <= ’0’; else if rising_edge(Clk) then Q <= D; end if; end if; end process; process (Clk) begin if rising_edge(Clk) then if Reset = ’1’ then Q <= ’0’; else Q <= D; end if; end if; end process; Користити само спољашњи асинхрони ресет Боље синхрони ресет (може и унутрашњи)

  50. 8. заповест • Користити само оне сигнале, који стварно постоје у дизајну, за тестирања • Прилагодити симулацију стварности јевећ ионако тежак посао

More Related