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

VHDL: назначение на элементы сигнала-массива из разных процессов

Имеется массив типа (пишу утрированно ибо в оригинальном коде много лишнего):

array TAr is array (0 to 3) of std_logic_vector(31 downto 0);

signal ar : TAr;

 

далее элементы 0, 1, 2 назначаю внутри одного и того же синхронного процесса,

элемент 3 - асинхронно вне процесса

 

В моделсиме вроде как это работало нормально. Синтезируется вивадой тоже без вопросов. Но при попытке прогнать через Vivado Simulator - сыплет X-ами. Кто врет?

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


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

Не скажу, что часто так делаю, но бывает, что разные элементы вектора устанавливаются в разных процессах. Проблем никогда не было. Симулятор -- только Model/QuestaSim, синтезаторы -- Synplify, XST, Quartus.

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


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

Не скажу, что часто так делаю, но бывает, что разные элементы вектора устанавливаются в разных процессах. Проблем никогда не было. Симулятор -- только Model/QuestaSim, синтезаторы -- Synplify, XST, Quartus.

Возможно, ваш случай выглядит как-то так.

http://images-cdn.9gag.com/photo/83701_700b.jpg

Нарывался на подобное неоднократно. Нельзя присваивать сигнал частично в процессе при помощи loop, присвоение вне процесса будет проигнорировано. Почему так, не знаю.

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

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


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

Возможно, ваш случай выглядит как-то так.

http://images-cdn.9gag.com/photo/83701_700b.jpg

Почему это мой случай? Там вообще написано несколько некорректно.

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

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


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

Почему это мой случай? Там вообще написано несколько некорректно.

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

Проблемы в моделировании от этого не зависят. Если процесс будет синхронным, результат будет такой же. Интетесно, у автора способ присвоения похож, или нет.

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

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


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

Проблемы в моделировании от этого не зависят. Если процесс будет синхронным, результат будет такой же. Интетесно, у автора способ присвоения похож, или нет.

 

у меня

process(clk)
if rising_edge(clk) then
     ar(0) <= inp;
     ar(1) <= ar(0);
     ar(2) <= ar(1);
end if;
end process;

ar(3) <= ar(2);

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


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

Так вроде должно работать. А иксы с какого места начинаются?

 

На a(3) как только до a(2) доходят со входа ненулевые значения. Как будто двойной драйвер с разными значениями, но в тексте его не видно, да и синтез идет без проблем.

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


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

alexadmin

Это прикол стандарта VHDL, большинство симуляторов буду показывать иксы, но не все. Как вариант, воспользоваться for-generate.

 

PS https://www.altera.com/support/support-reso...312013_543.html

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


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

Это прикол стандарта VHDL, большинство симуляторов буду показывать иксы, но не все. Как вариант, воспользоваться for-generate.

PS https://www.altera.com/support/support-reso...312013_543.html

 

Черт, меня раскрыли как я ни шифровался. У меня действительно в цикле назначения происходят. Надо же чего придумали, злодеи...

Спасибо!

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


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

Модель такая: два процесса дают присваивание одному сложному, но наверное, разрешенному (resolved) сигналу.

Причем в 1 процессе драйвера части сигнала - нет, а в другом процеессе - нет дайвера дополненной части сигнала.

Точнее - им драйверы есть, но симулятор должен, согласно VHDLref, подключать туда дефолтное значение.

Так что правильные симуляторы дают в результате "Х". А должны были дать U.

 

Мораль- надо в каждом процессе присваивать всем элементам сложного объекта какие-то внятные значения.

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


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

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

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

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

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

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

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

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

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

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