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

Раньше все мои программы не затрагивали типы float, real, universal_real, и сейчас я не понимаю, как писать код.

Камень преткновения заключен в следующей строчке:

 

a_res_zero <= conv_integer(sum_a_zero)/256;

 

a_res_zero - сигнал (вещественное число), далее, я хотела отделить верхние разряды от нижних и присвоить их двум числам типа std_logic_vector, которые были бы выходами тестбенча. Но как это сделать?

 

На этапе, когда я ещё не задумывалась о том, что результат вещественный, vivado выдавал мне, что текущий тип integer, а ожидаемый тип universal_real. Ищу какую-то информацию об этом типе не один день - тщетно.

Также пробовала задавать тип Real - всё равно хочет universal_real

 

Сейчас вижу два решения проблемы и прошу вашей помощи или каких-то советов: 1) Найти какую-то инфу про этот неведомый тип. 2) Найти хорошее описание подходящей мне библиотеки для float или real, чтобы понимать, как пользоваться той или иной функцией.

 

А ещё, я вычитала, что вещественные типы не пригодны для синтеза. Что же делать, если в конечном варианте, я должна буду прошить прогу в кристалл?

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


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

А как же 32х разрядное float которое потому и называется 32х разрядным, что состоит из 32х бит.

Информацию на библиотеки можно посмотреть в соответствующих папках, где лежат исходники стандартных библиотек.

Ну или установите эти исходники.

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


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

Спасибо за ответ!

Да, про float - почитала

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

А где могут лежать исходники библиотек? И где взять исходники для установки?

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


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

А ещё, я вычитала, что вещественные типы не пригодны для синтеза.

Напрямую действительно не пригодны (пока).

Что же делать, если в конечном варианте, я должна буду прошить прогу в кристалл?

Четко поставить задачу, сделать ее декомпозицию на подзадачи, спроектировать структуру модулей решающих подзадачи и задачу, спроектировать функционал этих модулей, отладить модули, собрать все в кучку, отладить кучку, зашить в плис, убедиться что работает. Если нет, то снова отлаживать.

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


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

Добиться отсутствия вещественных чисел я попробую домножением на 10^n и оператором конкатенации, буду выводить отдельно целую и дробную части. Всё бы хорошо, если бы у меня было четкое описание типа float и набора функций к нему, заключенных в определенную библиотеку. Где можно его найти, не подскажете?

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


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

Может быть Вам имеет смысл работать с числами с фиксированной (не плавающей) точкой?

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


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

Всё бы хорошо, если бы у меня было четкое описание типа float и набора функций к нему, заключенных в определенную библиотеку.

Может вам нужно было сделать сопроцессор плавающей точки? Тогда нужно садиться, изучать форматы представления чисел с плавающей точкой, правила математики и реализовывать модули, выполняющие расчет. Библиотеки, для синтеза, вы врядли найдете. Вот, например, народ делает акселераторы плавающей точки.

http://opencores.org/project,fpuvhdl

http://opencores.org/project,floating_point_multiplier

http://opencores.org/project,floating_point_divider

http://opencores.org/project,fp_log

 

ЗЫ. Выложите не ваш пересказ ТЗ, а настоящее ТЗ, поставленное перед вами.

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


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

Возможно, спасибо!

Это числа типа real?

Присоединюсь к совету eugen_pcad_ru

Начните лучше с integer и std_logic_vector в связке со стандартными библиотеками STD_LOGIC_1164, STD_LOGIC_ARITH и STD_LOGIC_SIGNED/STD_LOGIC_UNSIGNED.

Найти их можно прям в софтине. Для ISE они находятся "\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\". Для вивады, думаю, приблизительно там же.

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


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

со стандартными библиотеками STD_LOGIC_1164, STD_LOGIC_ARITH и STD_LOGIC_SIGNED/STD_LOGIC_UNSIGNED.
Не вводите новичка в заблуждение. Это не стандартные библиотеки. Это проприетарные библиотеки фирмы Synopsys. Стандартным пакетом является numeric_std.

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


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

.. проприетарные библиотеки фирмы Synopsys..

Обалдеть, я думаю ТС это понравилось :biggrin:

Важно то, что они поддерживаются даже стандартным синтезатором без дополнительных телодивижений и находятся там же, где и "стандартная" библиотека numeric_std. А выбрать каждый для себя может то, чего пожелает.

П.С.: в конце концов, всё когда-то было новым и нестандартным.

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


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

Обалдеть, я думаю ТС это понравилось :biggrin:
А "правду говорить легко и приятно".

Важно то, что они поддерживаются даже стандартным синтезатором без дополнительных телодивижений и находятся там же, где и "стандартная" библиотека numeric_std.
Стандартная она без всяких кавычек. Потому что является частью стандарта VHDL, в отличие от. Нет ни одной причины использовать... как это будет по-русски... proprietary legacy crap.

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

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


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

Подождите, подождите :Р

С vhdl я уже полгода, с типами integer и std_logic у меня всё в порядке. Перечисленные выше библиотеки почти все прописываю в каждой проге, в зависимости от необходимости.

Задание моё заключается примерно в следующем: по 48 входам поступает информация 48 слов в каждом по 8 бит в слове. Получается большой квадрат 48*48. Мне нужно просуммировать в 9 маленьких подквадратах 16*16 все числа и посчитать среднее в каждом таком небольшом квадрате. Прога сейчас написана до подсчета среднего значения, далее я не знаю в каких типах мне работать, так как нигде не могу найти никакой доступной инфы, а компилятор хочет от меня неведомый universal_real, о котором ну вообще ничего нигде нет!

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


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

Подождите, подождите :Р

С vhdl я уже полгода, с типами integer и std_logic у меня всё в порядке. Перечисленные выше библиотеки почти все прописываю в каждой проге, в зависимости от необходимости.

Задание моё заключается примерно в следующем: по 48 входам поступает информация 48 слов в каждом по 8 бит в слове. Получается большой квадрат 48*48. Мне нужно просуммировать в 9 маленьких подквадратах 16*16 все числа и посчитать среднее в каждом таком небольшом квадрате. Прога сейчас написана до подсчета среднего значения, далее я не знаю в каких типах мне работать, так как нигде не могу найти никакой доступной инфы, а компилятор хочет от меня неведомый universal_real, о котором ну вообще ничего нигде нет!

Вы делаете описание цифровой схемы для синтеза или для моделирования?

Если для синтеза используйте тип signed или unsigned нужной разрядности.

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


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

Всем спасибо! Программу дописала.

Вместо деления на 256 использовала сдвиг вектора на 8 бит.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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