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

SRAM controller

Задача написать SRAM контроллер для Cypress CY7C1471V33, который подключен к Virtex4.

 

Чтение из SRAM'ины осуществляет процессор PowerPC. Поскольку SRAM поддерживает пакетный ( burst ) и конвейерный ( pipeline ) режимы, то задумался как это реализовать.

 

Как процессор может программно выбирать эти режимы ? Ведь функции XIo_Out32, XIo_In32 производят чтение, запись по одному адресу.

 

Может это надо как-то связать с кэш-контроллером, никак не могу понять.

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


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

Если я из ваших слов верно понял задачу, то она состоит в следующем:

у вас есть SRAM, у вас есть PowerPC внутри Virtex 4. Вы хотите написать блочок в ПЛИС, который будет осуществлять требуемый обмен между SRAM и powerPC(через ПЛИС).

Если так, то вы вольны делать почти, все что угодно=) По-моему, должно выглядеть как-то так:

процессор отдает команду ПЛИС(режим работы/начальный адрес/количество вычитываемых данных),

ПЛИС же по получении этой команды, соблюдая все временные диаграммки, лезет в SRAM, и выдает Вам куда-то(не знаком с интерфейсами ppc-fpga, хотя может и там fsl?=) ) требуемые данные.

а функции,вы в итоге сами себе и напишите, я это так понимаю=)

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


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

Вы правильно поняли задачу. Только интерфейс у процессора PLB.

 

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

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


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

как я понимаю, у Вас должен быть блочек, который отвечает за взаимодействие с ПЛИС через PLB. Я просто не совсем знаком с тем, как в PPC работает интерфейс взаимодействия c FPGA. вы просто используете GPIO на шине plb? он весьма не быстр, лучше бы,конечно, что-то другое для этих целей...

ну можно просто сделать команду для ПЛИС "читай из SRAM +начальное смещение + необходимый размер считываемого блока". А она уже складывает это в буфер и начинает выдавать в процессор, либо сразу транслирует в gpio вашего PPC. только сможет ли он с GPIO читать с нужной скоростью?

Изменено пользователем Иван Панченко

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


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

могу подкинуть один простенький контроллерчик для NoBL SRAM реализующий интерфейс рукопожатия (рукопожатие полностью двустороннее как по адресу, так и по данным), принцип передачи оконный (пока выставлен фреймовый сигнал, передача продолжается по следующим адресам). простенький потому что а) не реализовано маскирование данных при записи (но это легко докрутить) и нет перехода в энергосберегающий режим (кажись, но точно не помню). хоть интерфейс и не тот что нужен, но думаю интерфейс достаточно гибкий, чтобы его докрутить до нужной задачи.

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


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

как я понимаю, у Вас должен быть блочек, который отвечает за взаимодействие с ПЛИС через PLB. Я просто не совсем знаком с тем, как в PPC работает интерфейс взаимодействия c FPGA. вы просто используете GPIO на шине plb? он весьма не быстр, лучше бы,конечно, что-то другое для этих целей...

ну можно просто сделать команду для ПЛИС "читай из SRAM +начальное смещение + необходимый размер считываемого блока". А она уже складывает это в буфер и начинает выдавать в процессор, либо сразу транслирует в gpio вашего PPC. только сможет ли он с GPIO читать с нужной скоростью?

Запрос на чтение блока понятно как происходит. Процессор записывает в регистр размер блока, в другой регистр начальный адрес, и в конце выставляет регистр флаг. После этого начинает работу контроллер памяти. Только как происходит выдача данных процессору не совсем понятно. Как процессору передать считанный блок?

 

Что касается записи, тоже не ясно. Опять придется ставить промежуточный буфер, из которого потом контроллер вычитывает и пишет в память. Тоже не очень красиво!

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


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

все зависит от того, какой интерфейс взаимодействия FPGA-PPC. это GPIO процессора или что-то более сложное? если GPIO - понятно, что Вам огород городить придется... и еще, какая максимальная скорость, с которой Вам нужно читать из SRAM, и какая максимальная скорость вашего интерфейса FPGA-PPC?

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


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

все зависит от того, какой интерфейс взаимодействия FPGA-PPC. это GPIO процессора или что-то более сложное? если GPIO - понятно, что Вам огород городить придется... и еще, какая максимальная скорость, с которой Вам нужно читать из SRAM, и какая максимальная скорость вашего интерфейса FPGA-PPC?

Я уже все по полочкам расписал, интерфейс PLB. Контроллер связан этим интерфейсом с контроллером памяти, который мне нужно написать, а контроллер связан с SRAM через внешние порты - ноги ПЛИС.

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


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

Мне кажется, что автор темы излишне усложняет свою задачу.

 

На мой взгляд, задача должна решаться применением стандартного контроллера фирмы Xilinx (MPMC? или для SRAM применяется EMC? не помню).

В результате, эта самая память отображается в адресное пространство PPC, и обращение к ней производится без всяких функций, с банальным обращением по адресам.

Сюда же можно применить стандартные средства кэширования памяти и пр..

 

И делать свой контроллер надо только в том случае, если стандартный контроллер по каким-то причинам не подходит.

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


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

Мне кажется, что автор темы излишне усложняет свою задачу.

 

На мой взгляд, задача должна решаться применением стандартного контроллера фирмы Xilinx (MPMC? или для SRAM применяется EMC? не помню).

В результате, эта самая память отображается в адресное пространство PPC, и обращение к ней производится без всяких функций, с банальным обращением по адресам.

Сюда же можно применить стандартные средства кэширования памяти и пр..

 

И делать свой контроллер надо только в том случае, если стандартный контроллер по каким-то причинам не подходит.

Стандартный контроллер xps_mch_emc_v1_00_a подходит, решил написать с нуля сам для опыта! Задумался как реализовать pipeline и burst mode, и вообще можно ли их реализовать вообще, и непонятно реализованы ли они в xps_mch_emc_v1_00_a.

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


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

Поскольку SRAM поддерживает пакетный ( burst ) и конвейерный ( pipeline ) режимы, то задумался как это реализовать.

Как процессор может программно выбирать эти режимы ?

Выберите сами какой-нибудь один...

 

Я уже все по полочкам расписал, интерфейс PLB.

Пока объяснял, сам все понял, точно?

 

Только как происходит выдача данных процессору не совсем понятно. Как процессору передать считанный блок?

Через интерфейс PLB, вестимо.

 

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

Забудьте пока про НАПИСАТЬ, попробуйте сначала НАРИСОВАТЬ. Сначала структурную схему, потом временные диаграммы.

То, что вся память должна отображаться в адресное пространство, Вам уже сказали. Сейчас возьмите Вашу существующую Memory Map (она у вас ведь есть, не так ли?), посмотрите какого объема Ваша SSRAM, и где она будет располагаться.

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


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

могу подкинуть один простенький контроллерчик для NoBL SRAM...

Будьте так добры - выложите :laughing:

 

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


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

2 Джеймс

 

Выберите сами какой-нибудь один...

Можно и тот и другой вместе задействовать.

 

Через интерфейс PLB, вестимо.

Как? Процессор тебе записал триггер флаг, обмен по шине закончился!

 

По прерыванию предлагаешь?

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


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

Стандартный контроллер xps_mch_emc_v1_00_a подходит, решил написать с нуля сам для опыта! Задумался как реализовать pipeline и burst mode, и вообще можно ли их реализовать вообще, и непонятно реализованы ли они в xps_mch_emc_v1_00_a

Думаю, в pdf об этом должно быть написано, какие режимы поддерживаются для каждого типа внешней памяти.

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


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

Будьте так добры - выложите :laughing:

проект старый. всё никак не доходят руки его до продукта довести.

ZBT_SRAM_controller.rar

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


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

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

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

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

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

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

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

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

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

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