реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> VHDL: назначение на элементы сигнала-массива из разных процессов, Кто силен в чтении стандарта?
alexadmin
сообщение Mar 3 2017, 10:31
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 535
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Имеется массив типа (пишу утрированно ибо в оригинальном коде много лишнего):
array TAr is array (0 to 3) of std_logic_vector(31 downto 0);
signal ar : TAr;

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

В моделсиме вроде как это работало нормально. Синтезируется вивадой тоже без вопросов. Но при попытке прогнать через Vivado Simulator - сыплет X-ами. Кто врет?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Mar 3 2017, 10:59
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 834
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Не скажу, что часто так делаю, но бывает, что разные элементы вектора устанавливаются в разных процессах. Проблем никогда не было. Симулятор -- только Model/QuestaSim, синтезаторы -- Synplify, XST, Quartus.
Go to the top of the page
 
+Quote Post
KalashKS
сообщение Mar 3 2017, 14:58
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 208
Регистрация: 7-02-11
Пользователь №: 62 755



Цитата(andrew_b @ Mar 3 2017, 13:59) *
Не скажу, что часто так делаю, но бывает, что разные элементы вектора устанавливаются в разных процессах. Проблем никогда не было. Симулятор -- только Model/QuestaSim, синтезаторы -- Synplify, XST, Quartus.

Возможно, ваш случай выглядит как-то так.
http://images-cdn.9gag.com/photo/83701_700b.jpg
Нарывался на подобное неоднократно. Нельзя присваивать сигнал частично в процессе при помощи loop, присвоение вне процесса будет проигнорировано. Почему так, не знаю.

Сообщение отредактировал KalashKS - Mar 3 2017, 14:59
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Mar 3 2017, 15:29
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 834
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(KalashKS @ Mar 3 2017, 17:58) *
Возможно, ваш случай выглядит как-то так.
http://images-cdn.9gag.com/photo/83701_700b.jpg

Почему это мой случай? Там вообще написано несколько некорректно.
В списке чувствительности процесса сигнал, который частично изменяется в этом процессе, а частично вне.
Go to the top of the page
 
+Quote Post
KalashKS
сообщение Mar 3 2017, 15:50
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 208
Регистрация: 7-02-11
Пользователь №: 62 755



Цитата(andrew_b @ Mar 3 2017, 18:29) *
Почему это мой случай? Там вообще написано несколько некорректно.
В списке чувствительности процесса сигнал, который частично изменяется в этом процессе, а частично вне.

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

Сообщение отредактировал KalashKS - Mar 3 2017, 15:52
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Mar 3 2017, 16:01
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 535
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Цитата(KalashKS @ Mar 3 2017, 18:50) *
Проблемы в моделировании от этого не зависят. Если процесс будет синхронным, результат будет такой же. Интетесно, у автора способ присвоения похож, или нет.


у меня
Код
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);
Go to the top of the page
 
+Quote Post
KalashKS
сообщение Mar 3 2017, 16:09
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 208
Регистрация: 7-02-11
Пользователь №: 62 755



Так вроде должно работать. А иксы с какого места начинаются?
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Mar 3 2017, 19:32
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 535
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Цитата(KalashKS @ Mar 3 2017, 19:09) *
Так вроде должно работать. А иксы с какого места начинаются?


На a(3) как только до a(2) доходят со входа ненулевые значения. Как будто двойной драйвер с разными значениями, но в тексте его не видно, да и синтез идет без проблем.
Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение Mar 4 2017, 14:31
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 717
Регистрация: 11-04-07
Пользователь №: 26 933



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

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


--------------------
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Mar 6 2017, 08:06
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 535
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Цитата(dm.pogrebnoy @ Mar 4 2017, 17:31) *
Это прикол стандарта VHDL, большинство симуляторов буду показывать иксы, но не все. Как вариант, воспользоваться for-generate.
PS https://www.altera.com/support/support-reso...312013_543.html


Черт, меня раскрыли как я ни шифровался. У меня действительно в цикле назначения происходят. Надо же чего придумали, злодеи...
Спасибо!
Go to the top of the page
 
+Quote Post
анатолий
сообщение Mar 18 2017, 13:04
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 220
Регистрация: 10-12-05
Из: Украина
Пользователь №: 12 052



Модель такая: два процесса дают присваивание одному сложному, но наверное, разрешенному (resolved) сигналу.
Причем в 1 процессе драйвера части сигнала - нет, а в другом процеессе - нет дайвера дополненной части сигнала.
Точнее - им драйверы есть, но симулятор должен, согласно VHDLref, подключать туда дефолтное значение.
Так что правильные симуляторы дают в результате "Х". А должны были дать U.

Мораль- надо в каждом процессе присваивать всем элементам сложного объекта какие-то внятные значения.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th December 2017 - 23:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01311 секунд с 7
ELECTRONIX ©2004-2016