Presentation is loading. Please wait.

Presentation is loading. Please wait.

Оператор надовезивања

Similar presentations


Presentation on theme: "Оператор надовезивања"— Presentation transcript:

1 Оператор надовезивања
Низови се могу надовезивати помоћу оператора & signal long_reg : bit_vector(7 downto 0); signal medium_reg : bit_vector(6 downto 0); signal small_reg : bit_vector(3 downto 0); Пример: long_reg <= '0' & medium_reg; long_reg <= "1010" & small_reg;

2 Сецирање Може делу низа да се додели вредност
Може део низа да се прочита signal input : bit_vector(0 to 15); signal output : bit_vector(0 to 15); output(8 to 15) <= input(0 to 7); output(0 to 7) <= input(8 to 15);

3 Агрегација сигнала aggregate ⇐ ( ⦅ ⟦ choices => ⟧ expression ⦆ ⦃,...⦄ ) choices ⇐ ⦅ simple_expr | discrete_range | others ⦆ ⦃|...⦄ Примери: type byte is array (7 downto 0) of bit; signal d_reg : byte; signal a, b : bit; d_reg <= (a, "1001", b, "00"); d_reg <= (7 => a, 6 downto 3 => "1001", => b, 1 downto 0 => "00");

4 Агрегација сигнала signal status_reg : bit_vector(7 downto 0); signal int_prior, cpu_prior : bit_vector(2 downto 0); signal int_en, cpu_mode : bit; (2 downto 0 => int_prior, 6 downto 4 => cpu_prior, 3 => int_en, 7 => cpu_mode) <= status_reg;

5 Секвенцијално процесирање
Појављује се унутар процеса и потпрограма. Наредбе се извршавају према редоследу појављивања унутар процеса (потпрограма) редослед наредби из различитих процеса није дефинисан. Променљивим се вредност мења у тренутку извршавања исказа доделе вредности тој променљивој. Могу се користити и математички оператори. У току извршавања, симулационо време се не мења! За сваки процес мора се дефинисати под којим условима ће се активирати (шта је потребно да се догоди да се процес поново активира).

6 Процес Процес је конкурентни исказ.
Листа сигнала на које је процес осетљив (листа осетљивости процеса) process_statement ⇐ ⟦ labela_procesa: ⟧ process ⟦ ( naziv_signala ⦃,...⦄ ) ⟧ ⟦ is ⟧ ⦃ deklarativna_sekcija ⦄ begin ⦃ sekvencijalni_iskazi ⦄ end process ⟦ labela_procesa ⟧; Процес је конкурентни исказ. Процес садржи секвенцијалне исказе.

7 Процес Листа сигнала на које је процес осетљив је опциона.
Уколико процес нема листу сигнала на које је осетљив: активира се на почетку симулације активира се сваки пут када се "пробуди" са неког wait исказа кад дође до краја, враћа се на почетак Уколико процес има листу сигнала на које је осетљив: активира се и суспендује исто као да нема листу осетљивости суспендује се увек када дође до краја процеса услед догађаја на сигналу из листе осетљивости процес се активира ако је суспендован због доласка до краја.

8 Секвенцијални искази sequential_statement ⇐ wait_statement | report_statement | variable_assignment_statement | if_statement | loop_statement | exit_statement | null_statement | assertion_statement | signal_assignment_statement | procedure_call_statement | case_statement | next_statement | return_statement

9 Секвенцијална додела вредности сигналу
Додела вредности сигналу унутар процеса. Сваки процес добија по један драјвер за сваки сигнал којем додељује вредност Уколико се сигналу у неком случају не додели вредност, памти се његова претходна вредност (секвенцијална кола). У једном симулационом циклусу може се изгенерисати више трансакција за исти сигнал. Конкурентна додела вредности сигналу еквивалентна је процесу за који важи: садржи исту такву секвенцијалну доделу унутар листе сигнала на које је процес осетљив налазе се сви сигнали који се користе при израчунавању нове вредности Од VHDL-2008 уведени су секвенцијални искази за селекциону и условну доделу вредности сигналу.

10 Пример 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 process (d0, d1, d2, d3, sel0, sel1) is begin zmux: 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 process; end architecture dataflow;

11 Механизми кашњења Два могућа механизма кашњења:
delay_mechanism ⇐ transport | ⟦ reject time_expression ⟧ inertial Два могућа механизма кашњења: транспортни инертни (подразумевани) Користе се само за потребе симулације симулира се кашњење веза између логичких кола симулира се кашњење логичких кола При синтези кашњења се занемарују на овај начин није могуће мерити време за потребе имплементације неког алгоритма

12 Транспортно кашњење Транспортни механизам кашњења (transport)
мора се експлицитно навести (инертни је подразумевани) све трансакције се генеришу са наведеним кашњењем опонаша кашњење које настаје дуж линије за пренос сигнала (идеална линија која пропушта све фреквенције) није погодно за опис логичких кола

13 Транспортно кашњење - пример
Пример у оквиру којег се у току једног симулационог циклуса заказују две трансакције за исти сигнал: entity е1 is -- nothing end entity e1; architecture а1 of е1 is signal a : bit := '1'; begin process is a <= transport '0' after 1ns; a <= transport '1' after 2ns; wait; end process; end architecture а1; 0ns ns ns

14 Транспортно кашњење - пример
Пример у оквиру којег остаје само једна трансакција каснија трансакција је за ранији тренутак од претходне и због тога се претходно генерисана трансакција брише. entity е1 is -- nothing end entity e1; architecture а1 of е1 is signal a : bit := '1'; begin process is a <= transport '1' after 2ns; a <= transport '0' after 1ns; wait; end process; end architecture а1; 0ns ns ns

15 Транспортно кашњење - пример
transmission_line: process(a) is begin z <= transport a after 500 ps; end process transmission_line; a z @700 ps 1 @700 ps 1 @1000 ps @1000 ps

16 Транспортно кашњење - пример
transmission_line: process(a) is begin if a = '1' then z <= transport a after 800 ps; else z <= transport a after 500 ps; end if; end process transmission_line; a z @900 ps Изврши се трансакција, али не постоји догађај! @1000 ps 1 @1000 ps 1

17 Инертно кашњење Инертни механизам кашњења (inertial)
подразумевани ако се не наведе ниједан механизам кашњења побудни сигнал мора да постоји дуже од времена одбацивања гличеви се не пропагирају кроз дизајн брише и све трансакције заказане у претходном интервалу одбацивања, почев од прве која се разликује од нове вредности гледано са краја интервала упрошћено: одбацује све импулсе који нису дужи од времена одбацивања економичан за ресурсе симулатора

18 Инертно кашњење - пример
inv: process(a) is begin z <= inertial not a after 3 ns; end process inv; Изврши се трансакција, али не постоји догађај! @9 ns 1 @4 ns @9 ns 1 @11 ns a z

19 Инертно кашњење - пример
inv: process(a) is begin z <= reject 1 ns inertial not a after 3 ns; end process inv; a z reject 0 ps inertial a  transport a

20 Инертно кашњење - пример
inv: process(a, b) is begin z <= reject 3 ns inertial a or b after 5 ns; end process inv; @6 ns 1 @6 ns 1 @8 ns 1 @10 ns @13 ns 1 @6 ns 1 @8 ns 1 @10 ns @13 ns 1 @14 ns

21 Пример entity primer is end entity primer; architecture ponasanje of primer is signal a : bit := '1'; signal b : bit := '0'; begin process is variable c : bit := '0'; begin if (a = '1') or (b = '0') then a <= inertial not c after 1 ns; else a <= inertial not c after 1.5 ns; end if; b <= inertial (b) nand (a or c) after 1 ns; c := a and b; wait on a, b; end process; end architecture ponasanje;


Download ppt "Оператор надовезивања"

Similar presentations


Ads by Google