| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разное (электроника) > vhdl множественные источники сигнала |
| Автор: enzaime 17.7.2014, 09:31 | ||
Привет всем, есть вот такой код (компиляция проходит успешно, ошибка при симуляции) (Код специально упрощён)
Но если заменить rez(indexes(i))<=1; на rez(2*i)<=1, то всё норм будет. Мне такой вариант не подходит, т.к. индексы могут быть произвольными например (0,1,4,5) или (1,2,3,2,7,4) так что с помощью только i их задать будет тяжело. Вариант с записью значений в переменную в последовательном цикле, а потом в сигнал мне не подходит, потому что нужна параллельность. Что-то эквивалентное тому, что выше, было бы отлично. |
| Автор: xvr 18.7.2014, 13:43 |
Может при синтезе? Симулироваться должно, синтезироваться - нет (независимое присваивание из разных процессов и тем более статическое, одному и тому же сигналу - вещь не синтезируемая) И вообще код странный |
| Автор: enzaime 18.7.2014, 18:18 |
| А чем именно странный? Добавлено через 2 минуты и 26 секунд Да и разницы для меня нет на каком этапе ошибка. Интересно как её исправить. |
| Автор: xvr 18.7.2014, 19:11 |
В том, что он делает. Пока код выглядит бессмысленным, так что и исправлять нечего. Что вы хотели получить в конце концов? |
| Автор: enzaime 19.7.2014, 13:11 | ||
Хорошо. Теперь так: задача в том, чтобы 4 элемента вектора q заполнились 1, причём индексы элементов могут быть произвольными (случайными), эти индексы сохранены в массиве indexes.
Но выскакивает ошибка, что Signal "q" has multiple sources but is not resolved, хотя в массиве indexes нет повторяющихся значений. Вот в этом и проблема. |
| Автор: enzaime 19.7.2014, 20:05 |
| В примере выше я ошибся здесь: 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'; , то никакой ошибки нет. Это мне и не ясно, т.к. на мой взгляд принципиально ничего не изменилось. |
| Автор: xvr 21.7.2014, 12:47 | ||
Это у вас какая то дельта функция получится - элемент массива q выдаст импульс нулевой длинны по фронту clk
Тогда надо убедится, что они (несколько штук) не происходят одновременно в один и тот же элемент массива q, и убедить в этом симулятор Или задать http://www.it.kth.se/courses/IL2217/1011/ResolutionFunctions.pdf для одновременной записи для массива q |
| Автор: enzaime 24.7.2014, 08:44 | ||||
| Я уж не знаю создавать ли новую тему, но у меня появился ещё вопрос. Вот есть такой код:
файл с разрешающей функцией:
как-то возникли проблемы с определением последнего измененного значения. Может я вообще изначально неправильно использую средства языка? Но мне как-то непонятно как сделать так чтобы решение test работало правильно. |
| Автор: xvr 24.7.2014, 12:59 |
| Попробуйте спросить например http://electronix.ru/forum/index.php?showforum=16. Там такие вопросы гораздо ближе к основному профилю форума |
| Автор: enzaime 25.7.2014, 09:07 |
| Спасибо, если найду ответ, то отпишусь. |