Немає нічого поганого в використанні цілих чисел для RTL як такої , але є причини, які деякі уникають цього. Це справді питання про суб'єктивну "найкращу практику", і ви, зрештою, повинні самі дізнатися, що вам більше подобається. Як допомогу в цьому я поділюсь своїм досвідом та думками з цього приводу.
В основному я виступаю за використання (обмежених) цілих чисел, також під час написання для синтезу. Я іноді це роблю, але на практиці зазвичай дотримуюсь signed
і unsigned
. Я детальніше поясню, чому.
Ви все одно будете змушені використовувати векторизовані типи даних у своїй частині дизайну:
Навряд чи будь-який постачальник-IP або сторонній IP буде використовувати integer
тип для портів
Наприклад, при надсиланні даних через BlockRam, навіть якщо ви виводите їх і, отже, ніколи не потрібно інтерфейсувати будь-який IP / макро / примітивний, вам, швидше за все, потрібно буде конвертувати у векторний тип
Навіть якщо жодне з перерахованих вище не стосується, вам, в основному, потрібно буде в якийсь момент інтерфейс до чогось іншого (порт верхнього рівня, якщо нічого іншого)
Оскільки ви не можете використовувати integer
для повного дизайну, ви можете пропустити все це разом, оскільки:
У деяких моментах вам доведеться все-таки зробити перетворення, і це забирає integer
в першу чергу частину точки використання
Крім того, для моделювання ці перетворення, як правило, викликаються векторами 'U'
або 'X'
перед скиданням, або в інший час, і кожен такий виклик функції генерує попереджувальні повідомлення від функції пакету, захаращуючи ваші попередження / підказку щодо імітації
Недоліки використанняinteger
:
На відміну від векторизованих типів цілі числа не мають 'U'
і 'X'
; Я вважаю це дуже корисним у симуляціях. Ви бачите, як неініціалізовані сигнали поширюються через конструкцію, і ви, ймовірно, реагуєте, якщо після скидання побачите багато неініціалізованих сигналів. Це не буде, якщо використовувати цілі числа.
З цілими числами існує більший ризик невідповідності моделювання / синтезу при додаванні чи відніманні, що призводить до недоліку / переповнення. (Як уже вказував хтось інший.)
Типові випадки, коли я вважаю, що integer
це справді хороший варіант:
Для сигналів / лічильників налагодження, які ви контролюєте за допомогою chipScope / signalTap тощо.
Повністю внутрішнє представлення лічильників, які ніколи не переходять у або виходять із власного коду. Так, є такі випадки, наприклад , якщо ви пишете FIFO і ви мертві, зважаючи запису / читання для формування сигналів full
, empty
, і almostFull
т.д. (проте арифметика на покажчики кращий шлях , ніж мертвий, зважаючи в цьому випадку. ..)
Мої власні висновки: я цілком використовую цілі числа іноді, але помірковано, і переважно в описаних вище випадках. Я не бачу великих витрат у використанні unsigned
та signed
замість цілих чисел, тому зазвичай дотримуюся їх.