Самурай 12 12 октября, 2019 Опубликовано 12 октября, 2019 · Жалоба 11 часов назад, yes сказал: ... а с 31-битом в VHDL-ной математике неоднократно - наверно все на этот костыль наступали :) и вполне возможно, что 32-х битов недостаточно уже будет для арифметики - что тогда делать? А можно немного раскрыть детали этой темы? Желательно с конкретными примерами... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 12 октября, 2019 Опубликовано 12 октября, 2019 · Жалоба 3 часа назад, Самурай сказал: А можно немного раскрыть детали этой темы? А что тут раскрывать? Стандарт гарантирует 32-битные целые. Можно больше, но это на усмотрение вендоров. Фактически все и поддреживают только 32 бита. Теперь у нас есть VHDL-2019, а он устанавливает 64-битные целые, но поддержку этого стандарта ждать мы будем долго. Очень долго. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 12 октября, 2019 Опубликовано 12 октября, 2019 · Жалоба 1 минуту назад, andrew_b сказал: А что тут раскрывать? Стандарт гарантирует 32-битные целые. Можно больше, но это на усмотрение вендоров. Фактически все и поддреживают только 32 бита. Теперь у нас есть VHDL-2019, а он устанавливает 64-битные целые, но поддержку этого стандарта ждать мы будем долго. Очень долго. Спасибо, но что такое integer в VHDL-е я знаю. Я не знаю, почему пользователь ыыыыы.... yes неоднократно наступал на костыль с 31-м битом в VHDL, почему он считает, что все на этот костыль наступали тоже, и самое интересное - откуда у этого пользователя такая трагичность и безысходность в голосе за судьбу несчастной арифметики в VHDL??? Неужели он и правда считает, что в VHDL-е нельзя сложить, к примеру, два 40-а битных числа???? Умножить? Поделить? Выполнить логическую операцию наконец???? Может это просто не получилось только у него одного? Да... жаль бедолагу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 14 октября, 2019 Опубликовано 14 октября, 2019 · Жалоба On 10/11/2019 at 10:53 PM, MrGalaxy said: Это типичный ошибочный подход программиста. Нельзя в плис так делать, работать не будет. вы сильно ошибаетесь, прям очень. Судя по вашей фразе мне нужно выкинуть все что за 20 лет написано, т.к. оно не работает)))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 14 октября, 2019 Опубликовано 14 октября, 2019 · Жалоба 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 бит. и я вобщем-то дал вредный совет выше :) наверно, всю интригу погубил этим коментом. это естественно не проблема языка, и она обходится, но я сталкивался с тем, что люди пишут с этой ошибкой. по-моему и сюда писал (давно было и не уверен), ну и мне объяснили, что так и должно быть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 14 октября, 2019 Опубликовано 14 октября, 2019 · Жалоба -------------- чего-то у меня так сразу не получилось вспомнить код - смысл: в VHDL integer всегда знаковый, и максимальное значение +2**31, но к/из нему/него можно приводить и беззнаковые числа. но как это должно быть сделано, чтобы сразу было не видно - я сейчас не смог написать. мне казалось, что в операциях с generic-ом это могло проявится достаточно просто, но так сразу не вспомнил. попозже попробую найти как это у Гейслера было, но опять же тех версий библиотек уже нету... то есть признаю - специально написать так, чтобы терялся знаковый бит у меня не получилось Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 15 октября, 2019 Опубликовано 15 октября, 2019 · Жалоба пример сумматора с разрядностью более 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; Я не понял сложностей/проблемы с разрядностью, хотя перечитал несколько раз ветку... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 15 октября, 2019 Опубликовано 15 октября, 2019 · Жалоба 5 минут назад, Maverick_ сказал: пример сумматора с разрядностью более 32 бита С векторами ограничений на разрядность нет. Речь идёт о типе integer. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 15 октября, 2019 Опубликовано 15 октября, 2019 · Жалоба Тут видимо проблема высосана из пальца и тем более "неподдерживаемость" обусловлена средой проектирования, а не конкретно ограничениями языка. Вот и начались разборки на ровном месте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 15 октября, 2019 Опубликовано 15 октября, 2019 · Жалоба Можно предположить, что проблемы могут происходить при совершении каких-либо операций с преобразованием через integer. У меня есть подсознательное ощущение что в каких-то арифметических пакетах я встречал подобное. Правда сейчас поковырял исходники библиотек и ничего не смог найти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 15 октября, 2019 Опубликовано 15 октября, 2019 · Жалоба извиняюсь за суету. то есть проблему я помню, так как меня это сильно удивило в свое время. но вчера попробовал код написать, как запомнил - либо работает, либо компиляция с ошибкой (был вариант с варнингом и правильным результатом) сам по себе знаковый бит (в сложении/вычитании) вобщем-то только для красоты, не должно быть разницы между signed и unsigned. то есть это в какой-то последовательности преобразований типов возникало... может я еще маски упускаю - насколько помню, тогда всякие DMA и арбитры шины писали, и неоднократно (то есть разные люди) сталкивались с проблемами 31-го бита адреса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 21 октября, 2019 Опубликовано 21 октября, 2019 · Жалоба Не сочтите за оффтоп =) А есть хоть одно существенное преимущество или удобство в использовании integer, а не signed/unsigned? Просто практически никогда integer не использую(ну кроме счетчиков и мест когда надо обращаться к массивам). Полный контроль разрядностей, все видно, прозрачно. Чем инты так хороши? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 21 октября, 2019 Опубликовано 21 октября, 2019 · Жалоба 18 minutes ago, Strob said: А есть хоть одно существенное преимущество или удобство в использовании integer, а не signed/unsigned? константы удобнее задавать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrGalaxy 9 22 октября, 2019 Опубликовано 22 октября, 2019 · Жалоба 10 часов назад, Strob сказал: Не сочтите за оффтоп =) А есть хоть одно существенное преимущество или удобство в использовании integer, а не signed/unsigned? Просто практически никогда integer не использую(ну кроме счетчиков и мест когда надо обращаться к массивам). Полный контроль разрядностей, все видно, прозрачно. Чем инты так хороши? Вот для счётчиков и удобно. Если арифметика используется тоже удобно. Весовые функции, константы... Смотря какие задачи, а, возможно, кто как привык. И при описании сигналов явно указываешь integer range 0 to 15 или range -8 to 7 , и сразу понятно есть там знак или нет, а порт при этом один и тот же [3..0]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 22 октября, 2019 Опубликовано 22 октября, 2019 · Жалоба Я в VHDL использовал integer только для индексов, а собственно арифметику только на numeric_std.signed/unsigned, так что никаких проблем с длиной и 31-м битом не было. Правда, пришлось сделать свою библиотеку для удобных преобразований векторов и ещё всякой всячины. При этом арифметика на VHDL внезапно получается проще и надёжнее, чем на Верилог, но вот про чистую логику этого сказать нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться