[an error occurred while processing this directive]
|
Задача:
Есть блок памяти с определенной задержкой считывания(положим 3 такта) Из него нужно прочитать пакеты по 4 слова, но начальный адресс пакета может быть любым. (т.е. например читаем с 1 го адреса 4 слова, затем с 15го 4 слова и т.д.). Есть блок арифметики который работает с этими словами, реализованный на основе конечного автомата.
Теперь сам вопрос. Если я делаю "контроллер" этой памяти, в который пишу: начальный адрес, длину пакета(запас на будующее) и жду когда он выдаст сигнал валидности считаных данных, по которому идут переходы конечного автомата ариметического блока, то получаеться что если я выставляю параметры для "контроллера" памяти в том состоянии КА в котором нахожусь, то я теряю на каждой загрузке контроллера памяти 3 такта, но при этом получаю простую логику функционирования КА.
Что бы не терять эти 3 такта и выставляю адреса с учетом этой задержки (что бы была конвеерная схема). Но это приводит к усложнению конечного автомата и по сути сводит на нет преимущества "контроллера" памяти как такового и не позволяет построить "гибкий" конечный автомат(его функционирование жестко привязанно к конкретному контроллеру памяти).
Вариантов решения проблемы я вижу 3:
1. Вообще отказаться от "контроллера" памяти как такового
2. Сделать "микропрограмный" контроллер памяти, в котором "зашиты" требуемые переходы по адресам.(благо они у меня фиксированные)
3. Сделать "конвееризируемый" контроллер памяти с очередью команд и т.д.
А может быть эта задача решаеться проще ?
ЗЫ. Сильно не пинайте, я только учюсь.
E-mail: info@telesys.ru