Лекція № 5 опис поведінки об'єкта моделювання
В моделі об'кту, як і у фізичного цифрового пристрою паралельно в часі повинна відбуваєтися зміна багатьох сигналів. В загальному описі архітектури об'єкта моделювання, секція паралельних операторів містить один або декілька паралельно виконувальних операторів {concurent_statement}, за допомогою яких задається залежність вихідних сигналів від вхідних, як по значенню так і почасовим співвідношенням. Послідовність запису паралельних операторів в тілі архітектурного опису значення не має.
В мові vhdl введено цілий ряд паралельних операторів, основними з яких є процеси і оператори паралельного присвоювання значень сигналам.
1. Процеси для опису архітектур
В описі поведінки об'єкта процеси є базовими конструкціями, які враховують паралельність виконання дій. Процеси в тілі виконуються паралельно відносно один одного, але всі дії в процесі виконуються послідовно.
Виконання процесів здійснюється у відповідності до значень сигналів. Опис процесу має наступний синтаксис:
[process_label:] process [(signal_name {, ...})] [is]
{process_declarative_item}
Begin
{sequential_statement}
End process [process_label];
Список сигналів в круглих дужках після ключового слова process називається списком чутливості. Якщо в описі процесу задано список чутливості, то процес активується (тобто починається виконання дій описаних всередині процесу) при зміні значення будь-якого сигналу з цього списку. Якщо список чутливості відсутній, то процес активується при зміні будь-якого сигналу в моделі, якщо не вказано інший варіант за допомогою команд очікування всередині самого процесу.
В секцію process_declarative_item можуть бути включенні описи локальних констант, типів і змінних, які використовуються в цьому процесі.
Але сигнали не можуть бути описані як локальні дані процесу. При активації процесу, його виконання починається з першого оператора, вказаноо в тілі процесу (в секції sequential_statement). В цій секції розташовані послідовні оператори, які визначають майбутнє значення сигналу на базі поточних значень. Мітка процесу process_label, яка фактично є ім'ям процесу, полегшує відлагодження програми на vhdl, що переважно включає багато процесів.
2. Послідовний оператор присвоювання значення сигналу.
Послвдовні оператори присвоювання значення сигналу можуть розміщуватись тілки всередині тіла процесу, в секції sequential_statement. Вони мають наступний синтаксис:
Name<=[delay_mechanism] (value_expression [after
Time_expression]), {, ...}
Оператор присвоювання значення сигналу (вказується ім'ям name), включає визначення нового значення сигналу (value_expression) і визначення моменту часу (time_expression після ключового слова after), в який сигнал прийме це нове значення. Час зміни значення сигналу визначається відносно модельного часу. В момент запуску моделі модельний час рівний 0. Він збільшується дискретно, по ходу виникнення подій в моделі, що називається моделювання дискретних подій. Під час присвоєння сигналу нового значення, то до по точного значення модельного часу додається значення часу у виразі time_expression. Вираз time_expression повинен задавати значення типу time.
Для того щоб здійснити зміну сигналу в потрібний час, програма моделюванняавтоматично планує транзакцію на час прийняття сигналом нового значення. Коли в моделі наступає момент часу, на який запланована транзакція, то вона виконується і сигнал приймає нове значення. Один оператор дозволяє задавати декілька значень, які сигнал може приймати послідовно в часі, при цьому список моментів часу і відповідних значень сигналу повинен задаватися в порядку зростання моментів часу їх виконання.
Y<=not x after 5 ns, x after 10 ns;
Якщо в момент виконання цього оператора модельний час рівний 7 нс, то в момент часу 13 мс y прийме значення not x, а в момент часу 17 нс - значення рівне x (де x - в момент часу 7 нс).
Наприклад, прцес для генерації тактового сигналу можна проілюструвати лістингом 1.
Entity my_clk is
Generic (t:natural:=2ns); end entity
Archstecture rtl of my_clk is signal clk:std_logic:='0': begin
L_clk:process (clk) begin
If clk='0' then
Clk<='1' after t, '0' after 2*t
End if;
End process;
Виконання цього процесу починається кожен раз при зміні значення сигналу clk, який включений в список чутливості. Якщо сигнал clk='0', то виконується послідовний оператор присвоювання значення сигналу.
Уехай в момент часу tl сигнал clk отримав значення '0'. Тоді в результаті виконання оператора присвоювання на момент часу tl+t буде запланована транзакція присвоєння сигналу clk значення '1', а на момент часу tl+2*t буде запланована транзакція присвоєння сигналу clk значення '0'. Виконання кожної з цих транзакцій приведе до активації процесу l_clk. В результаті виконання кожної транзакції сигнал буде приймати значення , що задовільняє умові, і оператор присвоювання буде виконаний знову. Транзакція, і відповідно оператор присвоювання буде виконуватись в момент часу tl+2*t, вона приведе до планування транзакцій на час tl+2*t+t=tl+3*t і tl+2*t+4*t. Таким чином процес дозволяє згенерувати симетричний тактовий сигнал з пів періодом t. Часова діаграма згенерованого тактового сигналу подана на рис. 1.
Context signal
0ns 10ns 20ns
_______________ 1__ i___ i___ 1__ i___ i___ i___ i___ i___ i___ i___ i___ i___
My_clk clk ^j |
Рис. 1 часова діаграма тактового сигналу clk.
3. Затримки в моделі пристрою.
Моделювання цифрового пристрою на мові vhdl потребує коректного і акуратного представлення затримок в описі сигналів моделі. В мові vhdl передбачено різні моделі затримок, які відображають різні аспекти функціонуання реальних схем , пов'язаних з часовими факторами.
Опис механізму затримок (delay_mechanism) в операторах присвоювання значеннь сигналів має такий синтаксис:
[regect time_expressin] inertial|transport
3.1. Інерційна затримка.
Інерційна затримка (inertial_delay) еквівалентна мінімальному часу спрацювання цифрового елемента. Тобто це мінімальний час сигналів на вході елементу, щоб на виході сформувався стійкий вихідний сигнал. При вказанні інерційної затримки всі сигнали, тривалість яких меньший цієї затримки
Автоматично відфільтровуються системою моделювання.
Z<=reject 3ns inertial (x xor y) after 7ns
В даному прикладі всі сигнали x і y при тривалості меньшій 3нс не будуть впливати на формування нового значення сигналу z.
Якщо в опереаторі присвоювання значення сигналу присутня секція inertial і декілька секцій after, то секція inertial застосовується тільки до першої секції after, а до інших секцій застосовуються правила роботи з транспортними затримками.
3.1. Транспортна затримка.
Транспортна затримка (transport_delay) еквівалентна затримці сигналу наприклад в лініях передачі. Тобто сигнал може бути будь-якої тривалості, але він приходить з певним запізненням. Таким чином, при транспортній затримці, сигнал автоматично не відфільтровується системою моделювання, а тільки впливає на те, що вихідний сигнал буде сформований із запізненням на час транспортної затримки.
Вирішення неоднозначності встановлення сигналую
При використанні механізму заримок можуть виникнути неоднозначні ситуації, коли одному й тому ж сигналу можуть встановлюватись значення декількома операторами присвоювання. Ці оператори можуть встановлювати різні значення з різними затримками.
В vhdl прийнят, що при виникненні ситуації, коли коли транзакція змінює значення сигналу, породжена пізніше, але запланована на більш ранній час, то транзакція, породжена раніше в по ходу виконання програми, але запланована на більш пізній час ігнорується.
Приклад колізій, коли одному сигналу присвоюється різні значення декількома операторами.
Process (a)
Constant t_01:time:=800 ns; constant t_10:time:=500 ns;
Begin
If a='1' then
Z<=transport a after t_01;
Else
Z<=transport a after t_10; end if; end process;
Нехай поведінка сигналу буде наступною: a='0' з 0 по 200 ns a='1' з 200 по 400 ns a='1' з 400 по 1100 ns
В момент часу 200 буде запланована транзакція, яка в момент модельного часу1000 буде встановлювати значення сигналу z в 1. І в момент модельного часу 400 буде запланована транзакція, яка повинна буде в момент часу 900 встановити значення сигналу z в 0. Тоді якщо в початковий момент часу значення сигнвлу z було рівним 0, то воно не зазанає ніяих змін, оскільки буде прийнята до уваги друга транзакція а першп виконуатись не буде (рис2.)
200пб 400пб 600пб 800пб 1000п8
А 0 -----------------------------------
Иииииииииииииииииииииииии і 2 0 .............. 1
Рис. 2. Часова діаграма значень сигналів a і z