Програмна перевірка процесора


18

На даний момент я розробляю простий процесор у VHDL за допомогою Xilinx ISE та ISIM. Частина дизайну іде надзвичайно добре, але я не можу знайти спосіб послідовної перевірки.

Зараз у мене є тестовий стенд VHDL, який я оновлюю, щоб перевірити функцію, над якою працюю в будь-який конкретний момент. Це дуже спеціально, і це не допомагає мені фіксувати регресії і не може бути використане для перевірки відповідності специфікації / набору інструкцій.

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

Я шукаю метод, який дозволяє мені виконувати проектування та тестування більш контрольованим чином. Якийсь "апаратний TDD", якщо ви хочете. Чи існує така річ? Чи можна застосувати відносно легко до деталей загального призначення, таких як процесор?

Відповіді:


16

Весь випуск перевірки процесора надзвичайно великий і складний. Є люди, які роблять кар’єру саме з цього. Я просто дам вам огляд ...

  1. Напишіть програму мовної збірки, яка перевіряє кожну інструкцію та кожну дрібну деталь кожної інструкції. Наприклад, під час тестування інструкції ADD ви можете перевірити її цифрами, які є як позитивними, так і негативними, і одним з них (двічі). Потім ви протестуєте прапор переносу, нульовий прапор тощо. Інші особливості ЦП (наприклад, передбачення гілок тощо) мали б свою особливу частину цього тесту.

  2. Напишіть, використовуючи C / C ++ або щось інше, модель вашого процесора. Це ваш віртуальний процесор. Це також ваш "золотий процесор", це означає, що це той процесор, з яким порівнюється все інше. В ідеалі людина, яка написала VHDL, НЕ є тією ж людиною, яка пише модель C / C ++.

  3. Напишіть / Створіть систему, де можна запустити модель C / C ++ та модель VHDL поряд і порівняти результати по циклу. Запустіть програму складання з кроку 1 і переконайтесь, що обидві моделі відповідають.

  4. Запустіть дві моделі на випадкових "інструкціях". В основному, заповніть "таран" випадковими даними та виконайте ці випадкові дані так, ніби це реальні вказівки. Запустіть однакові випадкові дані для моделей VHDL та C / C ++ та порівняйте результати. Ця модель C / C ++ працюватиме на якійсь робочій станції та / або сервері (а не самому новому процесорі).

  5. Налаштуйте машину або кілька машин, щоб повторити крок 4 по суті назавжди. Навіть якщо ваш процесор закінчений і випускається рік і більше, ви все одно будете виконувати цей тест.

  6. Повторіть ці дії, коли є більше матеріалів для імітації. Наприклад, ви б запустили його на VHDL після маршруту із зазначенням часу, коли це буде доступно.

Немає гарантії, що порівняння версій VHDL та C / C ++ зможе наздогнати кожну помилку - але насправді немає кращого способу. І тестування процесора на випадкові інструкції вимагає часу, але це теж дуже корисно. Єдина реальна альтернатива цьому - найняти багато людей просто писати код протягом усього дня для тестування різних частин процесора - і більші компанії роблять це, але вони також роблять випадкові дані.

Для однієї людини, яка пише код VHDL, зазвичай це лише крок №1. Але якщо ви збираєтесь продати процесор, то принаймні деякі інші кроки слід зробити (і справді, ви повинні їх виконати всі).


Відмінна відповідь, дякую! Це має багато сенсу. "Золотий процесор" - це дійсно відсутній фрагмент головоломки, який дозволяє вам перевіряти по циклу під час тестування. Оскільки це здебільшого іграшковий проект, я думаю, я дотримаюся першого речення останнього абзацу і просто виконую крок №1. Але знання того, що я мав би робити, - безцінне.
drxzcl

Ви також можете мати золоту, але не точну, модель C ++, яка дозволяє їй бути набагато простішою і, отже, швидше правильною - корисною для тестування функціональності ALU, наприклад ("2 + 2 = 4 та деякі прапори, я не байдуже, коли ", а не" 2 + 2 = 4 після одного галочки та прапорців після 2 кліщів ")
Мартін Томпсон,

Крім того, запустіть кодове покриття (щоб перевірити, чи ви все це використовували) та тестове покриття (щоб перевірити, чи всі тести були перевірені як на паси, так і на помилки)
Мартін Томпсон,

Подальші дії: Використовуючи процедуру "крок один", мені вдалося знайти багато несправностей ... в моєму асемблері: P Ядро здається відносно нормальним.
drxzcl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.