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

|
Цитата(krux @ Sep 5 2015, 20:52)  волнуют возможности возникновения неопределенностей. и соответственно исключение всяких граничных ситуаций. меня не покидает ощущение, что вы хотите на них плюнуть/ махнуть рукой, и получившуюся конструкцию, которая может работать иногда продать за конструкцию, которая работает. Не в коим разе не продаю ничего! Наоборот: Учусь, стараюсь сделать то что будет работать, и исключительно для познания, а не ради продаж!!! Цитата(krux @ Sep 5 2015, 20:52)  практика показывает, что от 50% до 80% алгоритмов по объему - это обработка непредвиденных при нормальной работе ситуаций, и если вы ожидаете только тепличных условий по входным воздействиям - то это прямая дорога в адъ. Собственно для этого я и обратился к вам за помощью. Дельного посоветовали мало, но и не оскорбили никак и на том спасибо!!!
|
|
|
|
|
Sep 5 2015, 17:55
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
я прошу прощения за мазню в paint, но это было быстрее всего. я понял вашу задачу следующим образом.
у вас есть АЦП и есть микроконтроллер. но поскольку АЦП имеет скорость выдачи отсчетов выше, чем может принять мк, то было сгорожено CPLD и SRAM. т.е. процесс примерно следющий 1) МК запускает выборку АЦП. 2) АЦП отсылает выборку в CPLD. 3) по мере передачи отсчетов от АЦП в SRAM в CPLD формируются счетчики уровня заполненности. wrptr-rdptr, сигналы fifo_empty, fifo_full, некий аналог usedw 4) при активации SPI со стороны мк вычитывается очередной байт данных. (ограничение - вычитывать из "фифо" можно только по 1 байту за каждую активацию SPI) оно?
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
Sep 5 2015, 18:02
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Цитата(krux @ Sep 5 2015, 21:55)  я прошу прощения за мазню в paint, но это было быстрее всего. я понял вашу задачу следующим образом.
у вас есть АЦП и есть микроконтроллер. но поскольку АЦП имеет скорость выдачи отсчетов выше, чем может принять мк, то было сгорожено CPLD и SRAM. т.е. процесс примерно следющий 1) МК запускает выборку АЦП. 2) АЦП отсылает выборку в CPLD. 3) по мере передачи отсчетов от АЦП в SRAM в CPLD формируются счетчики уровня заполненности. wrptr-rdptr, сигналы fifo_empty, fifo_full, некий аналог usedw 4) при активации SPI со стороны мк вычитывается очередной байт данных. (ограничение - вычитывать из "фифо" можно только по 1 байту за каждую активацию SPI) оно? Да! Вы правы! Это то что я имел ввиду в общих чертах, с тем лишь отличием что плис сама загружает данные в срам и мк не как не воздействует на этот прцес! Мк лишь посылает запрос в плис на загрузку очередного байта в выходной spi буфер и как только это произойдёт то плис сигнализирует мк о готовности байта для передачи из плис в мк, а мк по spi выгружает байт к себе
|
|
|
|
|
Sep 5 2015, 18:09
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
ура! ко второй странице разродились на верхний уровень абстракции. Цитата Это то что я имел ввиду в общих чертах тактирование от АЦП есть всегда? оно на CPLD подано? хотелось бы прорегистрить сигналы от мк на частоте выдачи выборок АЦП. тогда проблема с синхронным дизайном решится сразу.
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
Sep 5 2015, 18:33
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Цитата(krux @ Sep 5 2015, 22:09)  тактирование от АЦП есть всегда? оно на CPLD подано? хотелось бы прорегистрить сигналы от мк на частоте выдачи выборок АЦП. тогда проблема с синхронным дизайном решится сразу. Ацп с мк никак не связаны! Плис управляет ацп по скрытому для мк алгаритму и записывает данные в срам нв хранение, мк же должно их оттуда забрать как только на это появится время. Места в срам полно, а ацп тактируется периодически по скрытому алгаритму. Просто хотел посоветоватся по возможности реализации псевдо фифо на связке срам+плис
|
|
|
|
|
Sep 5 2015, 18:34
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 12-06-15
Из: Земля
Пользователь №: 87 133

|
А какие сигналы идут от ADC? Если данные поступают на каждый период клока, то такого клока будет недостаточно, потребуется оверсемплинг, иначе как можно будет разрулить режимы записи/чтения в память? Короче, давайте подробности, а именно: - Какой adc, сигналы, режим работы - Какой чип RAM будем использовать - Какие есть клоки Без этих данных не о чем разговаривать. В общих чертах - fifo делается в виде циклического буфера с двумя счётчиками адреса, а рулить этим должен конечный автомат (FSM)
Сообщение отредактировал bugdesigner - Sep 5 2015, 18:36
|
|
|
|
|
Sep 5 2015, 20:55
|
Профессионал
    
Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942

|
Цитата(uragan90 @ Sep 5 2015, 22:45)  Это что так сложно привести к основному клоку плис? Я только этого и не пойму в чём тут проблема то? Это что так сложно реализовать. Схема выше опасаной логики дана в первом посте. И вопрос - будет ли работать? Есть похожая тема, в которой выкладывал пример ровно с такой связкой: ADC-(CPLD-SRAM)-uC Кто-то предлагает задействовать UART или SPI для связи CPLD и микроконтроллера. Тут вроде тоже поступало такое предложение. Наверное, так и сделал, если бы они работали от разных генераторов. От потребных таймингов протокола тоже зависит. http://electronix.ru/forum/index.php?showt...mp;#entry818823В общем, задача абсолютно решаемая. Не очень понятно, что вызывает у Вас основную трудность.
Сообщение отредактировал x736C - Sep 5 2015, 20:56
|
|
|
|
|
Sep 6 2015, 17:09
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Это что так сложно привести к основному клоку плис? Я только этого и не пойму в чём тут проблема то? Это что так сложно реализовать. Схема выше опасаной логики дана в первом посте. И вопрос - будет ли работать? Народ просто любит поговорить  . Коротко работать будет, но есть реализация проще. Вам надо 2 сигнала request - запрос данных и ack - подтверждение готовности если процу нужны очередные данные, он ставит request <= ~ack, когда ПЛИС видит запрос не равный подтверждению - это запрос на данные, она их выставляет и ставит ack <= request. Как проц видит ack равный request - это подтверждение того что данные готовы. Остается только вопрос есть ли у вас 2 портовая СРАМ или можно ли ее симулировать. Самая простая симуляция 2 портовой СРАМ это тактировать ее частотой Х, а читать/писать на частоте Х/2, по одному адресу писать, по другому читать, дальше все становиться делом техники.... Вся схема работает на частоте Х/2 и у вас получается фифо на 2 портовой памяти. Сигнал от проца лучше прогнать через 2 триггера, чтобы как бы чего не вышло
|
|
|
|
|
Sep 7 2015, 05:21
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
Просто переключающими регистрами задачу красиво решить, наверное, не получится. Нужен ещё автомат, который, принимая управляющие сигналы, будет прокручивать сценарии завершения работы с АЦП, с записью данных в ОЗУ, полученных от АЦП, корректно переводить сигналы связи CPLD<>RAM в исходное состояние и т.п. Особенно наглядно это видно, если АЦП имеет последовательный канал связи (SPI и т.п.), когда Вам, получив команду от МК, необходимо "принять её к сведению" и завершить протокол обмена с АЦП в штатном режиме, потом записать эти данные в ОЗУ, переназначить адресные индексы кольцевого буфера (ну или глубины стека FIFO), хранящегося в ОЗУ. Не видя основного направления применения задачи, трудно строить умозаключения, но в общем случае я за кольцевой буфер, т.к. такое построение позволяет всегда иметь акутальные данные. Надо будет вести 2 параметра для "кольца": адрес последнего значения и длина буфера (т.к. пока кольцо не замкнулось - длина не равна размеру ОЗУ).
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
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.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|