2013-05-01 2 views
0

Я использую пакет IEEE с фиксированной точкой в ​​VHDL.Как преобразовать тип VHDL с фиксированной точкой обратно в поплавок?

Он работает хорошо, но теперь я столкнулся с проблемой относительно их строкового представления в тестовом стенде: я хотел бы сбросить их в текстовом файле.

Я обнаружил, что это действительно можно непосредственно написать ufixed или sfixed с помощью:

write(buf, to_string(x)); --where x is either sfixed or ufixed (and buf : line) 

Но тогда я получаю значения как 11110001,10101 (для sfixed представления В8.5).

Итак, мой вопрос: как преобразовать эти числа с фиксированной точкой в ​​реалы (а затем в строку)?

+0

Итак, в приведенном выше примере вы хотите, чтобы 11110001.10101 был записан в ваш текстовый файл как 241.6563? – Jotorious

+0

Из поиска в Google выглядит так: функция to_real(), которую вы можете использовать. – Jotorious

+0

@ Jotorious: yes – JCLL

ответ

0

Переменная должна быть разделена на две части std-logic-vector, целочисленная часть может быть преобразована в строку с использованием стандартного преобразования, но для части дробей преобразование строк немного отличается. Для целочисленной части вам нужно использовать цикл и делить на 10 и преобразовать остаток по модулю в символ ascii, создавая от младшей цифры до более высокой цифры. Для дробной части ему также нужен цикл, но нужно умножить на 10, выровняв пол и выделив эту цифру, чтобы получить соответствующий символ, тогда это целое используется для того, чтобы быть вычтенным до числа фракций и т. Д. Это концепция, работающая в MATLAB, чтобы проверить и сделать версию vhdl, я скоро поделюсь. Я был удивлен, не найдя такой полезной функции нигде. Конечно, формат с фиксированной запятой может варьироваться. Q (N, M) N и M могут иметь всевозможные значения, а для плавающей точки - стандартизированы.

Смежные вопросы