Jump to content
    

нет.

Надо просто линкеру указать что у него есть такая память.

 

Ну я все элементы добавил и указал адреса. Сделал несколько проектов в кусис.

 

Кстати, можно ли как-то внося изменения в кусисе применять их и в ниос2 эклипсе не создавая заново проект. А то не удобно каждый раз заново создавать проект

Share this post


Link to post
Share on other sites

Кстати, можно ли как-то внося изменения в кусисе применять их и в ниос2 эклипсе не создавая заново проект. А то не удобно каждый раз заново создавать проект

Этого и не надо делать (заново создавать). Правой кнопкой на project_name_bsp->Nios II->Generate BSP/BSP Editor (если хотите настройки генерации BSP менять).

Share this post


Link to post
Share on other sites

Этого и не надо делать (заново создавать). Правой кнопкой на project_name_bsp->Nios II->Generate BSP/BSP Editor (если хотите настройки генерации BSP менять).

 

А если я в кусисе переименовал проект, то как можно сделать?

Share this post


Link to post
Share on other sites

а... 3.2 Гигабита...

Тут я просто обязан был спросить: Вы ошибались, да? ;)

 

 

А если я в кусисе переименовал проект, то как можно сделать?

Тогда есть варианты, но я бы сделал так:

progect_name_bsp->BSP Editor->вылазит окно Nios II BSP Editor

Далее в окне Nios II BSP Editor:

File->New BSP->Выбираете нужный (новый) SOPC Information File Name->снимаете галку Use default locations->Задаёте название progect_name_bsp->Generate

 

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

 

Share this post


Link to post
Share on other sites

Получается что я ошибся... мне только не понятно чего вы хотите?

 

Если вам будет приятно потешить местечковое самолюбие вы разработчик конечно гораздо лучше чем я.

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

Share this post


Link to post
Share on other sites

Если вам будет приятно потешить местечковое самолюбие вы разработчик конечно гораздо лучше чем я.

Не собирался тут с Вами ничем меряться, всего лишь указал на Ваше свойство уверенно давать ответы на вопросы в которых Вы некомпетентны. Извините, если это задело Вас.

Далее был просто стёб, жаль, что Вы не заценили :crying:

 

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

Я не говорил, что это будет быстрее (если читать/писать данные в одну и ту же память), а говорил, что это разгрузит проц и он сможет делать что-то там ещё во время пока DMA переливает данные.

Share this post


Link to post
Share on other sites

Из полезного вот что надо сделать

надо ниосом в память записать кусок данных

считать кусок данных

и записать - считать кусок данных попеременно (то есть 4 байта записали, затем 4 байта считали). Этот режим лучше попробовать в нескольких вариантах (16 байт записали, 4 считали, 32 байта записали, 4 считали).

Писать и читать надо из разных адресов. Данные для записи надо брать из какой-то valotile переменной. А лучше из внешней периферии потому что надо еще через кеш альтеры пробиться, то есть чтобы компилятор поставил правильные команды.

 

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

 

при скорости 15 МСлов в секунду и проце 100 МГц, у вас на каждую операцию есть 6 тактов, что-то мне говорит что проц не успеет. Кстати сколько микросхем памяти у проца? то есть реально какой длинны слово оно может записать за такт?

 

П.С. фраза "что-то мне говорит" означает что я не уверен, но мне так кажется

Share this post


Link to post
Share on other sites

Кстати сколько микросхем памяти у проца? то есть реально какой длинны слово оно может записать за такт?

Микросхема памяти там одна, это можно посмотреть в доке на плату (название платы ТС приводил выше).

Share this post


Link to post
Share on other sites

А сколько тактов доступ к данным по шине Avalon? На чтение, на запись, и в бёрсте? И сколько частота шины в вашем проце?

Share this post


Link to post
Share on other sites

А сколько тактов доступ к данным по шине Avalon? На чтение, на запись, и в бёрсте? И сколько частота шины в вашем проце?

Частота шины будет равна частоте процессора (100 МГц). Это и будет максимально возможная скорость записи/чтения, если контроллер DDR2 не будет тупить и выставлять waitrequest, и если данные будут записываться потоком. Спецификацию на Avalon MM, если интересно, можете посмотреть тут.

Share this post


Link to post
Share on other sites

нет

потому что нужно адрес не

int addr_on_chip=0x4008000

 

а

int *addr_on_chip = (int *)0x4008000;

 

записать туда *addr_on_chip = 10;

считать оттуда

int Temp = *addr_on_chip;

 

 

при условии что 0x4008000 - это адрес в ДДР

 

смотрел код из документа an398.pdf там написано

 

unsigned int *led_address;

unsigned long *DDR_address; //long is 32 bits.

int led_value;

int addr;

int datar;

int ddr_data_out;

char packet[32];

DDR_address = (unsigned long *)0x80000000; //make non-cache

led_address = (unsigned int *)0x84008800; //make non-cache

 

В чем отличие *addr_on_chip = (int *)0x4008000 от addr_on_chip = (int *)0x4008000

Share this post


Link to post
Share on other sites

букварь по С надо почитать.

в чем отличие

int A;

от

int *A;

?

 

забавно что в вашем примере непонимание еще даже глубже:)

 

вам надо еще узнать разницу между

 

int *A;

 

и

*A просто, при условии что объявлено как int *A;

 

 

естественно в приведенном примере сделано правильно

переменная объявлена как указатель и адресу присвоено значение

 

 

меня вот комментарии интересуют

0x84008800; //make non-cache

то есть получается что адрес 4008800 - под кешем, а если поставить старшую единичку, то будет обращение в те же адреса, только без кеша?

так надо это понимать? То есть у ниоса тоже есть не кешируемое пространство, и в целом можно обращаться к портам через указатель, просто написав макрос добавления старшей единички? Или там как-то хитро ММУ настроен, что обращение в эти адреса порождает вызов спец команд?

 

---upd

перечитал некрасиво без ответа

 

int *A; - объявление указателя на int

int *A = (int *)ADDR; - объявление указателя на int и сразу задание указателю значения ADDR (ссылается на адрес ADDR)

A = (int *)ADDR; - задание значение указателю ADDR (ссылается на адрес ADDR)

*A = VALUE; - задание значения переменной на которую ссылается указатель

Share this post


Link to post
Share on other sites

то есть получается что адрес 4008800 - под кешем, а если поставить старшую единичку, то будет обращение в те же адреса, только без кеша?

так надо это понимать?

Да, у NiosII gen1 именно так. "Буквать по ... надо почитать" (с) Ваше.

 

У NiosII gen2, кстати, кэширование делается уже по-другому.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...