Serega Doc 0 19 января, 2005 Опубликовано 19 января, 2005 · Жалоба У меня два FIFO буффера связанные с SDRAM контроллером Один передает информацию на контроллер (в память соответсвнно), а другой принимает прочитанные данные из памяти. Проблема в организации управления двумя FIFO буфферами. Потому что при чтении латентность есть а при записи нет. Может у когото была такая проблема :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASN 0 19 января, 2005 Опубликовано 19 января, 2005 · Жалоба Serega Doc Какая SDRAM (тип, латентность), какой контроллер (куски кода), к какой шине подключен (со обратной строрны FIFO)? Желательно увидеть код, или хотя бы мысли на этот счёт. Советую почитать книжку Суровой, Шейнина. (точно не помню - кто-то упёр, и не вернул :angry2: ). Там, по-моему, что-то подобное рассматривалось. :bb-offtopic: А вот если бы кто подкинул дельную ссылку на реализацию модельки с применением VHPI, был бы брагодарен. . IMHO, не только я. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 20 января, 2005 Опубликовано 20 января, 2005 · Жалоба Ниже структура реализуемого устройства. Проблема в правильном формировании управляющих сигналов для FIFO буферов. Вернее не в формировании а в оптимальной структуре при неопределенной длительности пакета (вкючен full page) но пакет может изменятся от операции к о перации. Данные 8 бит. Если кто разбтрался с корками для SDRAM или DDR скажите оптимизируется ли работа по тактам для пакетов (в конце пакета данных формируется упр. сигн. для следующего пакета) или каждая новая команда с памятью выполняется последовательно одна после другой. А как называется книга Что такое VHPI? Спасибо! Вопрос.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASN 0 20 января, 2005 Опубликовано 20 января, 2005 · Жалоба Serega Doc Книжка: Она из Google - ссылок Следующая из Google - ссылок VHPI - интерфейс для подключения моделей на C++ к среде моделирования VHDL. У меня весь обмен осуществляется фиксированными посылками по AHB (в соответствии со спецификацией шины только как Slave.) После того начали поступать данные от SDRAM захватывается шина и осуществляется передача пакета. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 20 января, 2005 Опубликовано 20 января, 2005 · Жалоба Тоесть настройка SDRAM на следующий пакет только по окончании работы с текущим Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASN 0 20 января, 2005 Опубликовано 20 января, 2005 · Жалоба Serega Doc А как же иначе? Может быть я чего-то не понимаю? Посмотрел рисунок - не понял как одновременно можно читать и писать в SDRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 20 января, 2005 Опубликовано 20 января, 2005 · Жалоба Ну если работать в одной строке то в сдрам памяти можно настраивать различные банки на различные операции и тем самым формировать непрерывный поток. посмотрите стр 28 - 29 или я чевото не понял operation_timing.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASN 0 20 января, 2005 Опубликовано 20 января, 2005 · Жалоба Serega Doc Точнее опишите задачу, пожалуйста. У меня есть подозрение, что мы говорим о разных вещах :). Схемотехника моего устройства предусматривает процессор, память, периферию и вычислитель специальных функций на FPGA. Таким образом, практически у каждого устройства есть своя локальная память и контроллер доступа к шине AHB. Хотя спецификация шины и предусматривает режим обмена данными неопределённой длины, реально пакеты ограничены объёмом обрабатываемых данных в устройствах. Контроллер SDRAM имеет раздельные сигналы адреса, данные чтения, данные записи и сигналы контроля шины. Из них наиболее интересны сигналы Ack и Rdy (хотя в AHB они именуются иначе и вообще физически представлены в виде кода из нескольких бит). Таким образом, когда контроллер SDRAM получает команду с шины (запись или чтение), он формирует сигнал Ack, сообщая, что он понял команду. В случае записи он захватывает данные с шины на каждом такте, а затем снимает сигнал готовности Rdy. Фактически, данные с шины поступают в локальное WR_FIFO_SDRAM, пока контроллер активизирует банк, строку и колонку. Затем они с максимальной скоростью переписываются в SDRAM. В случае чтения он снимает сигнал готовности Rdy сразу и выставляет его после того, как данные появиться на шине AHB. Была мысль возвращать сигнал «занят», и потребовать от Master ещё раз обратиться к контроллеру, освобождая шину от циклов ожидания, но руки не дошли. Со стороны SDRAM для линии данных контроллер выдаёт сигналы на переключение шины с вывода на ввод, принудительно вставляя один такт во избежание конфликтов. Таким образом, у меня и возник вопрос, как можно одновременно писать и читать SDRAM. Просто в моей модели её использования таким образом невозможно в принципе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aal 0 21 января, 2005 Опубликовано 21 января, 2005 · Жалоба В аналогичной задаче я собираюсь использовать по 2 буфера на чтение и 2 буфера н запись. Пока приемник/передатчик работает с 1 буфером второй читается/пишется. Главное чтоб время записи буфера было меньше времени опустошения буфера чтения + операции чтения следующего буфера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASN 0 21 января, 2005 Опубликовано 21 января, 2005 · Жалоба aal Дык, это, IMHO, ежели узкое место SDRAM :). У меня пока узким местом является быстродействие других узлов... Хотя, это то самое, что я тоже добавить позже. Но руки всё не доходят и недоходят... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 21 января, 2005 Опубликовано 21 января, 2005 · Жалоба Простой пример Необходимо принять в 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 ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey Filippov 0 28 января, 2005 Опубликовано 28 января, 2005 · Жалоба А в чем проблема - задача-то вполне стандартная, когда я свой контроллер DDR делал, так одних Xapp-ов с Xilinx-овского сайта штук пять прочел. Нельзя ли один из них приспособить к делу (к ним код обычно прилагается)? Мне пришлоссь свой городить - задача-то была довольнго специфическая - 8 каналов конкурентного доступа. Доступы-то блочные, но сильно "перпендикулярные" по адресации, и требование использовать не менее 93% теоретитческой полосы (когда в каждом такте смитывается или пишется по два слова)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 28 января, 2005 Опубликовано 28 января, 2005 · Жалоба Проблема в формировании следующей комманды (активация строки установка операции) во время выполнения текущей с пакетом неопределенной длинны (вкл FULL PAGE и в конце операции формируется BURST_STOP) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey Filippov 0 28 января, 2005 Опубликовано 28 января, 2005 · Жалоба Проблема в формировании следующей комманды (активация строки установка операции) во время выполнения текущей с пакетом неопределенной длинны (вкл FULL PAGE и в конце операции формируется BURST_STOP) <{POST_SNAPBACK}> Все равно проблемы не видно, хотя для конкретногно, максимально производительного решения указанных вами начальных условий недостаточно - нужно больше знать о внешних треброваниях к модулю. Как должны себя вести FIFO снаружи? Какие задержуи допустимы, т.е. как разбивать данные на пакеты чтения/записи - на переключения в любом случае теряются циклы (по кр мере в одну сторону - сейчас уже не помню команды SDR SDRAM). Нельзя ли обойтись вообще без burst terminate используя пакеты определенной длины? Как связаны (если связаны) входной и выходной потоки (чтобы эффективнее использовать перекрытие банков и, соответственно, операций. Когда все это определено можно сначала распределить все по циклам (назад по времени от памяти) считая, что контроллер "как бог" все знает заранее, потом - "высоту принятия решения" - за сколько циклов до выдачи какой команды контроллер должен инициировать блочную операцию определенного напраления. И то, что данные чтения памяти приходят с запразданием, а записи - нужно выдавать заранеее - это неизбежно. Более того, туда войдут еще такты в самой FPGA - слои регистров на входе и выходе. Может быть - даже не один - при достаточно высокой частоте и ... хотя в вашем случае, одного слоя наверняка должно хватить - каналов-то всего два и разводка может быть достаточно компактной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 29 января, 2005 Опубликовано 29 января, 2005 · Жалоба Пасибо! Объясните только что значит слои? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться