Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ожидание события процессорм
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Golikov A.
Всем привет!
Нужно интеллектуальное усилениеsm.gif... возможно будет длинно, но не знаю как изложить короче... простите

Есть 2 исполнительных модуля, которые принимают, входные воздействия с определенной временной дискретностью 1 мкСек. Для этого на них заведен синхросигнал и все заданные до сигнала данные по фронту в обоих устройствах защелкиваются.

Есть идея ядра процессора, работающего на частоте 100 МГц, управляющего модулями. Устройства висят на его шине как периферия. Процессор без конвейера, работает так
1 такт проверка флага прерывания
1 такт выбор команды (в случае прерывания подмена на переход в обработчик)
4-12 тактов обращение в периферию или регистры (чтение операнда 1)
4-12 тактов обращение в периферию или регистры (чтение операнда 2)
2 такта декодирвание и выполнение команды
4-12 тактов обращение в перефирию или регистры (запись результата)
1 такт перестановка счетчика команд

и того на выполнение команды может уйти от 17 до 41 такта, то есть процессор имеет все возможности в 1 временной дискрет задать значение обоих модулей для обеспечения их синхронной работы. Но проблема заключается в том что может так получиться что в 1 модуль он запишет до синхросигнала, а в другой после, и модули разойдутся, начнут работать не синхронно.

То есть нужна какая то команда ожидания фронта синхросигнала, чтобы процессор ничего не делал до фронта, и как его увидит шел дальше. Это позволит гарантированно синхронизировать задачу параметров. И вот тут вопрос как реализовать эту команду?

Если эту команду сделать как и прочие, то она может быть очень долгой и ничего из нее хорошего не выйдет, фронт может случиться в начале команды, аузнаем о нем через 40 тактов, и оставшихся 60 может не хватить на задачу 2 модулей.

Если ее сделать какой-то особенной, то не понятно что делать с прерывания. Если их обрабатывать параллельно, то они могут "разрезать" выполнение команды, наверное это не очень хорошо, потому обрабатываю их перед каждой командой, но особеная команда будет немного рушить повторяемость.

Опять же выделение особенной команды требует перенести такт декодирования команды выше чтения 2 операндов, и получается что команды становятся все разные, а это усложнит ядро процессора и сожрет все ЛУТы, сейчас же все команды отрабатываются одинаково.

В общем прошу поделиться своими мыслями, по этому вопросы. Как бы сделали вы. И так далее... мне кажется что настало время просто с кем-то поговорить, потому что все решения что я придумал мне не нравятся, не изящные они какие-то

П.С. Задачу 2 устройствам данных за 1 команду не канает, обновление обоих нужно, но редко, и раздувать размер команды ради этого нельзя. Но точное понимание в каком такте задаются входные воздействия строго необходимы, потому даже это не решает проблемы.





des00
выкинуть такой процессор и заменить на программируемый секвенсер, с детерменированным поведением (см. ref design на альтере)
Golikov A.
что-то мне говорит что условные ветвления и реакции на входные воздействи не очень ложатся на работу секвенсеров, я не прав?
des00
Цитата(Golikov A. @ May 25 2015, 00:56) *
что-то мне говорит что условные ветвления и реакции на входные воздействи не очень ложатся на работу секвенсеров, я не прав?

Все зависит от секвенсера. По сути секвесер это control path микропроца + минимальное АЛУ. Зато он полностью детеременирован. Если секвенсер самодельный, то можно вообще сделать таблицу кодирования событий, выходы которого подать на offset program counter. Тогда у вас будет минимальнейшее время на обработку событий, быстрее только КА.
Golikov A.
Шина имеет доступ 4-12 тактов, из-за ее организации. Некоторые модули имеют право отвечать не за 1 такт, и там нужно еще несколько тактов, на то чтобы занять интерфейс. По этой шине доступ имеется еще извне.

Раньше у меня было работа проца синхронно с тактами, по 1 команде за такт. Но там надо было одним процом олопачивать 1 модуль, и все ехало синхронно. А сейчас хочу 2 модуля на 1 проц, и протому хотел "ускорить" проц до нескольких тактов на синхросигнал, чтобы одновременно можно было задать 2 модуля.

Хотя думаю сейчас от этого откажусь, и выведу модулям сигнал принять настройки, и буду задавать сначала 1 модуль, следующей командой 2 модуль, и следующей командой применять настройки к обоим модулям. Потеряю в тактах, но надеюсь это учтется...

А про секвенсеры с АЛУ где поглядеть можно? Лучше для ксалинкса, но не принципиально.
alxkon
Цитата(des00 @ May 24 2015, 19:51) *
выкинуть такой процессор и заменить на программируемый секвенсер, с детерменированным поведением (см. ref design на альтере)

А Вы могли бы подкинуть ссылку на реф. дизайн, пожалуйста? На сайте Альтеры я к сожалению не нешел ничего подобного...
des00
Цитата(Golikov A. @ May 25 2015, 12:50) *
А про секвенсеры с АЛУ где поглядеть можно? Лучше для ксалинкса, но не принципиально.


Цитата(antsu88 @ May 25 2015, 12:53) *
А Вы могли бы подкинуть ссылку на реф. дизайн, пожалуйста? На сайте Альтеры я к сожалению не нешел ничего подобного...

http://www.alterawiki.com/wiki/Avalon_State_Sequencer
alxkon
Цитата(des00 @ May 25 2015, 09:10) *

Спасибо, я искал по "programmable sequencer" - ничего внятного не получил.
Надеюсь автору пример тоже подсобит
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.