alexadmin 0 3 марта, 2017 Опубликовано 3 марта, 2017 · Жалоба Имеется массив типа (пишу утрированно ибо в оригинальном коде много лишнего): array TAr is array (0 to 3) of std_logic_vector(31 downto 0); signal ar : TAr; далее элементы 0, 1, 2 назначаю внутри одного и того же синхронного процесса, элемент 3 - асинхронно вне процесса В моделсиме вроде как это работало нормально. Синтезируется вивадой тоже без вопросов. Но при попытке прогнать через Vivado Simulator - сыплет X-ами. Кто врет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 3 марта, 2017 Опубликовано 3 марта, 2017 · Жалоба Не скажу, что часто так делаю, но бывает, что разные элементы вектора устанавливаются в разных процессах. Проблем никогда не было. Симулятор -- только Model/QuestaSim, синтезаторы -- Synplify, XST, Quartus. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 3 марта, 2017 Опубликовано 3 марта, 2017 (изменено) · Жалоба Не скажу, что часто так делаю, но бывает, что разные элементы вектора устанавливаются в разных процессах. Проблем никогда не было. Симулятор -- только Model/QuestaSim, синтезаторы -- Synplify, XST, Quartus. Возможно, ваш случай выглядит как-то так. http://images-cdn.9gag.com/photo/83701_700b.jpg Нарывался на подобное неоднократно. Нельзя присваивать сигнал частично в процессе при помощи loop, присвоение вне процесса будет проигнорировано. Почему так, не знаю. Изменено 3 марта, 2017 пользователем KalashKS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 3 марта, 2017 Опубликовано 3 марта, 2017 · Жалоба Возможно, ваш случай выглядит как-то так. http://images-cdn.9gag.com/photo/83701_700b.jpg Почему это мой случай? Там вообще написано несколько некорректно. В списке чувствительности процесса сигнал, который частично изменяется в этом процессе, а частично вне. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 3 марта, 2017 Опубликовано 3 марта, 2017 (изменено) · Жалоба Почему это мой случай? Там вообще написано несколько некорректно. В списке чувствительности процесса сигнал, который частично изменяется в этом процессе, а частично вне. Проблемы в моделировании от этого не зависят. Если процесс будет синхронным, результат будет такой же. Интетесно, у автора способ присвоения похож, или нет. Изменено 3 марта, 2017 пользователем KalashKS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 3 марта, 2017 Опубликовано 3 марта, 2017 · Жалоба Проблемы в моделировании от этого не зависят. Если процесс будет синхронным, результат будет такой же. Интетесно, у автора способ присвоения похож, или нет. у меня 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 3 марта, 2017 Опубликовано 3 марта, 2017 · Жалоба Так вроде должно работать. А иксы с какого места начинаются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 3 марта, 2017 Опубликовано 3 марта, 2017 · Жалоба Так вроде должно работать. А иксы с какого места начинаются? На a(3) как только до a(2) доходят со входа ненулевые значения. Как будто двойной драйвер с разными значениями, но в тексте его не видно, да и синтез идет без проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 4 марта, 2017 Опубликовано 4 марта, 2017 · Жалоба alexadmin Это прикол стандарта VHDL, большинство симуляторов буду показывать иксы, но не все. Как вариант, воспользоваться for-generate. PS https://www.altera.com/support/support-reso...312013_543.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 6 марта, 2017 Опубликовано 6 марта, 2017 · Жалоба Это прикол стандарта VHDL, большинство симуляторов буду показывать иксы, но не все. Как вариант, воспользоваться for-generate. PS https://www.altera.com/support/support-reso...312013_543.html Черт, меня раскрыли как я ни шифровался. У меня действительно в цикле назначения происходят. Надо же чего придумали, злодеи... Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aser 0 18 марта, 2017 Опубликовано 18 марта, 2017 · Жалоба Модель такая: два процесса дают присваивание одному сложному, но наверное, разрешенному (resolved) сигналу. Причем в 1 процессе драйвера части сигнала - нет, а в другом процеессе - нет дайвера дополненной части сигнала. Точнее - им драйверы есть, но симулятор должен, согласно VHDLref, подключать туда дефолтное значение. Так что правильные симуляторы дают в результате "Х". А должны были дать U. Мораль- надо в каждом процессе присваивать всем элементам сложного объекта какие-то внятные значения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться