Перейти к содержанию
    

операции на VHDL

Всем добрый день.

Вопрос, наверняка, уже избитый.

Есть сигналы

a, b : std_logic_vector(5 downto 0);

 

необходимо осуществление следующих операций:

a+b

a-b

a*b

a>b

a<b и т.д.

 

Эти операции осуществляются с числами знаковыми или беззнаковыми? Как этим управлять (знаковость/беззнаковость)?

Заранее всем спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наверное разработчик на начальном этапе должен знать какими у него будут данные.

Далее опираясь на знания преобразуют std_logic_vector либо в unsigned, либо в signed.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На мой взгляд выяснить все нюансы не сложно, сделав пример с тестбенчем... вот это и будет момент истины

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наверное разработчик на начальном этапе должен знать какими у него будут данные.

Далее опираясь на знания преобразуют std_logic_vector либо в unsigned, либо в signed.

 

Предположим я знаю какие у меня данные, например, знаковые.

Но я то указал? что работаю с std_logic_vector и не хочу преобразовывать в signed, ведь указанные операции можно производить и с std_logic_vector.

А вот как их будет реализовывать компилятор?

 

На мой взгляд выяснить все нюансы не сложно, сделав пример с тестбенчем... вот это и будет момент истины

Это конечно да, просто хотелось бы подтверждения.

Ладно поствлю вопрос по-другому:

 

a, b : std_logic_vector(5 downto 0);

 

Указанные операции гарантированно будут проводиться в знаковом виде? Независимо какой модуль подключен ....unsugned или ...signed

c <= signed(a) + signed(B);

c <= signed(a) * signed(B);

if signed(a) > signed(B) then ....

 

А если так то гарантированно что все операции беззнаковые?

c <= unsigned(a) + unsigned(B);

c <= unsigned(a) * unsigned(B);

if unsigned(a) > unsigned(B) then ....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вставлю свои 5 копеек. ИМХО, все зависит от подключаемых библиотек. Если пользоваться рекомендуемой numeric_std, то ни одна из этих операций выполнена не будет.

 

Например, все возможные перегрузки сложения:

 

function "+" (L,R: UNSIGNED ) return UNSIGNED;

function "+" ( L,R: SIGNED) return SIGNED;

function "+" ( L: UNSIGNED; R: NATURAL) return UNSIGNED;

function "+" ( L: NATURAL; R: UNSIGNED) return UNSIGNED;

function "+" ( L: INTEGER; R: SIGNED) return SIGNED;

function "+" ( L: SIGNED; R: INTEGER) return SIGNED;

 

 

Т.о. для вашего случая просто не найдется нужной функции и вам придется в явном виде привести типы. Это позволит избежать в дальнейшем вопросов, как с вашей стороны при повторном просмотре кода спустя какой-то срок, так и со стороны коллег или других причастных.

Другой вариант - сразу использовать нужные сигналы - unsigned или signed, а для того, чтобы понять, из названия их тип, можно добавлять _u или _s, в отличие от _slv, например, для обычного вектора.

 

Как-то так.

 

P.S. на счет последнего вопроса - да.

Изменено пользователем Tausinov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вставлю свои 5 копеек. ИМХО, все зависит от подключаемых библиотек. Если пользоваться рекомендуемой numeric_std, то ни одна из этих операций выполнена не будет.

А вот и неправда.

Необходимо производить преобразование типов, правда конструкции получатся монструозные, но работать будут.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот и неправда.

 

Что именно неправда, так и не понял?

Если использовать ieee.std_logic_unsigned, например, то приведения типов не нужны.

 

Необходимо производить преобразование типов

Т.о. для вашего случая просто не найдется нужной функции и вам придется в явном виде привести типы.

 

Я, вроде, об этом и написал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что именно неправда, так и не понял?

Если использовать ieee.std_logic_unsigned, например, то приведения типов не нужны.

 

Я, вроде, об этом и написал.

 

ieee.std_logic_unsigned / std_logic_signed устаревшие библиотеки, рекомендуется юзать ieee.numeric_std с приведением типов. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что именно неправда, так и не понял?

Если использовать ieee.std_logic_unsigned, например, то приведения типов не нужны.

А стоит ли вообще применять стороннюю библиотеку ?

Строгое соблюдение стандарта - это ещё один шаг для минимизации ошибок в проекте.

 

 

 

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А стоит ли вообще применять стороннюю библиотеку ?

Строгое соблюдение стандарта - это ещё один шаг для минимизации ошибок в проекте.

А библиотеки "ieee." разве не считаются стандартными?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А библиотеки "ieee." разве не считаются стандартными?

Не всё, что лежит в ieee, является стандартным. Так исторически сложилось: https://tams.informatik.uni-hamburg.de/vhdl.../FAQ1.html#4.11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А библиотеки "ieee." разве не считаются стандартными?

Вот тут вот неплохо объяснено. http://vhdlguru.blogspot.ru/2010/03/why-li...-preferred.html

Вот перевод http://blablacode.ru/vhdl/496

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...