Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Nios+SRAM
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
ROMЫ4
Уважаемые знатоки NIOSа,помогите мне пожалуйста!
Собрал nios+sram.Поставил самое производительное ядро.Потом написал на Си простенькую программку передачи нуля и единички в SRAM.
Посмторел осциллографом CS и WE и удивился,что скорость маленькая((((использовал 80Мгц).
Может кто знает как разгоняется она????или какие нибудь есть настройки для этого!????
vadimuzzz
Цитата(ROMЫ4 @ Sep 29 2009, 00:58) *
Уважаемые знатоки NIOSа,помогите мне пожалуйста!
Собрал nios+sram.Поставил самое производительное ядро.Потом написал на Си простенькую программку передачи нуля и единички в SRAM.
Посмторел осциллографом CS и WE и удивился,что скорость маленькая((((использовал 80Мгц).
Может кто знает как разгоняется она????или какие нибудь есть настройки для этого!????

поподробнее желательно. SRAM внешняя, какой тип? картинки из SOPC-билдера и с осциллографа не помешают (маленькая скорость это сколько?). код программы опять же. так на вскидку 2 версии: или в компоненте SRAM тайминги криво настроены, или по шине avalon кто-то еще данные гоняет. можно SignalTap-ом посмотреть шину.
ROMЫ4
1)Собрал nios(самое производительное ядро) и скомпелил,ошибок нет.(использовал SRAM IDT71V416).
2)Дальше скомпелил весь проект в квартусе.
3)Создаю проект в Nios IDE и компелирую проект полностью.
вот программа:
Код
#include "count_binary.h"

#define LED_PIO_BASE 0x00003000
#define EXT_RAM_BEGIN   0x00100000

unsigned int i;

int main(void)
{
    i = 0;
    while(1)
    {
      
        *(unsigned int*)EXT_RAM_BEGIN =0;
        *(unsigned int*)EXT_RAM_BEGIN =1;
    }
    
    return 0;
}

4)потом пять лезу в квартус и компелирую весь проект.
5)Сейчас решил загрузить конфигурацию в EPCS.Все грузится.
6)хочу проверить сигналы CS и WE,но уже осциллограф ничего не показывает.
Почему не пойму?? crying.gif
может что я не так в Nios IDE?
vadimuzzz
давайте не так быстро smile.gif шаги 4 и 5 пока лишние.
попробуйте собрать проц без кэшей, есть подозрение, что вот это "*(unsigned int*)EXT_RAM_BEGIN =0; *(unsigned int*)EXT_RAM_BEGIN =1;"
он делает в кэш-памяти. кстати, выложите еще настройки линкера.

upd:
проверил на циклоне3(стартер-кит), так и есть пишет в кэш. если сделать так
Код
#include <sys/alt_cache.h>
#include <alt_types.h>
...
alt_u32 *p;
p=alt_remap_uncached(EXT_RAM_BEGIN,4);
while(1);
{
    *p=0;
    *p=1;
}

то будет писать в off-chip memory. на всякий случай проект прилагаю.
упс, не влез. вот он
dim99
Интересно, а почему нельзя написать следующим образом:

IOWR_32DIRECT(ALT_SRAM_BASE, offset, data);
vadimuzzz
Цитата(dim99 @ Sep 30 2009, 12:08) *
Интересно, а почему нельзя написать следующим образом:

IOWR_32DIRECT(ALT_SRAM_BASE, offset, data);

можно и так. alt_remap_uncached() удобно использовать, если какие-нибудь структуры в памяти лежат. тогда доступ по указателю легко сделать.
все это в 5 томе квартус-хендбука расписано.
ROMЫ4
Уважаемые гуру Niosa. Подскажите ,пожалуйста где я могу почитать про библитоетки и их функции,комманды для Nios-a. А то что-то трудновато пока дается его изучение?
Kuzmi4
Так а в "начале начал" посмотреть ??
Думаю ЭТО решит все вопросы cool.gif
ROMЫ4
Попробовал Nios_s посмотрел осциллографом cs и wr и не понял как он работает?(пробовал программу,предложенную выше).Хотелось бы узнать длительность cs,wr,rd на нем и на Nios_f?И вообще как он работатет с памятью?
vadimuzzz
Цитата(ROMЫ4 @ Oct 12 2009, 01:23) *
Попробовал Nios_s посмотрел осциллографом cs и wr и не понял как он работает?(пробовал программу,предложенную выше).Хотелось бы узнать длительность cs,wr,rd на нем и на Nios_f?И вообще как он работатет с памятью?

тайминги можно посмотреть в SOPC-билдере. Nios_s и Nios_f скорее всего работают одинаково, за исключением кеширования. ну последний еще м.б. еще пачками может считывать, надо в настройках проца смотреть.
ROMЫ4
Так вот я не пойму,во время cs проходит 8 импульсов(т.е. мы посылаем наши 1 и 0). Нопочему именно 8?каков смысл работы?хотелось бы узнать может он пошустрее с памятью работает чем мультикор?это было бы радостно)
vadimuzzz
Цитата(ROMЫ4 @ Oct 13 2009, 00:46) *
Так вот я не пойму,во время cs проходит 8 импульсов(т.е. мы посылаем наши 1 и 0). Нопочему именно 8?каков смысл работы?хотелось бы узнать может он пошустрее с памятью работает чем мультикор?это было бы радостно)

тут надо на шину Avalon смотреть, кто ее еще кроме контроллера памяти дергает. а насчет кто кого шустрее, надо четко задачу формулировать, что делать проц должен.
Stewart Little
Цитата(ROMЫ4 @ Oct 12 2009, 21:46) *
Так вот я не пойму,во время cs проходит 8 импульсов(т.е. мы посылаем наши 1 и 0). Нопочему именно 8?каков смысл работы?хотелось бы узнать может он пошустрее с памятью работает чем мультикор?это было бы радостно)

Опишите свою систему подробнее:
1. Какую память используете - только внешнюю SRAM, или On-chip RAM тоже?
2. Где у Вас располагается кодовый сегмент (т.е. откуда выбирается исполняемый код)? Куда указывает вектор сброса процессорного яда?
3. Какова разрядность Вашей внешней SRAM?
Думаю, что если Вы для себя выясните эти вопросы, то и сами со своей проблемой разберетесь smile.gif
confflex
Я, как и ROMЫ4, создавший эту тему, "удивился,что скорость маленькая". К сожелению понятных ответов я не увидел, может ROMЫ4 спрашивал как то не так? Спрошу тогда я по-своему, может кто знает?
Отсимулировал я проект работы с SSRAM, который выложил vadimuzzz, и получил при тактовой частоте 80 MHz следующее
Нажмите для просмотра прикрепленного файла
Также отсимулировал сборку NIOSa-fast, кот. меня ещё больше интересует: тактовая 50МГц, память программ и данных в SDRAM 16-бит, обмен с асинхронной SRAM, обмен для примера происходит так:
while (1)
{
IOWR_32DIRECT(SRAM_0_BASE, 0, 9);
IOWR_32DIRECT(SRAM_0_BASE, 4, 10);
IOWR_32DIRECT(SRAM_0_BASE, 8, 11);
IOWR_32DIRECT(SRAM_0_BASE, 12, 12);

IORD_32DIRECT(SRAM_0_BASE, 0);
IORD_32DIRECT(SRAM_0_BASE, 4);
IORD_32DIRECT(SRAM_0_BASE, 8);
IORD_32DIRECT(SRAM_0_BASE, 12);
}
Получил следующие результаты:
Нажмите для просмотра прикрепленного файла
В связи с этим вопросы:
1) Можно как-то ускорить обмен с SRAM без DMA? Понимаю, что больше всего обмен тормозит 16-бит память программ и данных, думал, что кэширование инструкций как-то эффективней будет работать. Может что не так делаю?
2) Как работать с ДМА? Пробовал пример из Quartusa 9.0 memtest.c, что то не заработало. Может кто покажет, как надо сделать программу отдельно для записи в SRAM и отдельный пример для чтения из SRAM.
dim99
Простите, можно вопрос: приведенные графики моделирования где были сделаны, это model sim ?
confflex
Цитата(dim99 @ Oct 14 2009, 23:16) *
Простите, можно вопрос: приведенные графики моделирования где были сделаны, это model sim ?

да
vadimuzzz
Цитата(confflex @ Oct 15 2009, 00:50) *
2) Как работать с ДМА? Пробовал пример из Quartusa 9.0 memtest.c, что то не заработало. Может кто покажет, как надо сделать программу отдельно для записи в SRAM и отдельный пример для чтения из SRAM.

вот пример http://www.altera.com/support/examples/nio...celeration.html
ROMЫ4
Уважаемые знатоки Nios-a,хочу спросить Вас следущее:
Есть плата,на ней циклон и внешняя SRAM(8-ми разрядная). Т.к. сам Nios 32-х разрядный, а память 8-ми разрядная хотелось бы научиться писать и читать из памяти. Для этого нужно:
1)подключаю ядро;
2)внутреннюю память(ROM);
3)Tri-State bridge;
Дальше я так думаю надо писать проект на vhdl, который бы помог "соеденить"память(SRAM) и Nios.
Может кто встречался с такой задачей?
Можете подсказать алгоритм как правильно научить писать и читать в 8-и разрядную память(SRAM) с помощью Nios2?
vadimuzzz
Цитата(ROMЫ4 @ Oct 16 2009, 02:31) *
3)Tri-State bridge;
Дальше я так думаю надо писать проект на vhdl, который бы помог "соеденить"память(SRAM) и Nios.
Может кто встречался с такой задачей?

Tri-State bridge именно это и делает. надо еще компонент SRAM создать в SOPC Builder`е. тут написано как: http://www.alteraforum.com/forum/showthread.php?t=6255
Stewart Little
Цитата(ROMЫ4 @ Oct 15 2009, 23:31) *
Дальше я так думаю надо писать проект на vhdl, который бы помог "соеденить"память(SRAM) и Nios.

Не надо ничего писать!
Надо читать - спецификацию шины Avalon и описание SOPC Builder'а .
Для подключения внешней SRAM к Avalon Tristate Bridge нежно сделать компонент на основе заготовки (template).
Запускайте Component Editor, выбирайте Template, далее Avalon Tristate Slave, и описывайте разрядности Вашей SRAM. Также нужно поставить галку, что даный компонент - это память (не помню точно, на какой закладке - посмотрите сами).
И все. Никаких чудес. Все остальное за Вас сделает SOPC Builder.
ROMЫ4
Кто-нибудь подскажет на счет следующего:хочу попробовать соеденить ниос и микроконтроллер(к примеру мк51).Как это можно сделать?с помощью какого интерфейса?и реально сделать так, чтобы микроконтроллер грузил данные в ниос, а он в свою очередь записывал их во внешнюю память? smile3046.gif
vadimuzzz
Цитата(ROMЫ4 @ Oct 22 2009, 00:48) *
Кто-нибудь подскажет на счет следующего:хочу попробовать соеденить ниос и микроконтроллер(к примеру мк51).Как это можно сделать?с помощью какого интерфейса?и реально сделать так, чтобы микроконтроллер грузил данные в ниос, а он в свою очередь записывал их во внешнюю память? smile3046.gif

конечно, реально. если больших претензий по скорости нет, можно соединить по SPI или UART (что там у 51-го из периферии есть?)
ROMЫ4
Вот схема микроконтроллера.Думаю, что можно осуществить связь между Nios и им по SPI.
Правильно ли я делаю:
1)создаю ядро.
2)далее подсоеденяю к нему внешюю память.
3)добавляю SPI;
4)в Nios ID написал программку по заполнению SRAM.
А как можно сделать, чтобы микроконтроллер был мастером?
что-то пока не получается crying.gif
Не могли бы Вы помочь с последовательностью действий laughing.gif
За ранее спасибо rolleyes.gif
vadimuzzz
Цитата(ROMЫ4 @ Oct 23 2009, 00:35) *
А как можно сделать, чтобы микроконтроллер был мастером?

когда добавляете компонент в SOPC, можно выбрать master/slave. ну и тайминги настроить. Quartus Handbook, 5-й том.
ROMЫ4
Хотелось бы побыстрее скорость.можно ли это реализовать?у меня на плате микроконтроллер соеденен с плис ножками wr,rd,data,ale,int.
Можно ли,каким-нибудь образом организовать байтовую пересылку напрямую из микроконтроллера в Nios.
может с помощью интерфейса Avalon ST Sourse и Avalon ST sink?Там вроже можно настроить передачу и прием даных.
Что-то пока на ум не приходит,что между ними должно быть crying.gif
Stewart Little
Цитата(ROMЫ4 @ Oct 23 2009, 20:16) *
Хотелось бы побыстрее скорость.можно ли это реализовать?у меня на плате микроконтроллер соеденен с плис ножками wr,rd,data,ale,int.
Можно ли,каким-нибудь образом организовать байтовую пересылку напрямую из микроконтроллера в Nios.
может с помощью интерфейса Avalon ST Sourse и Avalon ST sink?Там вроже можно настроить передачу и прием даных.
Что-то пока на ум не приходит,что между ними должно быть crying.gif

Ну Вам же русским языком ответили, что "между ними" должен быть Avalon Master. Этого мастера вы должны создать сами. Как это сделать - читайте документацию. Ссылки я приводил. Не стоит гнаться за лаврами очередного "не читателя" smile.gif
За Вас тут Ваш проект никто делать не будет.
vadimuzzz
Цитата(ROMЫ4 @ Oct 23 2009, 23:16) *
Хотелось бы побыстрее скорость.можно ли это реализовать?у меня на плате микроконтроллер соеденен с плис ножками wr,rd,data,ale,int.
Можно ли,каким-нибудь образом организовать байтовую пересылку напрямую из микроконтроллера в Nios.
может с помощью интерфейса Avalon ST Sourse и Avalon ST sink?Там вроже можно настроить передачу и прием даных.
Что-то пока на ум не приходит,что между ними должно быть crying.gif

ну вроде договорились же, что это будет SPI smile.gif. вот и добавьте его в SOPC.
http://www.altera.com/literature/hb/nios2/n2cpu_nii51011.pdf
ROMЫ4
Спасибо всем за помошь.Попробую по-разному. smile3046.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.