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

У меня два FIFO буффера связанные с SDRAM контроллером

Один передает информацию на контроллер (в память соответсвнно), а другой принимает прочитанные данные из памяти. Проблема в организации управления двумя FIFO буфферами. Потому что при чтении латентность есть а при записи нет. Может у когото была такая проблема

:(

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


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

Serega Doc

Какая SDRAM (тип, латентность), какой контроллер (куски кода), к какой шине подключен (со обратной строрны FIFO)?

Желательно увидеть код, или хотя бы мысли на этот счёт.

Советую почитать книжку Суровой, Шейнина. (точно не помню - кто-то упёр, и не вернул :angry2: ). Там, по-моему, что-то подобное рассматривалось.

:bb-offtopic: А вот если бы кто подкинул дельную ссылку на реализацию модельки с применением VHPI, был бы брагодарен. :blush:. IMHO, не только я.

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


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

Ниже структура реализуемого устройства. Проблема в правильном формировании управляющих сигналов для FIFO буферов. Вернее не в формировании а в оптимальной структуре при неопределенной длительности пакета (вкючен full page) но пакет может изменятся от операции к о перации.

 

Данные 8 бит.

 

Если кто разбтрался с корками для SDRAM или DDR скажите оптимизируется ли работа по тактам для пакетов (в конце пакета данных формируется упр. сигн. для следующего пакета) или каждая новая команда с памятью выполняется последовательно одна после другой.

 

А как называется книга

 

Что такое VHPI?

 

Спасибо!

Вопрос.pdf

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


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

Serega Doc

Книжка:

Она из Google - ссылок

Следующая из Google - ссылок

 

VHPI - интерфейс для подключения моделей на C++ к среде моделирования VHDL.

 

У меня весь обмен осуществляется фиксированными посылками по AHB (в соответствии со спецификацией шины только как Slave.) После того начали поступать данные от SDRAM захватывается шина и осуществляется передача пакета.

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


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

Тоесть настройка SDRAM на следующий пакет только по окончании работы с текущим

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


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

Serega Doc

А как же иначе? Может быть я чего-то не понимаю?

Посмотрел рисунок - не понял как одновременно можно читать и писать в SDRAM.

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


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

Ну если работать в одной строке то в сдрам памяти можно настраивать различные банки на различные операции и тем самым формировать непрерывный поток.

 

посмотрите стр 28 - 29 или я чевото не понял

operation_timing.pdf

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


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

Serega Doc

Точнее опишите задачу, пожалуйста. У меня есть подозрение, что мы говорим о разных вещах :).

Схемотехника моего устройства предусматривает процессор, память, периферию и вычислитель специальных функций на FPGA. Таким образом, практически у каждого устройства есть своя локальная память и контроллер доступа к шине AHB. Хотя спецификация шины и предусматривает режим обмена данными неопределённой длины, реально пакеты ограничены объёмом обрабатываемых данных в устройствах. Контроллер SDRAM имеет раздельные сигналы адреса, данные чтения, данные записи и сигналы контроля шины. Из них наиболее интересны сигналы Ack и Rdy (хотя в AHB они именуются иначе и вообще физически представлены в виде кода из нескольких бит). Таким образом, когда контроллер SDRAM получает команду с шины (запись или чтение), он формирует сигнал Ack, сообщая, что он понял команду.

В случае записи он захватывает данные с шины на каждом такте, а затем снимает сигнал готовности Rdy. Фактически, данные с шины поступают в локальное WR_FIFO_SDRAM, пока контроллер активизирует банк, строку и колонку. Затем они с максимальной скоростью переписываются в SDRAM. В случае чтения он снимает сигнал готовности Rdy сразу и выставляет его после того, как данные появиться на шине AHB. Была мысль возвращать сигнал «занят», и потребовать от Master ещё раз обратиться к контроллеру, освобождая шину от циклов ожидания, но руки не дошли.

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

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


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

В аналогичной задаче я собираюсь использовать по 2 буфера на чтение и 2 буфера н запись. Пока приемник/передатчик работает с 1 буфером второй читается/пишется. Главное чтоб время записи буфера было меньше времени опустошения буфера чтения + операции чтения следующего буфера.

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


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

aal

Дык, это, IMHO, ежели узкое место SDRAM :). У меня пока узким местом является быстродействие других узлов...

Хотя, это то самое, что я тоже добавить позже. Но руки всё не доходят и недоходят... :blush:

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


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

Простой пример

Необходимо принять в FIFO_IN 1Mbyte информации (FIFO_IN = 256 byte) и записать его в SDRAM. А затем переписать принятую информацию в частями по 512 byte в FIFO_OUT (512 byte).

Когда вы приняли первый пакет из 256 byte происходит простой шины данных порядка 8-9 тактов для закрытия текущего банка и перехода на следующий. В полностраничном режиме AUTO_PRECHARGE не работает.

Если сделать 1000 операций чтения записи то мы простоим 8000 тактов что на частоте в 130 MHZ = 60 mks я думаю это не мало. Вот и возникает вопрос почему не настраивать память для работы со следующим пакетом во время работы с текущим. Но все ничего проблема в правильном управлении буфферами FIFO

;)

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


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

А в чем проблема - задача-то вполне стандартная, когда я свой контроллер DDR делал, так одних Xapp-ов с Xilinx-овского сайта штук пять прочел. Нельзя ли один из них приспособить к делу (к ним код обычно прилагается)?

Мне пришлоссь свой городить - задача-то была довольнго специфическая - 8 каналов конкурентного доступа. Доступы-то блочные, но сильно "перпендикулярные" по адресации, и требование использовать не менее 93% теоретитческой полосы (когда в каждом такте смитывается или пишется по два слова)?

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


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

Проблема в формировании следующей комманды (активация строки установка операции) во время выполнения текущей с пакетом неопределенной длинны (вкл FULL PAGE и в конце операции формируется BURST_STOP)

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


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

Проблема в формировании следующей комманды (активация строки установка операции) во время выполнения текущей с пакетом неопределенной длинны (вкл FULL PAGE и в конце операции формируется BURST_STOP)

Все равно проблемы не видно, хотя для конкретногно, максимально производительного решения указанных вами начальных условий недостаточно - нужно больше знать о внешних треброваниях к модулю. Как должны себя вести FIFO снаружи? Какие задержуи допустимы, т.е. как разбивать данные на пакеты чтения/записи - на переключения в любом случае теряются циклы (по кр мере в одну сторону - сейчас уже не помню команды SDR SDRAM). Нельзя ли обойтись вообще без burst terminate используя пакеты определенной длины? Как связаны (если связаны) входной и выходной потоки (чтобы эффективнее использовать перекрытие банков и, соответственно, операций.

Когда все это определено можно сначала распределить все по циклам (назад по времени от памяти) считая, что контроллер "как бог" все знает заранее, потом - "высоту принятия решения" - за сколько циклов до выдачи какой команды контроллер должен инициировать блочную операцию определенного напраления. И то, что данные чтения памяти приходят с запразданием, а записи - нужно выдавать заранеее - это неизбежно. Более того, туда войдут еще такты в самой FPGA - слои регистров на входе и выходе. Может быть - даже не один - при достаточно высокой частоте и ... хотя в вашем случае, одного слоя наверняка должно хватить - каналов-то всего два и разводка может быть достаточно компактной.

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


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

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

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

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

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

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

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

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

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

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