|
FIFO (CPLD+SRAM) |
|
|
|
Sep 5 2015, 13:37
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Доброго времени суток уважаемые!!! Есть задача построить модуль FIFO на связке CPLD+SRAM. Это образно говоря решение будет использоваться как простое FIFO для передачи данных в микроконтроллер. Мозги кипят и требуется помощь знающих людей которые смогут помочь разобраться в проблеме. Вопрос коммутационного плана на выложенной схеме дело в том что мк и плис работают на разных тактовых частотах и тут то и проблема. Я думаю так сделать: Данные со входа IN_DATA[15..0] поступают во внешнюю sram и там фиксируются сигналом (wd_sram) по адресу схемы которая тут не представлена в принципе это не важно. Начало работы начинается с того что мк подаёт запрос на то чтоб данные записались в регистр (inst5) сигналом (request) и если sram находится в режиме чтения то данные записываются в регистр при этом выставляется флаг регистр загружен -(confirmation) и сбрасывается регистр запроса на запись данных из sram. По приходу следующего запроса записи из sram в регистр (inst5) флаг (confirmation) сбрасывается в ноль и мк ожидает загрузки регистра (inst5) из него потом сдвиговым регистром будут выгружены данные в мк. Так я предположил выйти из проблемы пересечения клоковых доменов асинхронной фифо. Подскажите в правильном ли я направлении двигаюсь?
Прикрепленные файлы
FIFO.pdf ( 1.19 мегабайт )
Кол-во скачиваний: 59
|
|
|
|
|
 |
Ответов
|
Sep 5 2015, 16:10
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
Цитата Просто криво возможно как то но возможно ведь? я полагаю, никто до сих пор не понял какого конечного результата вы хотите добиться =)
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
Sep 24 2015, 13:04
|

Местный
  
Группа: Свой
Сообщений: 449
Регистрация: 28-10-04
Из: Украина
Пользователь №: 1 002

|
Цитата(krux @ Sep 5 2015, 20:10)  я полагаю, никто до сих пор не понял какого конечного результата вы хотите добиться =) Значит, у Вас такой задачи не стояло Автору топика: вполне заурядная задача, смелее делайте и будет всё работать. Не забудьте про довольно большие счетчики адресов, их сравнение, и результат этого сравнения. Тут правильно советуют - операция записи в ОЗУ имеет приоритет перед чтением. Работу с ОЗУ разбиваем на циклы. Цикл состоит из записи и потом чтения. Если есть запрос на запись - пишем. Если есть запрос на чтение - читаем, пока не появится запрос на запись или не кончится чтение. Если одновременно присутствует и запрос на запись, и на чтение, то в каждом цикле одно слово должно записаться, и одно-вычитаться. Тут надо кропотливо поработать с таймингами ОЗУ. Очень помогает моделирование в Моделсиме или что там у Вас есть.
--------------------
Умею молчать на 37 языках...
|
|
|
|
|
Sep 24 2015, 13:22
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Цитата(Gorby @ Sep 24 2015, 17:04)  Тут правильно советуют - операция записи в ОЗУ имеет приоритет перед чтением. Работу с ОЗУ разбиваем на циклы. Цикл состоит из записи и потом чтения. Если есть запрос на запись - пишем. Если есть запрос на чтение - читаем, пока не появится запрос на запись или не кончится чтение. Если одновременно присутствует и запрос на запись, и на чтение, то в каждом цикле одно слово должно записаться, и одно-вычитаться. Тут надо кропотливо поработать с таймингами ОЗУ. Так получается тут нужно реализовывать конечный автомат состояний? Проблема видимо в том что у меня два клоковых домина и я не соображу как мне преодалеть эту проблему. У меня есть основной клок в CPLD 100Mhz. Частота записи 50Mhz а частота чтения 10Mhz. Эти частоты я реализовал делителями. Была идея: Запись в абсолютном приоритете!! Если поступил запрос на чтение то мы ждём пока кончится запись и как только это произойдёт то мы прочитаем данные на выход и выставим флаг готовности данных, сбросив при этом флаги запроса. Но при таком раскладе у меня в RTL модели видны защёлки, а это явная ошибка проекта. Как же быть? Я просто чувствую что это вполне реализуемо, но нет идей и помощи более опытных товарищей.
|
|
|
|
|
Sep 24 2015, 13:49
|

Местный
  
Группа: Свой
Сообщений: 449
Регистрация: 28-10-04
Из: Украина
Пользователь №: 1 002

|
Цитата(uragan90 @ Sep 24 2015, 17:22)  Так получается тут нужно реализовывать конечный автомат состояний? Я просто чувствую что это вполне реализуемо, но нет идей и помощи более опытных товарищей.  Да, конечный автомат нужен. Но он простой, один-два триггера. Вы с частотами-то поосторожнее. Тщательно просчитайте, возможно ли в принипе добиться от Вашей памяти такой растактовки. Тут нужен в клеточку лист бумаги, карандаш и мозг. Оно само всё покажет. Если основной клок 100МГц и данные поступают на каждом втором такте - то у Вас просто нет шансов даже на запись - каким образом сформировать управляющие сигналы? Или делать асинхронщину на RC цепях. У Вас нету системного подхода. Сначала - растактовка памяти (управляющие сигналы формируются из виртуального клока, и это будет явно не 100МГц, а 180, 166 или рядом). Критерий - максимально выжать быстродействие ОЗУ при условии, что управление идет почти на макс скорости (половина системного клока). Вижу сам, что сумбурно. Вы сами сразу всё увидите, как растактовку ОЗУ нарисуете.
--------------------
Умею молчать на 37 языках...
|
|
|
|
|
Sep 24 2015, 14:09
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Цитата(EvgenyNik @ Sep 24 2015, 18:04)  Но данные приходят по 8 бит, а ширина шины данных ОЗУ 16 бит, что даёт ему возможность накопить слово и записать его одним махом. А пока оно копится - прочитать 16 бит для выдачи. Именно так я и делаю!!! На частоте 100 я собераю данные по 8 бит, в регистр 16 бит. И того частота делится надвое. получается 50 Mhz. Память у меня 16ти разрядная и тем самым частота записи снижается. Читать я буду на частоте 10Mhz вот такой расклад получается, но проблема то в том что у меня 2 клоковых домина пересекающийся между собой!
|
|
|
|
Сообщений в этой теме
uragan90 FIFO (CPLD+SRAM) Sep 5 2015, 13:37 uragan90 И вообще как такое реализовать можно?
Я делаю так... Sep 5 2015, 15:10 Maverick Цитата(uragan90 @ Sep 5 2015, 18:10) И во... Sep 5 2015, 15:43  uragan90 Цитата(Maverick @ Sep 5 2015, 19:43) Для ... Sep 5 2015, 15:48   Maverick Цитата(uragan90 @ Sep 5 2015, 18:48) Мне ... Sep 5 2015, 15:58    uragan90 Цитата(Maverick @ Sep 5 2015, 19:58) Тогд... Sep 5 2015, 16:05 krux ЦитатаМне не нужна двух клоковая фифо! Мне дос... Sep 5 2015, 16:02 uragan90 Цитата(krux @ Sep 5 2015, 20:02) тогда эт... Sep 5 2015, 16:11  Maverick Цитата(uragan90 @ Sep 5 2015, 19:11) Запи... Sep 5 2015, 16:13   uragan90 Цитата(Maverick @ Sep 5 2015, 20:13) Пожа... Sep 5 2015, 16:26    uragan90 Цитата(Gorby @ Sep 24 2015, 17:49) Да, ко... Sep 24 2015, 13:58      EvgenyNik Цитата(uragan90 @ Sep 24 2015, 17:09) Чит... Sep 24 2015, 15:10 krux ЦитатаЗапись в срам должна быть выше по приоритету... Sep 5 2015, 16:16 krux ЦитатаСообщает об этом мк и мк с помощью сдвиговог... Sep 5 2015, 16:31 uragan90 Цитата(krux @ Sep 5 2015, 20:31) сколько ... Sep 5 2015, 16:50 krux Цитатая вот тоже не пойму проблемы что вас волнует... Sep 5 2015, 16:52 uragan90 Цитата(krux @ Sep 5 2015, 20:52) волнуют ... Sep 5 2015, 17:06 krux я прошу прощения за мазню в paint, но это было быс... Sep 5 2015, 17:55 uragan90 Цитата(krux @ Sep 5 2015, 21:55) я прошу ... Sep 5 2015, 18:02 krux ура! ко второй странице разродились на верхний... Sep 5 2015, 18:09 uragan90 Цитата(krux @ Sep 5 2015, 22:09) тактиров... Sep 5 2015, 18:33 bugdesigner А какие сигналы идут от ADC? Если данные поступают... Sep 5 2015, 18:34 uragan90 Клока, клока... Я ж говорю что по импульсу от мк в... Sep 5 2015, 19:45  x736C Цитата(uragan90 @ Sep 5 2015, 22:45) Это ... Sep 5 2015, 20:55 krux для корректной работы плис нужно стабильное тактир... Sep 5 2015, 18:46 bugdesigner Трудность здесь в пересечении доменов клоков. Как ... Sep 6 2015, 05:15 x736C Цитата(bugdesigner @ Sep 6 2015, 08:15) Т... Sep 6 2015, 09:27 Golikov A. ЦитатаЭто что так сложно привести к основному клок... Sep 6 2015, 17:09 EvgenyNik Просто переключающими регистрами задачу красиво ре... Sep 7 2015, 05:21 Golikov A. Цитатапринимая управляющие сигналы, будет прокручи... Sep 7 2015, 05:36 Maverick Цитата(Golikov A. @ Sep 6 2015, 20:09) На... Sep 7 2015, 06:02  uragan90 Цитата(Maverick @ Sep 7 2015, 10:02) как ... Sep 7 2015, 06:57 EvgenyNik Цитата(Golikov A. @ Sep 7 2015, 08:36) и ... Sep 7 2015, 06:06 krux при старте, если указатели чтения и записи равны (... Sep 7 2015, 07:22 uragan90 Цитата(krux @ Sep 7 2015, 11:22) при стар... Sep 7 2015, 08:21 uragan90 Удалось реализовать такой модуль FIFO на внешней S... Sep 24 2015, 12:44 Golikov A. задача проста как 2 копейки, вы мудрите...
первое... Sep 24 2015, 19:32 uragan90 Цитата(Golikov A. @ Sep 24 2015, 23:32) з... Sep 25 2015, 07:45  EvgenyNik Цитата(uragan90 @ Sep 25 2015, 10:45) У м... Sep 25 2015, 07:55   Corner Цитата(EvgenyNik @ Sep 25 2015, 11:55) Ды... Sep 28 2015, 19:28    RobFPGA Приветствую!
Цитата(Corner @ Sep 28 2015... Sep 28 2015, 23:46     uragan90 Цитата(RobFPGA @ Sep 29 2015, 03:46) Прив... Sep 30 2015, 09:00  Gorby Цитата(uragan90 @ Sep 25 2015, 10:45) У м... Sep 25 2015, 10:23 uragan90 Начертал схемку которая решает практически половин... Sep 30 2015, 17:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|