Jump to content

    
Sign in to follow this  
Мур

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

Recommended Posts

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, только души нет

Share this post


Link to post
Share on other sites
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:

Share this post


Link to post
Share on other sites
28 minutes ago, des00 said:

так что ли ?

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

Edited by Strob

Share this post


Link to post
Share on other sites
1 hour ago, Strob said:

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

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

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

Share this post


Link to post
Share on other sites
1 hour ago, Strob said:

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

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

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

39 minutes ago, Мур said:

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

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

Edited by Strob

Share this post


Link to post
Share on other sites
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;

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

Share this post


Link to post
Share on other sites
23.09.2020 в 09:22, Мур сказал:

 

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

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

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

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

 

Share this post


Link to post
Share on other sites
45 minutes ago, Flip-fl0p said:

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

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

Share this post


Link to post
Share on other sites
2 часа назад, Мур сказал:

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

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

Share this post


Link to post
Share on other sites
On 9/26/2020 at 12:53 AM, Flip-fl0p said:

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

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

Share this post


Link to post
Share on other sites
On 9/25/2020 at 8:08 PM, Flip-fl0p said:

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

 

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

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

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

Share this post


Link to post
Share on other sites
14 hours ago, Nemos760 said:

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

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

Share this post


Link to post
Share on other sites
19 hours ago, Strob said:

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this