Тема: Організація однотипних даних у масиви. Звернення до комірок масиву в PLI доданках
1. Теоретичні відомості
Однотипні дані в Verilog можуть зберігатись та оброблятись під одним ім’ям – у вигляді масивів клітинок пам’яті або регістрів. Масив пам’яті – це одновимірний масив змінних типу reg, а масив регістрів – багатовимірний масив змінних типу reg.
Рис. 1 Приклад об’явлення масиву в Verilog
Застосовуючи функцію ‘vpi_handle_by_index(mem_handle, index_num)’ в одновимірному масиві забезпечується прямий доступ до слова / регістру за індексом.
Тестування та верифікація цифрових систем: структура курса лабораторних робіт 1. Розробка користувацьких системних функцій Verilog 2. Застосування різних типів процедур PLI. Процедура знаходження часу симуляції 3. Зчитування / запис даних більших за 32 біт 4. Організація доступу до масивів за допомогою VPI / PLI 5. Перевірка функції на повернення помилки та отримання аргументів симулятора 6. Застосування робочих областей PLI |
2. Порядок виконання роботи
1. Створіть файл test_type.v та введіть код модуля:
module test_array;
reg [15:0] regA[0:15];
reg [15:0] regB[0:15];
reg clk;
integer i, j;
always #5 clk = ~clk;
initial begin
clk = 0;
j = 0;
j = 0;
#30 $finish;
end
always @ (negedge clk) begin
for (i=0; i<16; i=i+1) regA[i] = (i+j);
j = j+1;
end
always @ (posedge clk) begin
$cosim_array_copy(regA, regB); // Визов функції роботи із масивом
for (i=0; i<16; i=i+1) $display($time,”regB[%d]=%d”, i, regB[i]);
end
endmodule
2. Створіть файл cosim_array.c, де визначте користувацьку calltf функцію:
Рис. 2 Розробка користувацької функції calltf
Рис. 3 Розробка користувацької compiletf функції (початок)
Рис. 4 Розробка користувацької compiletf функції (продовження)
3. Виконайте компіляцію та створіть динамічну бібліотеку, яка буде підключена до симулятора ModelSim під час симуляції.
Рис. 5 Компіляція користувацької функції у бібліотеку *.dll
4. Виконайте симуляцію в ModelSim. Зверніть увагу на момент виклику функції calltf.
Рис. 6 Результати симуляції в ModelSim
3. Самостійна робота
Модифікуйте демонстраційний приклад та створіть додаток PLI, який виконує роботу із масивами. Приклади завдань:
1. Функція знаходження максимального елементу в масиві.
2. Функція знаходження мінімального елементу в масиві.
3. Функція заповнення масиву випадковими числами.
4. Функція знаходження суми елементів масиву.
5. Функція знаходження середнього арифметичного елементів масиву.
6. Функція знаходження середнього гармонійного елементів масиву.
7. Функція знаходження середнього арифметичного елементів масиву.
8. Функція сортування елементів масиву за зростанням.
9. Функція сортування елементів масиву за спаданням.
10. Функція заміни заданого по індексу елементу новим.
11. Функція циклічного зсуву елементів масиву вліво / вправо.
12. Функція пошуку елемента в масиві. Повертається індекс знайденого елементу або -1.
13. Функція копіювання парних елементів масиву в новий масив.
14. Функція копіювання елементів масиву в інший починаючи і закінчуючи заданим індексом.
15. Функція, що перетворює всі непарні елементи масиву в парні шляхом додавання 1.
Автор: Александр Романов