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

Добрый день, всем!

Недавно начал осваивать ПЛИС.  В качестве HDL выбрал VHDL. ПЛИС ф. Xilinx, среда разработки Vivado 2018.3 
Столкнулся со сложностью: при описании в Vivado модуля на VHDL 2008 невозможно добавить этот моль в IP integrator (окно Diagram см. рисунок во вложении) т.к. кнопка OK не активна. При использовании VHDL (не 2008) проблем не возникает.

Из информации в интернете не совсем понятно, что делать. Кто-то пишет, что невозможно добавить модуль описанный на VHDL 2008 в IP integrator. В документации же написано что есть поддержка VHDL 2008. 

Знающие подскажите что делать?В данном же примере VHDL 2008 необходим для описания 8-и входового И (y <= ana a).

 

Окно Diagram.png

and8.png

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


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

Spoiler

Не холивара ради - попробуйте верилог, он гораздо дружелюбнее. И, как правило, гораздо лучше поддержан во всех САПР.

Посмотрите настройки проекта - раздел языков. Похоже, что нужно включить поддержку VHDL2008. К сожалению, вивады под рукой нет, но в quartus & libero в настройках точно есть переключатели, которые определяют, какую версию языка использовать.

 

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


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

25 minutes ago, nice_vladi said:
  Reveal hidden contents

Не холивара ради - попробуйте верилог, он гораздо дружелюбнее. И, как правило, гораздо лучше поддержан во всех САПР.

Посмотрите настройки проекта - раздел языков. Похоже, что нужно включить поддержку VHDL2008. К сожалению, вивады под рукой нет, но в quartus & libero в настройках точно есть переключатели, которые определяют, какую версию языка использовать.

 

Поддержка VHDL 2008 включена в файле and8.vhd (на второй картинке видно Type: VHDL 2008). Проблема в том, что я не могу файл and8.vhd (с указанным в настройках VHDL 2008) добавить в окно графического дизайнера...

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


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

1 час назад, [email protected] сказал:

В данном же примере VHDL 2008 необходим для описания 8-и входового И (y <= ana a).

Чтои менно из 2008 там используется, чего нет в 93?

 

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


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

Понимаю, ответ немного не в тему, но меня смутила фраза "VHDL 2008 необходим для описания 8-и входового И".

VHDL 2008 стараюсь избегать, чтобы не встречать сложностей, с которыми столкнулся автор темы, сам пишу в таких случаях вот так :

вне процесса

y <= '1' when (a="11111111") else '0';

в процессе это будет выглядеть так:

if (a="11111111") then y<='1'; else y <= '0'; end if;

 

По фэншую, наверное, следует написать так, что должно работать для вектора произвольной (разумной) длины:

y <= '1' when (CONV_INTEGER(a) = 2**(a'length)-1) else '0';

 

 

Для неразумной длины

 

entity AND_VECTOR is
    generic(LEN : integer := 8);
    port (        A        : in     std_logic_vector(LEN -1 downto 0); 
                    Y        : out    std_logic );
end AND_VECTOR;
architecture AND_V of AND_VECTOR is
begin
process(A)
 begin
  Y<= '1';
  for i in 0 to LEN -1
  loop
    if A(i) = '0' then Y<= '0';end if;
  end loop;
end process;
end AND_V;

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

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


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

48 минут назад, [email protected] сказал:

Проблема в том, что я не могу файл and8.vhd (с указанным в настройках VHDL 2008) добавить в окно графического дизайнера...

А зачем это нужно? Именно "графический дизайнер"?

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


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

Цитата

 

Добрый день, всем!

Недавно начал осваивать ПЛИС.  В качестве HDL выбрал VHDL. ПЛИС ф. Xilinx, среда разработки Vivado 2018.3 
Столкнулся со сложностью: при описании в Vivado модуля на VHDL 2008 невозможно добавить этот моль в IP integrator (окно Diagram см. рисунок во вложении) т.к. кнопка OK не активна. При использовании VHDL (не 2008) проблем не возникает.

Из информации в интернете не совсем понятно, что делать. Кто-то пишет, что невозможно добавить модуль описанный на VHDL 2008 в IP integrator. В документации же написано что есть поддержка VHDL 2008. 

Знающие подскажите что делать?В данном же примере VHDL 2008 необходим для описания 8-и входового И (y <= ana a).

 

Фиговая поддержка у Vivado VHDL2008 если Вам необходимо работать в графическом дизайне.

В нем не поддерживается VHDL 2008. А так-же не поддерживаются никакие другие типы кроме std_logic/std_logic_vector

P.S. Именно убогая поддержка VHDL заставляет меня изучать SystemVerilog. 

 

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


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

58 minutes ago, andrew_b said:

Чтои менно из 2008 там используется, чего нет в 93?

 

Если не установить в настройках VHDL 2008, то сразу пишет ошибку:

image.thumb.png.accd564d15e6e40ce1f24a8b337b36de.png

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


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

56 minutes ago, iosifk said:

А зачем это нужно? Именно "графический дизайнер"?

Если честно может и не нужен. Я только осваиваю ПЛИС. У меня плата Z-turn board с м/с Zynq-7000. В примерах которые я нашел в интернете описается единственный способ заактировать ПЛИС (PL часть) от внутреннего ARM процессора (PS). Что бы это сделать нужно в графическом дизаейнере добавить IP блок - Zynq7 Process System туда же добавить мой модуль (and8) уже от PS получать clk. Это выглядит примерно как на картинке ниже. Да и наглядно и более ясно это делать в графическом виде. 

image.png

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


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

1 hour ago, kaktus said:

Понимаю, ответ немного не в тему, но меня смутила фраза "VHDL 2008 необходим для описания 8-и входового И".

VHDL 2008 стараюсь избегать, чтобы не встречать сложностей, с которыми столкнулся автор темы, сам пишу в таких случаях вот так :

вне процесса

y <= '1' when (a="11111111") else '0';

в процессе это будет выглядеть так:

if (a="11111111") then y<='1'; else y <= '0'; end if;

 

По фэншую, наверное, следует написать так, что должно работать для вектора произвольной (разумной) длины:

y <= '1' when (CONV_INTEGER(a) = 2**(a'length)-1) else '0';

 

 

Для неразумной длины

 

entity AND_VECTOR is
    generic(LEN : integer := 8);
    port (        A        : in     std_logic_vector(LEN -1 downto 0); 
                    Y        : out    std_logic );
end AND_VECTOR;
architecture AND_V of AND_VECTOR is
begin
process(A)
 begin
  Y<= '1';
  for i in 0 to LEN -1
  loop
    if A(i) = '0' then Y<= '0';end if;
  end loop;
end process;
end AND_V;

 

Возможно я немного некорректно выразился с фразой  "VHDL 2008 необходим для описания 8-и входового И". Дело в том что я повторяю примеры приведенные в небезызвестной книге "Цифровая схемотехника и архитектура компьютера" второе издание Дэвид М. Хэррис и Сара Л. Хэррис. Пример 4.4. Восьмивходовой И. Чтобы запустить проект и в Vivado или ModelSim требуется в настройках устанавливать именно VHDL 2008.

46 minutes ago, Flip-fl0p said:

Фиговая поддержка у Vivado VHDL2008 если Вам необходимо работать в графическом дизайне.

В нем не поддерживается VHDL 2008. А так-же не поддерживаются никакие другие типы кроме std_logic/std_logic_vector

P.S. Именно убогая поддержка VHDL заставляет меня изучать SystemVerilog. 

 

Т.е. для меня без вариантов... или VHDL 2008 без графического дизайна либо VHDL 1993? Вариантов больше нет?:shok:

49 minutes ago, Flip-fl0p said:

Фиговая поддержка у Vivado VHDL2008 если Вам необходимо работать в графическом дизайне.

В нем не поддерживается VHDL 2008. А так-же не поддерживаются никакие другие типы кроме std_logic/std_logic_vector

P.S. Именно убогая поддержка VHDL заставляет меня изучать SystemVerilog. 

 

Т.е. для меня без вариантов... или VHDL 2008 без графического дизайна либо VHDL 1993? Вариантов больше нет?:shok:

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


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

2 часа назад, kaktus сказал:

По фэншую, наверное, следует написать так, что должно работать для вектора произвольной (разумной) длины:

y <= '1' when (CONV_INTEGER(a) = 2**(a'length)-1) else '0';

Это как раз не по феншую.

Во-первых, преобразование в целый тип ограничено 32-битами. Стандарт вам гарантирует минимум 32-битное представление целых чисел. Больше -- на усмотрение вендоров. Как правило, этого никто не делает.

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

В-третьих, не используйте legacy в виде std_logic_arith и производных. Стандарт предоставляет пакет numeric_std.

1 час назад, [email protected] сказал:

Если не установить в настройках VHDL 2008, то сразу пишет ошибку:

Напишите функцию сами или найдите готовую в интернете. Например, в пакете reduce_pack.

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


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

В лоб можно записать вот так: 

 

Y <= '1' when ( A= (A'left downto 0 => '1') ) else '0';

Только на RTL просмотрщике это будет выглядеть как схема сравнения. Но кому какое дело, что нам рисует RTL :biggrin: Ну разве что ВУЗ'овские преподаватели могут придраться к этому. 

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


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

Кажется нашел приемлемое решение проблемы:biggrin:

Написал модуль inv8 на VHDL (93), игнорируя ошибку Error ..... . Вставил в графический дизайнер модуль (inv8). Затем, в настройках inv8.vhd уставил язык VHDL 2008.

Выглядит и работает как 8-и входовой И. Вроде норм. В симуляции, RTL анализе и сгенерирован битстрим.  image.thumb.png.9db96f0d3f3b666303149fe451bde21d.png 

image.thumb.png.47d30b715705c1462b6e325b66d83035.png

image.png

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


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

1 час назад, [email protected] сказал:

 

В Vivado для блок дизайна есть готовые элементы логики. (utility_vector вроде). А вообще делать в блок дизайне лучше только самые верхние уровни проекта, где объединяются готовые большие блоки. 

Я бы порекомендовал симуляцию производить в Modelsim. Ибо симулятор Vivado хоть и красив, но требует после каждого изменения в исходнике перезапуска симуляции, которая занимает неадекватно много времени. А так-же по сравнению с Modelsim раза так в 3 дольше симулирует, если не больше. Но это уже сугубо мое личное мнение.

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


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

1 minute ago, Flip-fl0p said:

В Vivado для блок дизайна есть готовые элементы логики. (utility_vector вроде). А вообще делать в блок дизайне лучше только самые верхние уровни проекта, где объединяются готовые большие блоки. 

Я бы порекомендовал симуляцию производить в Modelsim. Ибо симулятор Vivado хоть и красив, но требует после каждого изменения в исходнике перезапуска симуляции, которая занимает неадекватно много времени. А так-же по сравнению с Modelsim раза так в 3 дольше симулирует, если не больше. Но это уже сугубо мое личное мнение.

На счет ModelSim согласен с Вами, там все гораздо быстрее получается. И да, дизайн ModelSim убогий и нелогичный. Vivado только начал осваивать.

На счет "В Vivado для блок дизайна есть готовые элементы...." не совсем понял. Если речь идет счетчиках, сумматорах и прочих стандартных элементах, то мне это сейчас ненужно, т.к. в данный момент я осваиваю именно VHDL.

Раз уж тут все так весело понеслось)) еще один вопрос не по теме. Вопрос к опытным разработчикам ПЛИС.
Что же выбрать на перспективу VHDL, Verilog или System Verilog? Стандартный ответ о Си подробности Верилогов, его лаконичности и консерватизма VHDL становится ясно из учебников и большинства статей о ПЛИС. Интерисует больше о перспективности... и кто из них более оптимален с чтоки зрения используемых ресурсов ПЛИС. Может еще какие особенности? 

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


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

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

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

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

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

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

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

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

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

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