МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Лабораторна робота № 2
з дисципліни “Комп'ютерні системи”
Львів – 2013
Тема:Ознайомлення з основними конструкціямимови моделювання System C
Мета роботи:Ознайомлення з основними конструкціями мови моделювання System C
Поясніть поняття “примітивний канал ”.
Є примітивні і ієрархічні канали. Примітивні не демонструють ніякої видимої структури, не містять процеси і не можуть напряму мати доступ до інших примітивних каналів
Поясніть поняття “простий канал ”.
Канал – один чи декілька інтерфейсів служить як контейнер для функціональності зв’язку. Канал – це не обов’язково з’єднання типу точка-точка; він може бути підключений до двох і більше модулів. SystemC 2.0 дозволяє створювати свої типи каналів, застосовуючи їх для розробки дієвих моделей абстрактної шини чи власних протоколів зв’язку.
Поясніть поняття “ієрархічний канал ”.
Ієрархічний канал – модуль,тобто він може мати структуру, містити процеси та може звертатися безпосередньо до інших каналів. Як канал, модуль повинен походити від одного чи багатьох класів інтерфейсу.
Ієрархічні канали дуже корисні для моделювання нового покоління інфраструктур зв’язку SoC. Наприклад, ОСВ (On Chip Bus) – теперішня стандартна основа від VSIA. Основа ОСВ складається з декількох інтелектуальних модулів,таких як модуль Арбітра, модуль Контрольного Програмування, і Декодуючий модуль. Це гарантує повну універсальність, багатократне використання ІР швидкий час виходу на ринок для SoC.
Коли використовуються примітивні канали?
Примітивні канали використовують:
Коли потрібно використовувати схему модифікації запиту.
Коли канали базові і їх не можна поділити на дрібініші частини.
Коли швидкість критична величина (при примітивних каналах, можно скоротити кількість дельта-циклів )
Коли не має змісту намагатись створити канал (наприклад семафор або прапорець стану) поза процесами і іншими каналами.
Коли використовуються ієрархічні канали?
Ієрархічні канали використовують:
Коли канали є дійсно ієрархічними і користувачі хотіли б мати змогу дослідити внутрішню структуру.
Коли канали містять процеси.
Коли канали містять інші канали.
Що включають атрибути каналу?
Атрибути каналу корисні, коли модулі сполучені з шиною. Тоді атрибути включають:
Адреси (у випадку, коли модуль не використовує спеціалізовані порти, де адреси були визначені як аргументи методів доступу)
Схеми адресації (наприклад базова адреса проти авто-приросту)
Підключення модуля як господаря чи раба, або господаря/раба
Пріоритети
Розміри буфера
Використання атрибутів каналу є більш сприятливим ніж використання спеціалізованих портів (де інформація по-портової конфігурації записана в спеціалізованих портах), тому що вони краще допомагають утримувати функцію і сполучення відокремленими. Але зберігання інформації по-портової конфігурації в портах є природнішим і спрощує внутрішні структури даних каналу. Один за одним, треба виконати обмін між каналом використання атрибутів і спеціалізованими портами.
Наведіть правило проектування каналу sc_signal<T>.
Може бути під’єднано не більш ніж один драйвер, тобто не більше ніж один вихід (sc_out<T>) або двонаправлений порт (sc_inout<T>).
Може під'єднуватися довільне число вхідних портів (sc_in<T>).
Наведіть правило проектування каналу sc_resolved_rv<N> .
Довільна кількість вхідних, вихідних, і двонаправлених портів може приєднуватися.
Наведіть правило проектування каналу sc_fifo<T> .
Може бути приєднано не більше одного вхідного порту.
Може бути приєднано не більше одного вихідного порту.
Заборонені двонаправлені порти.
Дайте приклади на SystemC підключення портів до каналу.
SystemC 2.0 дозволяє приєднання порту до багатьох ідентичних інтерфейсів. Він поводить себе аналогічно до порта SystemC 1.0, за винятком того, що з ним може бути зв’язаний більше ніж один інтерфейс або канал, і треба використовувати оператор нижнього індексу, щоб звертатися до інтерфейсу. Очевидна перевага – велика кількість блоків пам’яті, яка може бути покладена на шину, без того, щоб виникла необхідність вмонтовувати порти для кожної пам’яті. Відповідно, не потрібно змінювати код шини, коли використовуємо це в проектах, де кількість блоків пам’яті невідома, або де кількість блоків пам’яті може відрізнятися.
Які є типи портів у SystemC?
В SystemC 1.0, є три основні типи портів: sc_in<T>, sc_out<T>, і sc_inout<T>. Вони отримані з базового класу sc_port. Кожен з них забезпечує набір методів інтерфейсу: read() і write(). Ці методи викликають відповідний метод інтерфейсу каналу.
З іншими типами каналів ці прості схеми повинні бути розширеними, тому що інтерфейси, прийняті в sc_in <T>, sc_out <T>, і sc_inout <T>, не достатні для всіх типів каналів. Деяким типам каналів потрібні додаткові чи абсолютно інші методи інтерфейсу. Спеціалізовані порти можна створити вдосконаленням базового класу портів sc_port, або одного із наперед визнечених типів портів.
Дайте приклади реалізації інтерфейсів на SystemC.
// Інтерфейс : OCB_cell_if
template <class T>
class OCB_cell_if
: public sc_interface
{public:
// методи інтерфейсу
...
virtual void set_eom( bool ) = 0;
virtual bool get_eom() = 0;
virtual void set_eop( bool ) = 0;
virtual bool get_eop() = 0;
};
// Інтерфейс : OCB_packet_if
template <class T>
class OCB_packet_if
: public OCB_cell_if
{
public:
// методи інтерфейсу
};
// Інтерфейс : OCB_trans_if
template <class T>
class OCB_trans_if
: public OCB_packet_if
{
public:
// методи інтерфейсу
...
virtual void set_eom( bool ) = 0;
virtual bool get_eom() = 0;
private:
// не визначений
virtual void set_eop( bool );
virtual bool get_eop();