Перейти к содержанию
    

волнуют возможности возникновения неопределенностей.

и соответственно исключение всяких граничных ситуаций.

меня не покидает ощущение, что вы хотите на них плюнуть/ махнуть рукой, и получившуюся конструкцию, которая может работать иногда продать за конструкцию, которая работает.

Не в коим разе не продаю ничего! Наоборот: Учусь, стараюсь сделать то что будет работать, и исключительно для познания, а не ради продаж!!!

 

практика показывает, что от 50% до 80% алгоритмов по объему - это обработка непредвиденных при нормальной работе ситуаций, и если вы ожидаете только тепличных условий по входным воздействиям - то это прямая дорога в адъ.

Собственно для этого я и обратился к вам за помощью. Дельного посоветовали мало, но и не оскорбили никак и на том спасибо!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я прошу прощения за мазню в paint, но это было быстрее всего.

я понял вашу задачу следующим образом.

post-72596-1441475166_thumb.png

у вас есть АЦП и есть микроконтроллер.

но поскольку АЦП имеет скорость выдачи отсчетов выше, чем может принять мк, то было сгорожено CPLD и SRAM.

т.е. процесс примерно следющий

1) МК запускает выборку АЦП.

2) АЦП отсылает выборку в CPLD.

3) по мере передачи отсчетов от АЦП в SRAM в CPLD формируются счетчики уровня заполненности. wrptr-rdptr, сигналы fifo_empty, fifo_full, некий аналог usedw

4) при активации SPI со стороны мк вычитывается очередной байт данных. (ограничение - вычитывать из "фифо" можно только по 1 байту за каждую активацию SPI)

 

оно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я прошу прощения за мазню в paint, но это было быстрее всего.

я понял вашу задачу следующим образом.

post-72596-1441475166_thumb.png

у вас есть АЦП и есть микроконтроллер.

но поскольку АЦП имеет скорость выдачи отсчетов выше, чем может принять мк, то было сгорожено CPLD и SRAM.

т.е. процесс примерно следющий

1) МК запускает выборку АЦП.

2) АЦП отсылает выборку в CPLD.

3) по мере передачи отсчетов от АЦП в SRAM в CPLD формируются счетчики уровня заполненности. wrptr-rdptr, сигналы fifo_empty, fifo_full, некий аналог usedw

4) при активации SPI со стороны мк вычитывается очередной байт данных. (ограничение - вычитывать из "фифо" можно только по 1 байту за каждую активацию SPI)

 

оно?

Да! Вы правы! Это то что я имел ввиду в общих чертах, с тем лишь отличием что плис сама загружает данные в срам и мк не как не воздействует на этот прцес! Мк лишь посылает запрос в плис на загрузку очередного байта в выходной spi буфер и как только это произойдёт то плис сигнализирует мк о готовности байта для передачи из плис в мк, а мк по spi выгружает байт к себе

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ура! ко второй странице разродились на верхний уровень абстракции.

Это то что я имел ввиду в общих чертах

тактирование от АЦП есть всегда? оно на CPLD подано? хотелось бы прорегистрить сигналы от мк на частоте выдачи выборок АЦП. тогда проблема с синхронным дизайном решится сразу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тактирование от АЦП есть всегда? оно на CPLD подано? хотелось бы прорегистрить сигналы от мк на частоте выдачи выборок АЦП. тогда проблема с синхронным дизайном решится сразу.

Ацп с мк никак не связаны! Плис управляет ацп по скрытому для мк алгаритму и записывает данные в срам нв хранение, мк же должно их оттуда забрать как только на это появится время. Места в срам полно, а ацп тактируется периодически по скрытому алгаритму. Просто хотел посоветоватся по возможности реализации псевдо фифо на связке срам+плис

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какие сигналы идут от ADC? Если данные поступают на каждый период клока, то такого клока будет недостаточно, потребуется оверсемплинг, иначе как можно будет разрулить режимы записи/чтения в память? Короче, давайте подробности, а именно:

- Какой adc, сигналы, режим работы

- Какой чип RAM будем использовать

- Какие есть клоки

Без этих данных не о чем разговаривать.

В общих чертах - fifo делается в виде циклического буфера с двумя счётчиками адреса, а рулить этим должен конечный автомат (FSM)

Изменено пользователем bugdesigner

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для корректной работы плис нужно стабильное тактирование. постоянное.

при этом подразумевается что все входные сигналы, как-то участвующие в логике работы, а не просто проходящие со входа на выход, перед использованием будут засинхронизированы этой частотой.

 

вопрос состоит в том, каково соотношение частот.

частота, приходящая в плис кратна частоте, подаваемой на ацп? равна? какова задержка данных ацп по фазе относительно этого клока, есть ли она вообще?

во сколько раз эта частота выше, чем частота SPI? насколько критична реализация SPI в вашем микроконтроллере к временным отклонениям MISO относительно SCK?

 

вот потому и пытаем вас как партизана.

потому как данных мало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Клока, клока... Я ж говорю что по импульсу от мк в плис плис должен зафиксировать факт прихода запроса на запись, дождатся этого самого вашего клока основного в плис и дождатся когда станет не активен сигнал записи из вне в срам и выгрузить байт из срам в регистр свой же и просигналить об этом мк что байт готов и находится в регистре вывода. При этом флаг запроса должен сбросится. Когда мы сново пошлём запрос байта для чтения этим самым сбросится флаг готовности байта.

Это что так сложно привести к основному клоку плис? Я только этого и не пойму в чём тут проблема то? Это что так сложно реализовать. Схема выше опасаной логики дана в первом посте. И вопрос - будет ли работать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это что так сложно привести к основному клоку плис? Я только этого и не пойму в чём тут проблема то? Это что так сложно реализовать. Схема выше опасаной логики дана в первом посте. И вопрос - будет ли работать?

Есть похожая тема, в которой выкладывал пример ровно с такой связкой: ADC-(CPLD-SRAM)-uC

Кто-то предлагает задействовать UART или SPI для связи CPLD и микроконтроллера. Тут вроде тоже поступало такое предложение.

Наверное, так и сделал, если бы они работали от разных генераторов. От потребных таймингов протокола тоже зависит.

 

http://electronix.ru/forum/index.php?showt...mp;#entry818823

 

В общем, задача абсолютно решаемая. Не очень понятно, что вызывает у Вас основную трудность.

Изменено пользователем x736C

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Трудность здесь в пересечении доменов клоков. Как минимум одно пересечение тут есть.

Изменено пользователем bugdesigner

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Трудность здесь в пересечении доменов клоков. Как минимум одно пересечение тут есть.

Так выпьем же за то, чтобы это было самыми большими нашими трудностями :beer: :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это что так сложно привести к основному клоку плис? Я только этого и не пойму в чём тут проблема то? Это что так сложно реализовать. Схема выше опасаной логики дана в первом посте. И вопрос - будет ли работать?

 

Народ просто любит поговорить:).

 

Коротко работать будет, но есть реализация проще. Вам надо 2 сигнала

request - запрос данных

и ack - подтверждение готовности

если процу нужны очередные данные, он ставит request <= ~ack, когда ПЛИС видит запрос не равный подтверждению - это запрос на данные, она их выставляет и ставит ack <= request. Как проц видит ack равный request - это подтверждение того что данные готовы. Остается только вопрос есть ли у вас 2 портовая СРАМ или можно ли ее симулировать.

 

Самая простая симуляция 2 портовой СРАМ это тактировать ее частотой Х, а читать/писать на частоте Х/2, по одному адресу писать, по другому читать, дальше все становиться делом техники.... Вся схема работает на частоте Х/2 и у вас получается фифо на 2 портовой памяти. Сигнал от проца лучше прогнать через 2 триггера, чтобы как бы чего не вышло

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто переключающими регистрами задачу красиво решить, наверное, не получится. Нужен ещё автомат, который, принимая управляющие сигналы, будет прокручивать сценарии завершения работы с АЦП, с записью данных в ОЗУ, полученных от АЦП, корректно переводить сигналы связи CPLD<>RAM в исходное состояние и т.п.

Особенно наглядно это видно, если АЦП имеет последовательный канал связи (SPI и т.п.), когда Вам, получив команду от МК, необходимо "принять её к сведению" и завершить протокол обмена с АЦП в штатном режиме, потом записать эти данные в ОЗУ, переназначить адресные индексы кольцевого буфера (ну или глубины стека FIFO), хранящегося в ОЗУ.

Не видя основного направления применения задачи, трудно строить умозаключения, но в общем случае я за кольцевой буфер, т.к. такое построение позволяет всегда иметь акутальные данные. Надо будет вести 2 параметра для "кольца": адрес последнего значения и длина буфера (т.к. пока кольцо не замкнулось - длина не равна размеру ОЗУ).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

принимая управляющие сигналы, будет прокручивать сценарии завершения работы с АЦП, с записью данных в ОЗУ, полученных от АЦП, корректно переводить сигналы связи CPLD<>RAM в исходное состояние и т.п.

и зачем это все?

Пусть модуль сбора данных с АЦП этим занимается, а когда все сделает кладет в регистр и ставит флаг записать данные. Как фифо будет готово оно забирает данные. Как процу надо данные, фифо опять же выдает их в регистр. А дальше уже другое устройство (модуль) переписывает данные в проц, хоть по СПИ, хоть по телеграфу...

Зачем усложнять, то? ТС спросил можно ли сделать такое фифо, а вы уже все обсудили и интерфейсы, и АЦП, и прочее...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ просто любит поговорить:).

 

Коротко работать будет, но есть реализация проще. Вам надо 2 сигнала

request - запрос данных

и ack - подтверждение готовности

если процу нужны очередные данные, он ставит request <= ~ack, когда ПЛИС видит запрос не равный подтверждению - это запрос на данные, она их выставляет и ставит ack <= request. Как проц видит ack равный request - это подтверждение того что данные готовы. Остается только вопрос есть ли у вас 2 портовая СРАМ или можно ли ее симулировать.

 

Самая простая симуляция 2 портовой СРАМ это тактировать ее частотой Х, а читать/писать на частоте Х/2, по одному адресу писать, по другому читать, дальше все становиться делом техники.... Вся схема работает на частоте Х/2 и у вас получается фифо на 2 портовой памяти. Сигнал от проца лучше прогнать через 2 триггера, чтобы как бы чего не вышло

как я понял у ТС однопортовая память SRAM

 

Просто задача идеи состоит в том чтоб на высокой скорости загружать sram и потом по мере необходимости выгружать данные из sram. Но cpld уже есть EPM570 с подключенной к ней sram CY7C1041DV33. Почему б и не попробовать ведь ресурсов их хватает для задачи с головой. Просто криво возможно как то но возможно ведь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...