ЛР6 > Застосування робочих областей PLI

Тема: Створення додатків PLI, які застосовують області даних та обробників подій симулятора. Переваги, що надають користувацькі області даних.

1. Теоретичні відомості

Робочі області

Область даних, асоційована з деяким екземпляром процесу / функції називається робочою областю системного процесу/функції (system task / function work area). Місце для робочої області екземпляру автоматично виділяється симулятором.

   Тестування та верифікація цифрових систем: структура курса лабораторних робіт 
 1. Розробка користувацьких системних функцій Verilog 
 2. Застосування різних типів процедур PLI. Процедура знаходження часу симуляції 
 3. Зчитування / запис даних більших за 32 біт 
 4. Організація доступу до масивів за допомогою VPI / PLI 
 5. Перевірка функції на повернення помилки та отримання аргументів симулятора 
 6. Застосування робочих областей PLI 

Робочі області застосовують у випадках, коли:

  • calltf функція виконується досить часто (наприклад за сигналом clock).
  • calltf функції мають виконувати велику кількість операцій (наприклад, аналіз значень великої кількості портів/сигналів).
  • Якщо існуюча версія функції/процесу користувача суттєво знижує швидкість симуляції

Для прискорення симулятору максимум потрібної інформації розміщується в робочій області на етапі компіляції. calltf обробник використовує лише необхідний мінімум інформації від симулятору, а всю додаткову інформацію бере з робочої області.


Рис. 1 Процедура реєстрації області даних


Рис. 2 Процедура отримання вказівника на область даних

Обробники подій симулятору

Особливості застосування обробників подій симулятору:

  • Функції даного типу реєструються за допомогою: ‘vpi_register_cb()’.
  • Події симулятора можуть виникати у будь-який час на будь-якому етапі симуляції.
  • Обробники подій ніяк на пов’язані з системними процесами / функціями користувача.
  • В межах обробнику callback function, посилання на процес/функцію не може бути отримане безпосередньо. Для цього треба використовувати “user_data” поле аргументів обробнику.
  • Обробники бувають разові та багаторазові. Разові обробники виконуються лише 1 раз за час симуляції. Багаторазові обробники можуть виконувати будь-яку кількість раз.
  • VPI обробник може бути вимкнений за допомогою команди: vpi_remove_cb().

Є три категорії дій, які можу призвести до виклику обробників подій симулятору:

  • Simulation actions – початок/закінчення симуляції.
  • Simulation time activity – закінчення поточного часового проміжку симуляції, перехід на попередньо заданий час симуляції. Це усі події часу, які є унікальними.
  • Simulation events – зміна логічного значення, виконання заданого виразу.


Рис. 3 Процедура реєстрації оброчника подій симулятору

2. Порядок виконання роботи

1. Створіть файл test_show.v та введіть код модуля:


Рис. 4 Текст модуля test_show.v

2. Створіть файл cosim_show_ports.c:


Рис. 5 Вміст файлу cosim_show_ports.c (частина 1)


Рис. 6 Вміст файлу cosim_show_ports.c (частина 2). Реєстрація оборобника події симулятору


Рис. 7 Вміст файлу cosim_show_ports.c (частина 3). Задання структури даних користувача


Рис. 8 Вміст файлу cosim_show_ports.c (частина 4). Заповнення області даних користувача


Рис. 9 Вміст файлу cosim_show_ports.c (частина 5). Використання області даних користувача


Рис. 10 Реєстрація VPI процедури користувача

3. Виконайте компіляцію та створіть динамічну бібліотеку, яка буде підключена до симулятора ModelSim під час симуляції.


Рис. 11 Компіляція користувацької функції у бібліотеку *.dll

4. Виконайте симуляцію в ModelSim.


Рис. 12 Симуляція в ModelSim

3. Самостійна робота

Модифікуйте демонстраційний приклад та створіть додаток PLI, який застосовує області даних та обробники подій симулятора. Помістіть виклик користувацької функції VPI в процес, що спрацьовує від сигналу тактування. Розробити два варіанти програми із / без використання областей даних та порівняйте витрати часу на їх виконання.

Автор: Александр Романов