count_enable 0 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба Не уверен что в правильном разделе, но так как разрабатываю я на ПЛИС, то пусть будет здесь. Появилась задача выполнять на ПЛИС очень длинные (тысячи и десятки тысяч) последовательности команд. Последовательности вычисляются нехитрым алгоритмом и представляют собой что-то типа: P+=A+B; P+=A+B; (8x repeat) P=P*A; BRAM(Addr)=P; P+=A+B; (64x repeat)... P=P*A; BRAM(Addr+1)=P; ..and so on and on and on... Хотя алгоритм вычисления и нехитрый, есть несколько десятков последовательностей которые надо выполнять. Сейчас на рассыпухе сделан генератор адресов и опкодов который это делает, но любое изменение алгоритма это огромный гемморой и недели отладки. Добавление новой последовательности приводит к ощутимому росту ресурсов. Процессор не справится - надо выдавать команды на 300+ МГц. Решил сделать это микропрограммным секвенсером - тем более что ветвлений (кроме циклов заданной длины) в алгоритме нет, вся последовательность строго детерминистична. К сожалению, не нашел ничего достойного в современной литературе на эту тему, сейчас работаю по разрозненных публикациях в интернете и руководству по серии Ам2900 из 80х годов. Не хотелось бы изобретать свой велосипед для в общем типовой задачи. Будут ли рекомендации? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба Altera State/Micro Sequencer можно взять. Как готовый велосипед. Ну или ваш проапгрейдить написав "ассемблер." Когда то, очень давно, выкладывал, правда в чужой теме, вот подобное PS. Программировать я не умею почти, поэтому там детский сад, но как умел в то время) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serhiy_UA 1 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба Из книг по микропрограммному управлению подойдет "Майоров С.А., Новиков Г.И. Структура электронных вычислительных машин" - это классика. Похоже у Вас выбор между "жесткой" и "гибкой" логикой. Для рассыпухи это было существенно, а для ПЛИС уже почти нет. Но если Вы все же хотите сделать микропрограммный автомат (МА), то придется придумать простейший язык типа ассемблер, далее транслятор с него в машинные коды, ну и синтез самого МА. В целом это не сложно, но повозиться придется, особенно с языком. Сам когда-то делал на рассыпухе такие спецвычислители на основе МА, тогда ПЛИС еще не было. А на ПЛИС все же проще сделать что-то типа FSM или их группы из нескольких FSM, так может выйти проще. Сори, за жуткий шрифт, исправить не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба а может посмотреть в сторону HLS Vivado ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба Спасибо за ответы. HLS не подходит т.к. длина последовательности зависит от входных данных, плюс надо гибко переключаться между 3-4 типами последовательностей. Так что только программное управление. Конечные автоматы различной степени вложенности используем сейчас, но как я говорил, отладка затруднена (любое изменение задержек в выч. устройстве - переписывай код и отлаживай по новой), гибкость недостаточна, а ресурсов сожрали как почти полноценный процессор. Майорова пока найти не удалось, с альтеровским секвенсером знакомлюсь. Пока что мой секвенсер выглядит похоже на это: https://vak.dreamwidth.org/573813.html . Сейчас размышляю над двумя вариантами: - Вариант без циклов и переходов(линейный проход). Каждое слово в формате "опкод: количество повторений". МА очень простой тогда. Недостаток: может быть недостаточно эффективным. Пусть будет 1к 18-битных слов, 9 под команду, 9 под количество повторений. Тогда у нас может быть только 1024 смены опкода в программе, каждый опкод можно повторить 512 раз. Вроде хватает, но надо считать. - Вариант с переходами. Более близок к классическому МА, но мне жаль отдавать половину или больше каждого слова под адрес перехода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 15 марта, 2019 Опубликовано 15 марта, 2019 · Жалоба 6 hours ago, count_enable said: - Вариант без циклов и переходов(линейный проход). Каждое слово в формате "опкод: количество повторений". МА очень простой тогда. Недостаток: может быть недостаточно эффективным. Пусть будет 1к 18-битных слов, 9 под команду, 9 под количество повторений. Тогда у нас может быть только 1024 смены опкода в программе, каждый опкод можно повторить 512 раз. Вроде хватает, но надо считать. - Вариант с переходами. Более близок к классическому МА, но мне жаль отдавать половину или больше каждого слова под адрес перехода. Вот уж что, что, а память каскадиовать на плисе элементарно. как минимум в 4 раза количество команд вы увеличите легко. (4 блока 4к*9). Более того, вы можете использовать индексируемую таблицу задержек. Например вам нужно всего 16 разных задержек, вместо 512. вот и выделите место под меньшее количество) + можно каскадировать задержки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 227 15 марта, 2019 Опубликовано 15 марта, 2019 · Жалоба 9 часов назад, count_enable сказал: любое изменение задержек Как его получаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 15 марта, 2019 Опубликовано 15 марта, 2019 · Жалоба Приветствую! При построение перепрограммируемых автоматов всегда приходится выбирать компромисс между скоростью исполнения (ака простотой структуры) и эффективностью команд программирования. Простейшая структура секвенсора на блоках памяти - позволить работать на частотах близких к макс. частотам памяти при простой структуре слов команд. Естественно вам надо оценить максимальные требуемые разрядности полей перехода/повторения и тогда уже можно решать по оптимизации структуры команд. На разрядности полей счетчика можно немного с экономить если длинные (но редкие) повторения делать несколькими более короткими командами. А переходы например делать не на любой адрес а выровненными на начала блока из X команд. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hitch 0 20 марта, 2019 Опубликовано 20 марта, 2019 · Жалоба В 15.03.2019 в 00:09, count_enable сказал: Майорова пока найти не удалось Линк Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться