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

|
Цитата принимая управляющие сигналы, будет прокручивать сценарии завершения работы с АЦП, с записью данных в ОЗУ, полученных от АЦП, корректно переводить сигналы связи CPLD<>RAM в исходное состояние и т.п. и зачем это все? Пусть модуль сбора данных с АЦП этим занимается, а когда все сделает кладет в регистр и ставит флаг записать данные. Как фифо будет готово оно забирает данные. Как процу надо данные, фифо опять же выдает их в регистр. А дальше уже другое устройство (модуль) переписывает данные в проц, хоть по СПИ, хоть по телеграфу... Зачем усложнять, то? ТС спросил можно ли сделать такое фифо, а вы уже все обсудили и интерфейсы, и АЦП, и прочее...
|
|
|
|
|
Sep 7 2015, 06:02
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(Golikov A. @ Sep 6 2015, 20:09)  Народ просто любит поговорить  . Коротко работать будет, но есть реализация проще. Вам надо 2 сигнала request - запрос данных и ack - подтверждение готовности если процу нужны очередные данные, он ставит request <= ~ack, когда ПЛИС видит запрос не равный подтверждению - это запрос на данные, она их выставляет и ставит ack <= request. Как проц видит ack равный request - это подтверждение того что данные готовы. Остается только вопрос есть ли у вас 2 портовая СРАМ или можно ли ее симулировать. Самая простая симуляция 2 портовой СРАМ это тактировать ее частотой Х, а читать/писать на частоте Х/2, по одному адресу писать, по другому читать, дальше все становиться делом техники.... Вся схема работает на частоте Х/2 и у вас получается фифо на 2 портовой памяти. Сигнал от проца лучше прогнать через 2 триггера, чтобы как бы чего не вышло как я понял у ТС однопортовая память SRAM Цитата(uragan90 @ Sep 5 2015, 19:05)  Просто задача идеи состоит в том чтоб на высокой скорости загружать sram и потом по мере необходимости выгружать данные из sram. Но cpld уже есть EPM570 с подключенной к ней sram CY7C1041DV33. Почему б и не попробовать ведь ресурсов их хватает для задачи с головой. Просто криво возможно как то но возможно ведь?
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Sep 7 2015, 06:57
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Цитата(Maverick @ Sep 7 2015, 10:02)  как я понял у ТС однопортовая память SRAM Да! Одно портовая память срам! Хочу создать модуль контроллера срам, чтоб с ней работать как с фифо, но писать в неё по фронту сигнала WD который приходит из другого модуля, а по спаду WD сбрасывать в регистр и хранить там пока не перелью данные в мк и не произведу следующий запрос чтения. Вот начал писать модуль сий. Затык с этим самым "автоматом состояний" который должен активировать регистр rdy когда посылаем запрос и ожидаем данные, вот тут за спотыкался. CODE module sram_control( input clk_pld, //основной такт плис input wd, //запись в sram, (высокий приоритет) input request, //запрос данных output reg ack, //подтверждение готовности данных output empty, //sram пустая (читать нельзя) output full, //sram полная (писать нельзя) output [17:0] addr, //адрес sram input [15:0] din, //вход данных для записи во внешнюю sram output reg [15:0] dout, //выход данных для чтения из sram inout [15:0] dinout //двунаправленный порт данных для подключения непосредственно к sram );
reg rdy = 0; reg [15:0] buff = 0; //буфер 3х состояний reg [18:0] count_w = 0; //регистр счётчика записи reg [18:0] count_r = 0; //регистр счётчика чтения
//счётчик адреса записи always @(posedge clk) begin if(wd) count_w = count_w + 1; end
//счётчик адреса чтения always @(posedge clk) begin if(rdу) count_r = count_r + 1; end
//процес управляющий логикой чтения данных always @(posedge clk) begin if(request) begin //?????????????????????????????????? end end
always @(posedge clk) begin if(wd) buff = din; else begin buff = 16'bz; if(rdу) dout = dinout; end end
assign dinout = buff; assign addr = (!wd && rdу)? count_r : count_w;
assign full = ((count_w[17:0] == count_r[17:0]) && (count_w[18] ^^ count_r[18]))? 1'b1 : 1'b0; assign empty = ((count_w[17:0] == count_r[17:0]) && (!(count_w[18] ^^ count_r[18])))? 1'b1 : 1'b0; endmodule
|
|
|
|
Сообщений в этой теме
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 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
|
|
|