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

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

В своей деятельности частенько сталкивался со странными ситуациями, когда привычные приёмы не срабатывали. Особенно когда сущности разрастались до размеров больше страницы. Погоня за результатом и инженерный азарт давал энергию на отработку локальных частностей. Перебор вариантов описания одного и того-же в конце срабатывал и не было особо времени разобраться досконально.

Вот и теперь, казалось простая задача, но...  все стало на свои места, когда выделил отдельной сущностью, которую прицепил к основному тексту и все стало так как хотел!

Этот фрагмент имеет отношение к теме  

 

--взятие  абсолютного значения знакового числа
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.numeric_std.all;

entity ABSV is generic(bit_num: integer:=16);
	port(
	CLK		: in STD_LOGIC;
	XXPUT	:in STD_LOGIC_VECTOR(bit_num-1 downto 0);
	clken 	: in STD_LOGIC;
	XUPUTR	:out STD_LOGIC_VECTOR(bit_num-1 downto 0));
end entity ABSV;

architecture beh of ABSV is
begin	

process (CLK)
begin	
  if CLK='1' and CLK'event then
		if clken = '1' then
			if	XXPUT(bit_num-1) = '1'  then
             			XUPUTR<= std_logic_vector(to_unsigned(to_integer(unsigned(not XXPUT )) + 1, bit_num));
			else
             			XUPUTR<= XXPUT;
			end if;
		end if;
	end if;
 end process;
end architecture beh;

image.thumb.png.bfa4cbd26aeb89685b71c6aac6160bbe.png

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

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

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

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


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

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

module abs #(parameter W = 8) (input [W-1 : 0] pipa, output [W-1 : 0] popa) ;
  assign popa = pipa ^ {W{pipa[W-1]}} + pipa[W-1];
endmodule

 

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


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

37 minutes ago, des00 said:

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

Отлично!  Убеждаюсь в верности выбора темы...  Надеюсь на полное раскрытие преимуществ Верилога!

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


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

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

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


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

Приветствую!

2 minutes ago, alexadmin said:

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

Безграмотному можно все хоть по слогам расписать на любом языке - ему все одно  ничего не понятно будет :unknw:

 

Удачи! Rob.

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


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

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

В Верилоге все честнее. Там расписываем себе все сами.  Без сервиса универсальных библиотек VHDL.

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


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

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

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

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

Вывод неправильный.

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

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

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


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

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

--взятие абсолютного значения знакового числа

Могу сказать по секрету, что есть функция ieee.numeric_std.abs, которая делает то, что вам нужно.

Могу ещё раз повторить, что изучение языка -- это не только изучение синтаксиса и семантики, но и стандартных библиотек, дабы не заниматься велосипедоизобретательством.

 

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

В Верилоге все честнее. Там расписываем себе все сами.  Без сервиса универсальных библиотек VHDL.

Тут VHDL передаёт Verilog'у пламенный привет и желает удачи в велосипедостроении.

 

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


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

31 minutes ago, andrew_b said:

Могу сказать по секрету, что есть функция ieee.numeric_std.abs, которая делает то, что вам нужно.

Мне это известно.  Щупал..

Но тема родилась о конфликтах и цель, чтобы запомнилось начинающим.

31 minutes ago, andrew_b said:

Тут VHDL передаёт Verilog'у пламенный привет и желает удачи в велосипедостроении.

Я это и подчеркивал!...

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


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

2 hours ago, andrew_b said:

Вывод неправильный.

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

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

Спасибо.  Первый ваш вывод будет соблюдаться автоматически, если крошить сущности на более мелкие.

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

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


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

44 минуты назад, Мур сказал:

Первый ваш вывод будет соблюдаться автоматически, если крошить сущности на более мелкие

Даже если не крошить. Просто навсегда забудьте про это проприетарное легаси.

 

 

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


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

1 hour ago, andrew_b said:

 навсегда забудьте про это проприетарное легаси.

Спасибо.  Беру на вооружение!

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


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

Я бы добавил

3 часа назад, andrew_b сказал:

Даже если не крошить. Просто навсегда забудьте про это проприетарное легаси.

 

 

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

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


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

14 hours ago, wolfman said:

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

Хм..  Как раз я так и действовал!

И опять-таки, если не учитывать конфликтность библиотек и тупо брать примеры из интернета, то в 80% случаев будет ждать неудача.  НО!

Достаточно было заставить себя создать отдельную сущность, то в удача была бы гарантирована..

Ох уж эта спешка!...

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


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

Гость vitzap

Кстати, есть ли подобные библиотеки для Verilog (я на этот язык не так давно переехал)? Чтоб не изобретать велосипеды.

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


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

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

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

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

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

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

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

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

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

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