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

11 часов назад, yes сказал:

... а с 31-битом в VHDL-ной математике неоднократно - наверно все на этот костыль наступали :)

и вполне возможно, что 32-х битов недостаточно уже будет для арифметики - что тогда делать?

А можно немного раскрыть детали этой темы? Желательно с конкретными примерами...

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


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

3 часа назад, Самурай сказал:

А можно немного раскрыть детали этой темы?

А что тут раскрывать? Стандарт гарантирует 32-битные целые. Можно больше, но это на усмотрение вендоров. Фактически все и поддреживают только 32 бита.

Теперь у нас есть VHDL-2019, а он устанавливает 64-битные целые, но поддержку этого стандарта ждать мы будем долго. Очень долго.

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


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

1 минуту назад, andrew_b сказал:

А что тут раскрывать? Стандарт гарантирует 32-битные целые. Можно больше, но это на усмотрение вендоров. Фактически все и поддреживают только 32 бита.

Теперь у нас есть VHDL-2019, а он устанавливает 64-битные целые, но поддержку этого стандарта ждать мы будем долго. Очень долго.

Спасибо, но что такое integer в VHDL-е я знаю. Я не знаю, почему пользователь ыыыыы.... yes неоднократно наступал на костыль с 31-м битом в VHDL, почему он считает, что все на этот костыль наступали тоже, и самое интересное - откуда у этого пользователя такая трагичность и безысходность в голосе за судьбу несчастной арифметики в VHDL??? Неужели он и правда считает, что в VHDL-е нельзя сложить, к примеру, два 40-а битных числа???? Умножить? Поделить? Выполнить логическую операцию наконец???? Может это просто не получилось только у него одного? Да... жаль бедолагу...    

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


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

On 10/11/2019 at 10:53 PM, MrGalaxy said:

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

вы сильно ошибаетесь, прям очень. Судя по вашей фразе мне нужно выкинуть все что за 20 лет написано, т.к. оно не работает))))

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


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

On 10/12/2019 at 7:51 AM, Самурай said:

Спасибо, но что такое integer в VHDL-е я знаю. Я не знаю, почему пользователь ыыыыы.... yes неоднократно наступал на костыль с 31-м битом в VHDL, почему он считает, что все на этот костыль наступали тоже, и самое интересное - откуда у этого пользователя такая трагичность и безысходность в голосе за судьбу несчастной арифметики в VHDL??? Неужели он и правда считает, что в VHDL-е нельзя сложить, к примеру, два 40-а битных числа???? Умножить? Поделить? Выполнить логическую операцию наконец???? Может это просто не получилось только у него одного? Да... жаль бедолагу...    

ну так попробуйте обойтись без сахаровской демагогии и напишите, например, 29-ти разрядный аккумулятор, который каждый такт прибавляет константу, задаваемую при инстанциации (generic), каждый такт и имеет два входных 25-ти беззнаковых числа со стробами, одно вычитается, другое прибавляется по соответствующему стробу, на выход три старших бита (задание бредовое, чтоб не нагуглилось сразу, но тем не менее - это будет NCO, три бита можно на таблицу синусов подавать, число код частоты, два входа коррекции...)

напишите и посмотрим, наступите или нет. а потом уже будем рассуждать про 40 бит и т.п.

------------------

уж не знаю, чем я обидел пользователя на сахаре, лет 5 там уже не писал. но мое мнение, сорри за офтоп, что сахара это зеркало деградации отечественной электроники. там кстати и сократились всякие "наукоемкие" конференции типа dsp, плис и т.п.

-----------------

я вообще-то имел роль VHDL-гуру :), как это ни смешно, в одной конторе и студенты и начинающие авторы с этим вопросом обращались, и у Гейслера в его либе есть такая ошибка

собственно там все просто и скучно весьма, но хотелось бы увидеть ответ, если пользователь Самурай сумеет не наступить - я тогда напишу (может кстати и поправили это в тулзах современных - я давно не брал в руки шашки)

On 10/12/2019 at 7:19 AM, andrew_b said:

А что тут раскрывать? Стандарт гарантирует 32-битные целые. Можно больше, но это на усмотрение вендоров. Фактически все и поддреживают только 32 бита.

Теперь у нас есть VHDL-2019, а он устанавливает 64-битные целые, но поддержку этого стандарта ждать мы будем долго. Очень долго.

речь про 31 бит. и я вобщем-то дал вредный совет выше :)

наверно, всю интригу погубил этим коментом.

это естественно не проблема языка, и она обходится, но я сталкивался с тем, что люди пишут с этой ошибкой. по-моему и сюда писал (давно было и не уверен), ну и мне объяснили, что так и должно быть

 

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


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

--------------

чего-то у меня так сразу не получилось вспомнить код - смысл: в VHDL integer всегда знаковый, и максимальное значение +2**31, но к/из нему/него можно приводить и беззнаковые числа. но как это должно быть сделано, чтобы сразу было не видно - я сейчас не смог написать. мне казалось, что в операциях с generic-ом это могло проявится достаточно просто, но так сразу не вспомнил. попозже попробую найти как это у Гейслера было, но опять же тех версий библиотек уже нету... то есть признаю - специально написать так, чтобы терялся знаковый бит у меня не получилось

 

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


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

пример сумматора с разрядностью более 32 бита

 

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity adder_half_unsigned_reg is
generic(
  N       : integer := 256);
port (
  i_clk     : in     std_logic;
  i_add1    : in     std_logic_vector(N-1 downto 0);
  i_add2    : in     std_logic_vector(N-1 downto 0);
  o_sum     : out    std_logic_vector(N-1 downto 0));
end adder_half_unsigned_reg;
architecture rtl of adder_half_unsigned_reg is
signal r_add1    : unsigned(N-1 downto 0);
signal r_add2    : unsigned(N-1 downto 0);
signal w_sum     : unsigned(N-1 downto 0);
begin
-- combinatorial adder
  w_sum <= r_add1 + r_add2;
r_process : process(i_clk)
begin
  if(rising_edge(i_clk)) then
  
  -- register input
    r_add1      <=  unsigned(i_add1);
    r_add2      <=  unsigned(i_add2);
    
  -- register output
    o_sum       <= std_logic_vector(w_sum);
    
  end if;
end process r_process;

Я не понял сложностей/проблемы с разрядностью, хотя перечитал несколько раз ветку...

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


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

5 минут назад, Maverick_ сказал:

пример сумматора с разрядностью более 32 бита

С векторами ограничений на разрядность нет. Речь идёт о типе integer.

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


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

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

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


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

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

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


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

извиняюсь за суету. то есть проблему я помню, так как меня это сильно удивило в свое время. но вчера попробовал код написать, как запомнил - либо работает, либо компиляция с ошибкой (был вариант с варнингом и правильным результатом)

сам по себе знаковый бит (в сложении/вычитании) вобщем-то только для красоты, не должно быть разницы между signed и unsigned. то есть это в какой-то последовательности преобразований типов возникало...

может я еще маски упускаю - насколько помню, тогда всякие DMA и арбитры шины писали, и неоднократно (то есть разные люди) сталкивались с проблемами 31-го бита адреса.

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


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

Не сочтите за оффтоп =)

А есть хоть одно существенное преимущество или удобство в использовании integer, а не signed/unsigned? Просто практически никогда integer не использую(ну кроме счетчиков и мест когда надо обращаться к массивам). Полный контроль разрядностей, все видно, прозрачно. Чем инты так хороши?

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


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

18 minutes ago, Strob said:

А есть хоть одно существенное преимущество или удобство в использовании integer, а не signed/unsigned?

константы удобнее задавать

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


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

10 часов назад, Strob сказал:

Не сочтите за оффтоп =)

А есть хоть одно существенное преимущество или удобство в использовании integer, а не signed/unsigned? Просто практически никогда integer не использую(ну кроме счетчиков и мест когда надо обращаться к массивам). Полный контроль разрядностей, все видно, прозрачно. Чем инты так хороши?

Вот для счётчиков и удобно. Если арифметика используется тоже удобно. Весовые функции, константы... Смотря какие задачи, а, возможно, кто как привык.

И при описании сигналов явно указываешь integer range 0 to 15 или range -8 to 7 , и сразу понятно есть там знак или нет, а порт при этом один и тот же [3..0].

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


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

Я в VHDL использовал integer только для индексов, а собственно арифметику только на  numeric_std.signed/unsigned, так что никаких проблем с длиной и 31-м битом не было. Правда, пришлось сделать свою библиотеку для удобных преобразований векторов и ещё всякой всячины. При этом арифметика на VHDL внезапно получается проще и надёжнее, чем на Верилог, но вот про чистую логику этого сказать нельзя.

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


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

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

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

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

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

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

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

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

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

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