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

Конфликты библиотек. Собираем наблюдения из практики.

22 hours ago, alexadmin said:

То что написано у автора можно записать и красивее. Но по-крайней мере раскрывает суть алгоритма. А эти битовые манипуляции ничего по факту не экономят (кроме трех строк текста), но для читателя непрозрачны.

ну насчет экономии, вы ошибаетесь. на разных платформах

  assign popa = pipa ^ {W{pipa[W-1]}} + pipa[W-1];
  assign popa = pipa[W-1] ? (~pipa + 1'b1) : pipa;
  assign popa = pipa[W-1] ? -pipa : pipa; // ($signed(pipa) < 0) ? -pipa : pipa;

может дать разный результат, по ресурсу и времянке)

ЗЫ. Второй вариант один в один как на VHDL, только души нет

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


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

On 9/23/2020 at 9:22 AM, Мур said:

XUPUTR<= std_logic_vector(to_unsigned(to_integer(unsigned(not XXPUT )) + 1, bit_num));

Зачем столько преобразований? Достаточно только std_logic_vector().

On 9/23/2020 at 9:33 AM, des00 said:

как же красиво все на VHDL, аж ностальгическую слезу прошибло, не то что на бездушном верилоге

А в vhdl можно без параметра. :crazy:

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


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

9 minutes ago, Strob said:

А в vhdl можно без параметра. :crazy:

так что ли ?

assign popa = pipa ^ {$size(pipa){$high(pipa)}} + pipa[$high(pipa)];

 

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


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

28 minutes ago, des00 said:

так что ли ?

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

Изменено пользователем Strob

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


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

1 hour ago, Strob said:

Зачем столько преобразований? Достаточно только std_logic_vector().

А в vhdl можно без параметра. :crazy:

Скорее всего  можно.  Я не экспериментировал особо...  Подхватил  привычное  в интеренете   отсюда  https://coderoad.ru/15914859/VHDL-как-добавить-1-в-STD_LOGIC_VECTOR

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


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

1 hour ago, Strob said:

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

popa <= (pipa xor pipa(pipa'high)) + pipa(pipa'high);

при этом порты можно указать как unsigned без размера.

39 minutes ago, Мур said:

Скорее всего  можно.

Беззнаковое в либе numeric_std может напрямую складываться с целым. Преобразования не нужны

Изменено пользователем Strob

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


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

On 9/23/2020 at 11:49 AM, andrew_b said:

Правильный вывод первый: никогда не используйте STD_LOGIC_ARITH, STD_LOGIC_UNSIGNED, STD_LOGIC_SIGNED. Используйте только numeric_std.

Знаменитый  MachWorks  придерживается этого же правила!  В генерации HDL на несколько листов (в зависимости от количественного состава модели) В шапке ставится numeric...

-- Generated by MATLAB 9.7 and HDL Coder 3.15
-- -------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;		--<<<<
USE work.XXXX_pkg.ALL;

Так они упрощают себе жизнь.

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


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

Справедливости ради многие референсные дизайны из стандартных библиотек используют только  std_logic_1164

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


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

23.09.2020 в 09:22, Мур сказал:

 

Конфликт   IEEE.STD_LOGIC_ARITH.all;   с    IEEE.numeric_std.all;  ставил преграды!  И тут вспомнились ВСЕ подобные ситуации...   

Отсюда вывод,-  крошите ваше написание VHDL на более мелкие сущности!

Будет больше экономии времени..

Вывод только один - использовать стандартные библиотеки, которой и является IEEE.numeric_std.all; Разбивать на сущности надо только для удобства, и упрощения понимания архитектуры проекта.  Ну или разбивать на некие логические куски, которые удобно применять в дальнейшем. 

 

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


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

45 minutes ago, Flip-fl0p said:

Вывод только один - использовать стандартные библиотеки, которой и является IEEE.numeric_std.all; Разбивать на сущности надо только для удобства, и упрощения понимания архитектуры проекта.  Ну или разбивать на некие логические куски, которые удобно применять в дальнейшем. 

Полностью согласен! Особенно многократное применение...   Ну а понимание, это  святое! Только полноценный бенч лучше даже комментов...

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


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

2 часа назад, Мур сказал:

Полностью согласен! Особенно многократное применение...   Ну а понимание, это  святое! Только полноценный бенч лучше даже комментов...

Как по мне, ценность правильных коментариев важнее всего. Ибо помнить своей код можно неделю, месяц. Но потом все забывается. У меня сейчас очень много кода, и я не могу вспомнить что писал неделю назад. Спасают только комментарии.

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


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

On 9/26/2020 at 12:53 AM, Flip-fl0p said:

Как по мне, ценность правильных коментариев важнее всего. Ибо помнить своей код можно неделю, месяц. Но потом все забывается. У меня сейчас очень много кода, и я не могу вспомнить что писал неделю назад. Спасают только комментарии.

Мне приходилось последние 10 лет сопровождать чужие проекты без бенчей и имеющих фрагментарные(5%) комменты. Эта задача была успешной только благодаря моим глубоким бенчам. Чужой код постигал благодаря ревизии поведения. Так что восстановить понимание для меня просто прогоном сопроводительного тест-бенча. Хорошо, если есть куцый ТЗ, а если нет, то только Бенч раскрывал мне внутренности чужого дизайна! Более того,- находил чудные ошибки, которые предыдущий разработчик отлаживал только "на железе" под SignalTab и не мог видеть все подробности...   Мне уже не нужны комментарии.  Для себя я конечно делаю комментарии, но в них описываю прежде всего "для чего я это делаю и на какие особенности обязательно надо обратить внимание"

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


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

On 9/25/2020 at 8:08 PM, Flip-fl0p said:

Вывод только один - использовать стандартные библиотеки, которой и является IEEE.numeric_std.all; Разбивать на сущности надо только для удобства, и упрощения понимания архитектуры проекта.  Ну или разбивать на некие логические куски, которые удобно применять в дальнейшем. 

 

По поводу стандартных библиотек - тут прям аминь. 

По поводу дробления с коллегой постоянно дисскутируем. Он за более мелкое деление даже без повторного использования, а я не вижу смысла на совсем мелкие сущности разделять. Когда нужно разобраться в чужом проекте и особенно исправить какие-то баги, то мне проще целиком модуль смотреть, а ему наоборот. Если конечно это универсальный модуль типа SPI для работы с каким-нибудь ЦАП, то другой разговор. 

Комментарии тоже привык сразу на функциональные блоки внутри модуля писать.

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


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

14 hours ago, Nemos760 said:

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

Во всем нужен баланс. )) 

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


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

19 hours ago, Strob said:

Во всем нужен баланс. )) 

"Жизнь диктует свои суровые законы!" О. Бендер

Когда существует конфликт библиотек и есть желание пользоваться их благами, то вам неизбежно придется крошить архитектуру на более мелкие сущности как минимум по числу необходимых библиотечных сервисов.

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


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

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

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

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

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

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

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

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

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

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