LINUX.ORG.RU

Включить DDR в Standalone.

 ,


0

2

Доброго времени суток!

Восполняю пробелы в знаниях и сейчас интересует такой нескромный извращенный вопрос: а как без ОС пользоваться напрямую DDR-памятью?

Ее ж как-то надо инициализировать, определить размер, научиться туда писать и оттуда читать. Кстати, вопрос по чтению/записи - размер DDR может доходить до 16 Гб, если верить википедии, это значит, что все адреса в ней не уложатся в 32-байтный тип int, либо есть какое-то разбиение на ячейки (если верить К. Касперски и мне не изменяет память, то по 8 байт). Также еще надо где-то держать адреса других устройств в периферии... Ну, вопросов много, поэтому спрошу общими словами: где можно быстро и конкретно прочитать, как работать с DDR3? Желательно с исходниками кода и комментариями, откуда взялись все те переменные, что там используются (те исходники, что я видел - были адскими для понимания).

★★

В случае x86 этим занимается биос, смотри сырцы coreboot ради примера.

hateyoufeel ★★★★★
()

По-моему ты не с той стороны начал.

По теме скажу, что работой с памятью занимается контроллер памяти, который отображает ее в плоское адресное простанство процессора. Инициализацию контроллера проводит биос (не все контроллеры одинаковые). Параметры памяти (размер, тайминги и пр) биос читает из маленькой флэшки на модуле памяти, которая называется SPD (Serial Presence Detect).

С точки зрения операционки (или программы на голом железе) память - это абстракция. Ей не нужно знать тайминги, тип модуля и пр параметры, она работает с памятью просто как с массивом байт.

Puzan ★★★★★
()

Я не понимаю, на какой аппаратной платформе ты собираешься это ботанить?

Если тебе интересно постичь DDR3 в максимально возможной степени, то я бы посоветовал приобрести отладочную плату с микросхемой FPGA и подключенной к ней микросхемой DDR3. Для начала используй встроенный аппаратный контроллер памяти, затем реализуй контроллер памяти самостоятельно (если это возможно на данной отладочной плате). Так ты станешь техно-богом DDR3-памяти.

Я пытался осилить FPGA+DDR2 но лишь частично постиг эту мудрость, увы...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

О, мудрец! поделись же мудростию своей скорее!

aido ★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

собираюсь на xilinx zynq делать.

aido ★★
() автор топика

Детальнее опиши задачу. Про то, как работает ддр и контроллер памяти лучше почитать/посмотреть соответствующие лекции. На ютубе есть компарч лекции от карнеги-меллона.
В случае с xilinx и моим spartan6 помогает чтение доков на встроенный в фпга ддр-контроллер.

Deleted
()
Ответ на: комментарий от Deleted

У меня аналогичная связка Spartan6 + DDR2. Можно я через некоторое время обращусь с вопросами на тему встроенного контроллера памяти Spartan6? :)

Удавалось только при помощи Microblaze работать с этим контроллером памяти. Стоит задача работать с ним напрямую используя свою логику, минуя какие-либо Soft-CPU.

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Конечно.
Борда от стартеркита? Я как раз на праздниках планирую код отлаживать и заводить контроллер.

Deleted
()
Ответ на: комментарий от Deleted

Я вот тут подумал, что надо бы заставить ПЛИС вызывать мною написанный коллбэк при приходе данных. Но блок прерываний не связан с AXI DMA в схеме PS-подсистемы цинка. Че делать? как вызвать коллбэк?

aido ★★
() автор топика
Ответ на: комментарий от aido

Без схемы цинка врядли смогу что-то конкретное подсказать, но в моем случае, когда fpga цепляется на SMC шину и нужно было дергать прерывания, для этого задействовал гпио пин арма, на который повесил обработчик прерываний. Ну и соединил этот армовый гпио с пином плисины.

Deleted
()
Ответ на: комментарий от Deleted

ловить надо High Performance AXI 32b/64b Slave Ports -> DDR3 акты передачи

aido ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.