des00 25 21 июня, 2005 Опубликовано 21 июня, 2005 · Жалоба Задача: Есть блок памяти с определенной задержкой считывания(положим 3 такта) Из него нужно прочитать пакеты по 4 слова, но начальный адресс пакета может быть любым. (т.е. например читаем с 1 го адреса 4 слова, затем с 15го 4 слова и т.д.). Есть блок арифметики который работает с этими словами, реализованный на основе конечного автомата. Теперь сам вопрос. Если я делаю "контроллер" этой памяти, в который пишу: начальный адрес, длину пакета(запас на будующее) и жду когда он выдаст сигнал валидности считаных данных, по которому идут переходы конечного автомата ариметического блока, то получаеться что если я выставляю параметры для "контроллера" памяти в том состоянии КА в котором нахожусь, то я теряю на каждой загрузке контроллера памяти 3 такта, но при этом получаю простую логику функционирования КА. Что бы не терять эти 3 такта и выставляю адреса с учетом этой задержки (что бы была конвеерная схема). Но это приводит к усложнению конечного автомата и по сути сводит на нет преимущества "контроллера" памяти как такового и не позволяет построить "гибкий" конечный автомат(его функционирование жестко привязанно к конкретному контроллеру памяти). Вариантов решения проблемы я вижу 3: 1. Вообще отказаться от "контроллера" памяти как такового 2. Сделать "микропрограмный" контроллер памяти, в котором "зашиты" требуемые переходы по адресам.(благо они у меня фиксированные) 3. Сделать "конвееризируемый" контроллер памяти с очередью команд и т.д. А может быть эта задача решаеться проще ? ЗЫ. Сильно не пинайте, я только учюсь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 21 июня, 2005 Опубликовано 21 июня, 2005 · Жалоба +++Что бы не терять эти 3 такта и выставляю адреса с учетом этой задержки (что бы была конвеерная схема). Но это приводит к усложнению конечного автомата и по сути сводит на нет преимущества "контроллера" памяти как такового и не позволяет построить "гибкий" конечный автомат(его функционирование жестко привязанно к конкретному контроллеру памяти).+++ ну так и в чём проблема? выставляй действительно адрес за 3 такта, если он тебе конечно тогда уже известен. (это к стати не называется конвейером) по поводу усложнения - ну- нужно чем-то жертвовать (как альтернатива - можно считать на калькуляторе или счётах). мне не совсем ясна задача - построить арифм блок - или написать контроллер памяти? а какая память? судя по описанию SRAM рпитом NoBL/ZBT (zero bus turn-around) - IMHO придётся усложнять арифм блок Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 июня, 2005 Опубликовано 22 июня, 2005 · Жалоба ну так и в чём проблема? выставляй действительно адрес за 3 такта, если он тебе конечно тогда уже известен. (это к стати не называется конвейером) по поводу усложнения - ну- нужно чем-то жертвовать (как альтернатива - можно считать на калькуляторе или счётах). мне не совсем ясна задача - построить арифм блок - или написать контроллер памяти? а какая память? судя по описанию SRAM рпитом NoBL/ZBT (zero bus turn-around) - IMHO придётся усложнять арифм блок <{POST_SNAPBACK}> Проблема в том, что я хочу разбить проект на независимые блоки, у меня есть 5 арфим. блоков (с разной математикой, но одинаковым скелетом) и каждый работает со своим блоком двухпортовой памяти, но расчет адреса считывания у них требует от 1 до 4 тактов(определяеться глубиной логики, можно сделать все за 1 такт, но тогда я не укладываюсь в тактовую частоту :( ). Вот я и хочу сделать универсальное решение, что бы потом, если измениться требование по тактовой частоте изменить только часть контроллеров памяти, которая отвечает за расчет адреса и изменить его латентность. А не изменять арифм.блоки, что потребует большего времени для проверки. Т.е. арифм. блок загрузил контроллер работой и ждет от него стробов, формируя запросы на чтение (добавление очереди адресов) не "точно вовремя" а когда ему удобно и при этом не терять время на ожидание. Спасибо всем! Сам разобрался, (пошел не по тому пути интеграции проекта :) ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 23 июня, 2005 Опубликовано 23 июня, 2005 · Жалоба Вариантов решения проблемы я вижу 3: 1. Вообще отказаться от "контроллера" памяти как такового 2. Сделать "микропрограмный" контроллер памяти, в котором "зашиты" требуемые переходы по адресам.(благо они у меня фиксированные) 3. Сделать "конвееризируемый" контроллер памяти с очередью команд и т.д. А может быть эта задача решаеться проще ? ЗЫ. Сильно не пинайте, я только учюсь. <{POST_SNAPBACK}> Все мы учимся... Постоянно. Иначе мы не тем занялись :) Попробуй разбить автомат на два. "автомат перебора адресов" и "автомат вычислений", а контроллер памяти - между ними. Т.е. "автомат перебора" выдаёт на контроллер памяти начальные адреса и запускает его. "контроллер" читает пакет и выдаёт на "автомат вычислений" строб начала пакета и стробы сопровождения данных. "автомат вычислений" делает своё дело и дальше пропихивает результат. При этом неважно с какой конвейерной задержкой работает контроллер памяти, даже если придётся где-то добавить доп. регистр или ещё что-то поменяется - по идее всё будет продолжать работать. "в самом начале" (в начале цикла работы системы) какой-то синхронизирующий сигнал приводит и "автомат перебора" и "автомат вычислений" и приёмник данных от автомата вычилений в исходное состояние и потом просто приёмник данных через какое-то время (зависящее от реализации контроллера памяти и автомата вычислений) получит первую порцию, но он будет знать, что она первая. При этом неважно с какой конвейерной задержкой работает контроллер памяти, даже если придётся где-то добавить доп. регистр или ещё что-то поменяется - по идее всё будет продолжать работать. Вдогонку - я не всегда знаю, какая у меня в системе конвейерная задеоржка :) Нет, ну я могу её посчитать, пройдясь по всем блокам в цепочке, но зачем? Сама по себе она не волнует, стадии синхронизируют одна другую, да и ладно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 24 июня, 2005 Опубликовано 24 июня, 2005 · Жалоба Попробуй разбить автомат на два. "автомат перебора адресов" и "автомат вычислений", а контроллер памяти - между ними. Т.е. "автомат перебора" выдаёт на контроллер памяти начальные адреса и запускает его. "контроллер" читает пакет и выдаёт на "автомат вычислений" строб начала пакета и стробы сопровождения данных. "автомат вычислений" делает своё дело и дальше пропихивает результат. спасибо за ответ. :) именно по этому пути я и пошел :) правда искал этот путь несколько дней(у всех бывает первый раз, в первый класс) :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться