|
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 24 2015, 19:32
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
задача проста как 2 копейки, вы мудрите... первое: делаете 2 портовую память. - это просто, она на частоте 100 МГц, то пишет в 1 адрес (если есть сигнал записи, или не пишите), то выставляет 2 адрес и читает. Получаете 50 МГц 2 портовую память. схема,без размерности и может быть с ошибками, но суть должна быть понятна Код input addr1; input addr2; input we; input data_in; output data_out; reg PortSel; //регистр для выбора порта reg mem_data_in; //регистр для сохранения
always @(posedge clk) begin if(PortSel == 0) begin mem_addr <= addr2; //готовимся читать со 2 адреса mem_we <= 1'b0; //снимаем сигнал записи, 2 адрес чтение data_out <= mem_data_out; //защелкиваем данные с памяти (с прошлого задания адреса) PortSel <= 1'b1; end else begin mem_addr <= addr1; //готовимся писать в 1 адрес если надо mem_we <= we; //ставим we если надо mem_data_in <= data_in; //защелкиваем данные для записи PortSel <= 1'b0; end end А после того как вы это сделали, у вас остается сделать правильный переход из домена 100 МГц в домен 10. Это просто запрос на чтение через 2 триггера, из 10 в 100, там выставляете защелкиваете данные на выход, через 1 клок данные будут валидны и стоять на входе 10. То есть на след такте вы их легко считаете...
|
|
|
|
|
Sep 25 2015, 07:45
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Цитата(Golikov A. @ Sep 24 2015, 23:32)  задача проста как 2 копейки, вы мудрите... первое: делаете 2 портовую память. - это просто, она на частоте 100 МГц, то пишет в 1 адрес (если есть сигнал записи, или не пишите), то выставляет 2 адрес и читает. Получаете 50 МГц 2 портовую память. У меня не двух портовая память CY7C1041DV33 У неё нет такой возможности обращения к одним и тем же данным по разным портам
|
|
|
|
|
Sep 28 2015, 23:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(Corner @ Sep 28 2015, 22:28)  Ничего не выйдет. СОЗУ то и 100 МГц, да чтение за 1 такт никак даже на ФПГА. А ЦПЛД еще тормознее. Выйдет 33 МГц на чтение и 20... 25 на запись. Но работать будет несомненно. Только еще придется ФИФО на регистрах небольшое сделать для когерентности с МК, а то лаг на чтение неизбежен. Ой да что вы говорите! Не пугайте маленьких. Я еще на MAX7000 серии делал подобное и на статике и на просто DDR 100 MHz вполне себе рабочая была. У TC конечно память слегка неудобная для таких частот тут лучше синхронная статика подошла бы - придется помурыжится с таймингами чтобы вытянуть 100 MHz рабочей Судя по схеме у вас запись и чтение последовательные - что еще сильнее упрощает задачу Просто чередовать WR/RD циклы, Запись при накоплении 2 отсчетов, чтение ПОСТОЯННО по текущему указателю. Соответственно данные для чтения MK будут доступны сразу. Если времянка памяти не позволит переключение WR/RD в пределах такта (no ZBT) тогда придется делат WR,WR,WR,-,RD,-, итого за 6 тактов - 3 записи - 1 чтение - Для WR путь синхронный, а частота RD значительно ниже рабочей так что синхронизация будет не сложной. Дерзайте! Удачи! Rob.
|
|
|
|
Сообщений в этой теме
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 krux ЦитатаПросто криво возможно как то но возможно вед... Sep 5 2015, 16:10 Gorby Цитата(krux @ Sep 5 2015, 20:10) я полага... Sep 24 2015, 13:04  uragan90 Цитата(Gorby @ Sep 24 2015, 17:04) Тут пр... Sep 24 2015, 13:22   Gorby Цитата(uragan90 @ Sep 24 2015, 17:22) Так... Sep 24 2015, 13:49    uragan90 Цитата(Gorby @ Sep 24 2015, 17:49) Да, ко... Sep 24 2015, 13:58    EvgenyNik Цитата(Gorby @ Sep 24 2015, 16:49) Если о... Sep 24 2015, 14:04     uragan90 Цитата(EvgenyNik @ Sep 24 2015, 18:04) Но... Sep 24 2015, 14:09      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     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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|