Я немного сбит с толку, если я должен использовать целые числа в VHDL для синтеза сигналов и портов и т. Д.
Я использую std_logic в портах верхнего уровня, но внутренне я был с помощью варьировались целые повсюду. Однако я наткнулся на несколько ссылок на людей, говорящих, что вы должны использовать только подписанный / неподписанный для кода, предназначенного для синтеза.
Я пошел и переделал свой текущий проект, чтобы использовать unsigned ... и, ну, это заметно уродливее.
Это плохая практика использовать целые числа? В чем проблема? Есть ли некоторая неопределенность, на какую ширину инструмент будет отображать целые числа?
Ответы:
Целые числа хороши в синтезе, я использую их все время.
Все в порядке!
Быть в курсе:
unsigned
signed
С другой стороны:
Когда вы используете векторные типы, вы используете
ieee.numeric_std
, неieee.std_logic_arith
так?Я использую
integer
s там, где могу, но если я явно хочу «пролонгировать n-битные счетчики», я склонен использоватьunsigned
.источник
Ян Декалуве написал целую белую книгу о проблемах целых и битовых векторов. Я ожидаю, что его ответы будут использовать целые числа, когда это возможно . http://www.jandecaluwe.com/hdldesign/counting.html
источник
Нет ничего плохого в использовании целых чисел для RTL как таковых , но есть причины, по которым некоторые избегают этого. Это действительно вопрос о субъективной «наилучшей практике», и вам в конечном итоге придется выяснить, что вы предпочитаете. В помощь этому я поделюсь своим опытом и мыслями по этому поводу.
В принципе , я за использование целых чисел (с ограничениями), в том числе и при написании для синтеза. Я иногда делаю это, но на практике , обычно я придерживаюсь
signed
иunsigned
. Я уточню почему.Вам все равно придется использовать векторизованные типы данных в части вашего проекта:
Вряд ли какой-либо вендор или сторонний IP будет использовать
integer
тип для портовНапример, при отправке данных через BlockRam, даже если вы выводите их и, следовательно, никогда не должны взаимодействовать с каким-либо IP / макросом / примитивом, вам, скорее всего, все равно придется преобразовывать их в векторизованный тип.
Даже если ничего из вышеперечисленного не применимо, вам, в основном, придется взаимодействовать с чем-то другим по адресу какой - то момент (порт верхнего уровня, если ничего другого)
Так как вы не можете использовать
integer
для полного дизайна, вы можете пропустить все это вместе, потому что:В некоторых случаях вам все равно придется выполнять преобразования, и это отнимает часть смысла использования
integer
в первую очередьКроме того, для моделирования эти преобразования обычно будут вызываться с векторами
'U'
или'X'
, либо до сброса, либо в другое время, и каждый такой вызов функции будет генерировать предупреждающие сообщения из функции пакета, загромождая предупреждения / подсказки моделированияНедостатки использования
integer
:В отличие от векторизованных типов, целые числа не имеют
'U'
и'X'
; Я нахожу это очень полезным в симуляции. Вы видите, как неинициализированные сигналы распространяются по проекту, и вы, вероятно, будете реагировать, если увидите много неинициализированных сигналов после сброса. Это не будет иметь место, если использовать целые числа.С целыми числами существует больший риск несоответствия симуляции / синтеза при сложении или вычитании, что приводит к недостаточному / переполнению. (Как уже было указано кем-то еще.)
Типичные случаи, когда я нахожу
integer
действительно хорошим вариантом:Для отладочных сигналов / счетчиков, которые вы отслеживаете через chipScope / signalTap и т. Д.
Полностью внутреннее представление счетчиков, которые никогда не входят или не выходят из вашего собственного кода. Да, бывают такие случаи, например, если вы пишете FIFO, и вы считаете, что пишете / считываете без остатка, чтобы сформировать сигналы
full
,empty
иalmostFull
т. Д. (Однако в этом случае арифметика с указателями - лучший способ, чем счет без учета счета). ..)Мои собственные выводы: я иногда использую целые числа, но экономно, и в основном в случаях, описанных выше. Я не вижу больших накладных расходов при использовании
unsigned
иsigned
вместо целого числа, и, следовательно, обычно придерживаюсь их.источник