Jump to content

    
Sign in to follow this  
Мур

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

Recommended Posts

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

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

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

 

--взятие  абсолютного значения знакового числа
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 на более мелкие сущности!

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

Share this post


Link to post
Share on other sites

как же красиво все на 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

 

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

2 minutes ago, alexadmin said:

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

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

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

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

Share this post


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

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

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

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

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

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

Share this post


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

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

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

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

 

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

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

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

 

Share this post


Link to post
Share on other sites
31 minutes ago, andrew_b said:

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

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

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

31 minutes ago, andrew_b said:

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

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

Share this post


Link to post
Share on other sites
2 hours ago, andrew_b said:

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

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

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

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

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

Share this post


Link to post
Share on other sites
44 минуты назад, Мур сказал:

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

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

 

 

Share this post


Link to post
Share on other sites

Я бы добавил

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

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

 

 

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

Share this post


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

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

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

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

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

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

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