реклама на сайте
подробности

 
 
> Float в тестбенчах, Как выводить в консоль?
count_enable
сообщение Jun 2 2015, 12:46
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Работаю с 18-битной Q-arithmetic в диапазоне +1..-1. Т.е все 17 бит это дробная часть, 1 бит знаковое расширение. И захотелось мне чтобы в тестбенче сразу в консоль выводило соответствующее значение, а не просто std_logic_vector. Можно ли как-то средствами VHDL сконвертить Q-вектор в дробь?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Timmy
сообщение Jun 2 2015, 17:53
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(count_enable @ Jun 2 2015, 15:46) *
Работаю с 18-битной Q-arithmetic в диапазоне +1..-1. Т.е все 17 бит это дробная часть, 1 бит знаковое расширение. И захотелось мне чтобы в тестбенче сразу в консоль выводило соответствующее значение, а не просто std_logic_vector. Можно ли как-то средствами VHDL сконвертить Q-вектор в дробь?

У меня вот так сделано:
write(l, real(to_integer(signed(v)))*2.0**(1-v'length),field=>10,digits=>6);
Go to the top of the page
 
+Quote Post
count_enable
сообщение Jun 3 2015, 10:47
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Спасибо, то что доктор прописал. А возможно ли средствами VHDL читать из текстового файла числа (десятичный формат 0.6 -например 0.675467 ) и конвертить их в Q1.17 ?
Go to the top of the page
 
+Quote Post
Timmy
сообщение Jun 4 2015, 07:30
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(count_enable @ Jun 3 2015, 13:47) *
Спасибо, то что доктор прописал. А возможно ли средствами VHDL читать из текстового файла числа (десятичный формат 0.6 -например 0.675467 ) и конвертить их в Q1.17 ?

Читать real не пробовал(чукча не читатель, чукча писательsm.gif), а конвертить, естественно, в обратном порядке:
q := to_signed(integer(round(f * 2.0**(q'length-1))), q'length);
для чисел длинее 32 бит написал специальный конвертор:
Код
  function to_signed(v:real; l:positive) return signed is
    variable r, hi, lo:real;
  begin
    assert l < 62 report "result length must be less then 62" severity ERROR;
    if l <= 31 then
      return to_signed(integer(round(v)), l);
    else
      r := v+0.5;
      hi := floor(r/(2.0**30));
      lo := floor(r-hi*2.0**30);
      return to_signed(integer(hi),l-30)&to_signed(integer(lo),30);
    end if;
  end;

Go to the top of the page
 
+Quote Post
count_enable
сообщение Jun 5 2015, 10:55
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Еще раз спасибо!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 22:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.0137 секунд с 7
ELECTRONIX ©2004-2016