Модераторы: Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> vhdl множественные источники сигнала 
:(
    Опции темы
enzaime
Дата 17.7.2014, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.8.2013

Репутация: нет
Всего: нет



Привет всем, есть вот такой код (компиляция проходит успешно, ошибка при симуляции) (Код специально упрощён)
Код

entity a is
port(clk:in bit);
end entity;
architecture b of a is
type nat_vector is array (natural range<>) of natural;
signal indexes:nat_vector(0 to 3):=(0,2,4,6);
signal rez:nat_vector(0 to 3);
begin
    metka:for i in 0 to 3 generate
     begin
      rez(indexes(i))<=1;
    end generate metka;
end b;

Но если заменить rez(indexes(i))<=1; на  rez(2*i)<=1, то всё норм будет. Мне такой вариант не подходит, т.к. индексы могут быть произвольными например (0,1,4,5) или (1,2,3,2,7,4) так что с помощью только i их задать будет тяжело. Вариант с записью значений в переменную в последовательном цикле, а потом в сигнал мне не подходит, потому что нужна параллельность. Что-то эквивалентное тому, что выше, было бы отлично.
PM MAIL   Вверх
xvr
Дата 18.7.2014, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 1
Всего: 223



Цитата(enzaime @  17.7.2014,  09:31 Найти цитируемый пост)
ошибка при симуляции

Может при синтезе? Симулироваться должно, синтезироваться - нет (независимое присваивание из разных процессов и тем более статическое, одному и тому же сигналу - вещь не синтезируемая)
И вообще код странный  smile 
PM MAIL   Вверх
enzaime
Дата 18.7.2014, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.8.2013

Репутация: нет
Всего: нет



А чем именно странный?

Добавлено через 2 минуты и 26 секунд
Да и разницы для меня нет на каком этапе ошибка. Интересно как её исправить.
PM MAIL   Вверх
xvr
Дата 18.7.2014, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 1
Всего: 223



Цитата(enzaime @  18.7.2014,  18:18 Найти цитируемый пост)
А чем именно странный?

В том, что он делает.

Цитата(enzaime @  18.7.2014,  18:18 Найти цитируемый пост)
 Интересно как её исправить. 

Пока код выглядит бессмысленным, так что и исправлять нечего. Что вы хотели получить в конце концов?

PM MAIL   Вверх
enzaime
Дата 19.7.2014, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.8.2013

Репутация: нет
Всего: нет



Хорошо. Теперь так: задача в том, чтобы 4 элемента вектора q заполнились 1, причём индексы элементов могут быть произвольными (случайными), эти индексы сохранены в массиве indexes.  
Код

entity a is
port(
clk:in bit;
q:out bit_vector(0 to 10)
);
end entity;
architecture b of a is
type nat_vector is array (natural range<>) of natural;
signal indexes:nat_vector(0 to 3):=(0,1,5,9);
signal rez:nat_vector(0 to 3);
begin
    metka:for i in 0 to 3 generate
     begin
      q(indexes(i))<='1' when clk='1' and clk'event else clk='0';
    end generate metka;
end b;

Но выскакивает ошибка, что Signal "q" has multiple sources but is not resolved, хотя в массиве indexes нет повторяющихся значений. Вот в этом и проблема.
PM MAIL   Вверх
xvr
Дата 19.7.2014, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 1
Всего: 223



Цитата(enzaime @  19.7.2014,  13:11 Найти цитируемый пост)
Теперь так: задача в том, чтобы 4 элемента вектора q заполнились 1,

А как они будут сбрасываться в '0'? Кроме того, у вас эти присваивания стоят вне какого либо процесса, т.е. они статические. В таком случае действительно нельзя присваивать таким образом - у вас все строки 14 выполняются одновременно, и непонятно, что делать при одновременной записи в один и тот же элемент массива q (и то, что в indexes нет повторяющихся индексов дела не меняет - массив indexes не является константой, так что повторяющиеся элементы появиться могут позже).

Уберите generate и внесите весть цикл for под process и условие if (clk='1' and clk'event), это будет симулироваться, и может быть даже синтезироваться

PM MAIL   Вверх
enzaime
Дата 19.7.2014, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.8.2013

Репутация: нет
Всего: нет



В примере выше я ошибся здесь:
q(indexes(i))<='1' when clk='1' and clk'event else clk='0';
а хотел написать:
q(indexes(i))<='1' when clk='1' and clk'event else '0';

Про одновременное присваивание, дело в том, что мне именно так и надо, чтобы присваивания происходили одновременно, а с процессом придётся использовать loop for - последовательный оператор. К тому же если изменить в исходном примере q(indexes(i))<='1' when clk='1' and clk'event else '0'; на q(indexes(i))<='1' when clk='1' and clk'event else '0'; , то никакой ошибки нет. Это мне и не ясно, т.к. на мой взгляд принципиально ничего не изменилось.

PM MAIL   Вверх
xvr
Дата 21.7.2014, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 1
Всего: 223



Цитата(enzaime @  19.7.2014,  20:05 Найти цитируемый пост)
q(indexes(i))<='1' when clk='1' and clk'event else '0';

Это у вас какая то дельта функция получится - элемент массива q выдаст импульс нулевой длинны по фронту clk

Цитата(enzaime @  19.7.2014,  20:05 Найти цитируемый пост)
что мне именно так и надо, чтобы присваивания происходили одновременно

Тогда надо убедится, что они (несколько штук) не происходят одновременно в один и тот же элемент массива q, и убедить в этом симулятор  smile 

Или задать правила разрешения для одновременной записи для массива q


PM MAIL   Вверх
enzaime
Дата 24.7.2014, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.8.2013

Репутация: нет
Всего: нет



Я уж не знаю создавать ли новую тему, но у меня появился ещё вопрос.
Вот есть такой код:

Код

use resoution_func.all; 
entity test is
port(
x:in bit;
y:in bit;
z:out res_f integer
);

architecture alg of test is
begin
process(x)
begin
if(x='1' and x'event) then
z<=1;
end if;
end process;

process(y)
begin
if(y='1' and y'event) then
z<=2;
end if;
end process;

end alg;

файл с разрешающей функцией:
Код

package resolution_func is
type integer_vector is array (natural range<>) of integer;
function res_f(data:integer_vector) return integer;
end package resolution_func;

package body resolution_func is
function res_f(data:integer_vector) return integer is
begin
return "последнее измененное значение";
end function;
end package body resolution_func;

как-то возникли проблемы с определением последнего измененного значения. Может я вообще изначально неправильно использую средства языка? Но мне как-то непонятно как сделать так чтобы решение test работало правильно.
PM MAIL   Вверх
xvr
Дата 24.7.2014, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 1
Всего: 223



Попробуйте спросить например тут. Там такие вопросы гораздо ближе к основному профилю форума  smile 

PM MAIL   Вверх
enzaime
Дата 25.7.2014, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.8.2013

Репутация: нет
Всего: нет



Спасибо, если найду ответ, то отпишусь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разное (электроника) | Следующая тема »


 




[ Время генерации скрипта: 0.1262 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.