реклама на сайте
подробности

 
 
43 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> NIOS для начинающих
barabek
сообщение Dec 21 2009, 08:48
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Переделал тест. Теперь он пишет сперва 5 ячеек подряд, затем 5 через 1, 5 через 2 и так далее до промежутка между ячейками равного 10 (получается две посылки подряд будут обращаться к одному банку в DDR но в разные блоки burst, она у меня 16 битная с burstlength=4, на один burst ложатся два int). Промежуточные ячейки, как фон, предварительно тоже заполняю. Проверял и с возрастающими адресами и с понижающимися, как в коде:
CODE
void FirstFill(unsigned char fl)
{
unsigned int i,j;
unsigned int addr=0;
for(i=0;i<300;i++)IOWR_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4, (fl?0xa5a55a5a:0x5a5aa5a5));
// for(j=1;j<11;j++)
// {
// for(i=1;i<=5;i++)
for(j=10;j>0;j--)
{
for(i=5;i>0;i--)
{
addr=((j-1)*j)/2*5+j*i;
IOWR_32DIRECT(CPU2EXTMEM_BASE+0x10000,addr*4, (fl?addr:(50000000-addr)));
}
}
//*********
void SecondTune(void)
{
unsigned int i,tmp;
for(i=0;i<300;i++)
{
tmp=IORD_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4);
tmp^=0xffffffff;
IOWR_32DIRECT(CPU2EXTMEM_BASE+0x10000, i*4, tmp);
}
}
//***********
unsigned char CheckMem(unsigned char fl)
{
unsigned int i=1,j=1,res=0,tmp;
unsigned int k;
for(k=0;k<300;k++)
{
tmp=IORD_32DIRECT(CPU2EXTMEM_BASE+0x10000, k*4);
if((((j-1)*j)/2*5+j*i)==k && j<11)
{
if(tmp!=((fl?k:(50000000-k))^0xffffffff))
res=1;
if(i==5){i=1;j++;}
else i++;
}
else
{
if(tmp!=((fl?0xa5a55a5a:0x5a5aa5a5)^0xffffffff))res=1;
}
}
return res;
}

В task блок проверки тот же. Работает, собака, как часы. Что еще можно придумать? Не может же Nios сам как-то подругому обращаться? Просто с родной (как советовал vadimuzzz) алтеровскй тестер небольшой головняк прикрутить для проверки. СтОит ли?
Может это ClockCrossBridge как-то у меня не правильно настроен, в описании мутная формула дана для минимальной длины slave-to-master, у меня он 64, а master-to-slave = 8.

Можно, конечно, забить. Такой вариант системы, как сейчас работает. Но как начну дальше писать уже нормальную прогу с несколькими task да как опять вылезет. Страшно.
Причина редактирования: Оформление кода
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Dec 21 2009, 08:57
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 barabek
когда у меня возникают проблемы похожего характера - цепляюсь сигналтабом на вх/вых порты компонента и смотрю что там творится. У меня как то тоже было что мои представления фунциклирования ниосовской проги расходились с тем, что я увидел на сигналтабе laughing.gif

Как вариант, если прога не большая и влезет в он-чип -может стоит поднять гейт-левел симуляцию (вдруг квартус чегой то за вас додумал) ?
Go to the top of the page
 
+Quote Post
barabek
сообщение Dec 21 2009, 09:28
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Kuzmi4
По поводу сигналтаба идея хорошая, но боюсь что будет: " - Петька, приборы? -40 -Что 40?.....". Всмысле как я буду отлавливать неудачные записи, не представляю. Нужно подумать.
По второму. По поводу гейт-левел понял. Но не понял причем здесь влезет или не влезет во внутреннюю память. Не могли бы разъяснить для тех кто в прочном корпусе smile.gif. Кстати по поводу такой симуляции. Я под конец написания своего контроллера пробовал такую симуляцию. Она почему-то не пошла. Т.е. вообще все молчало. Забил. Если все-таки к ней вернуться, где почитать, как проводить симуляцию вместе с ниосом. Что-бы уже наверняка. При этом мне как раз и нужно, чтобы симулировалось с внешней памятью. С внутренней и так работает.
А кто-нибудь пробовал подобную систему, но что-бы все сегменты распологались строго в DDR? Может это все-таки сомо ядро ниоса тупит при большой и изменяющейся латентностью чтения/записи данных. (всегда есть надежда что не сам виноват smile.gif ).
Причина редактирования: Избыточное цитирование
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 21 2009, 09:36
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(barabek @ Dec 21 2009, 15:28) *
А кто-нибудь пробовал подобную систему, но что-бы все сегменты распологались строго в DDR? Может это все-таки сомо ядро ниоса тупит при большой и изменяющейся латентностью чтения/записи данных. (всегда есть надежда что не сам виноват smile.gif ).

я гонял на стартер-ките. все в DDR(контроллер альтеровский), загрузка из FLASH. глюков не было, даже линукс грузил.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Dec 21 2009, 10:12
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Разъясняю - пишем прогу для ниоса2, компилим, располагаем её в on-chip памяти, далее собираем всё системку на Modelsim-е, инициализируя вашу on-chip тем что выдал IDE (там только по-моему нужно будет ELF в HEX перегнать вроде), цепляем модельки ДДР2(ищем на сайте производителя - точно должны дыть) и LCD (если есть, тут думаю всё сложней чем поиск на сайте производителя будет), выводим интересующие вайры, делаем нужные стробы и смотрим что к чему..
Но это как то долго и интересно, когда железо в разработке или заказчику нужна функциональная модель того, что есть в железе.
Да и судя по-всему для вас это всё будет проблемно по началу и займёт много времемни. Думаю что всё же проще вам прицепить сигнал-таб и просто, для начала, посмотреть транзакции - как они у вас вообсче проходят в зависимости от ваших экспериментов с программой и ниосом2, ну а потом уже и стробы понапридумывать для тригирования событий.
Ну вот как то так..
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 21 2009, 10:40
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



кстати, как-то упустили из виду. а какого рода сбой? повисает прога? и акселератор имеет прямой доступ к памяти?
Go to the top of the page
 
+Quote Post
barabek
сообщение Dec 22 2009, 03:58
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(vadimuzzz @ Dec 21 2009, 20:40) *
кстати, как-то упустили из виду. а какого рода сбой? повисает прога? и акселератор имеет прямой доступ к памяти?

Убрал data cache.
Проверил - сбои непредсказуемые. Поясняю. В моей main перед уходом в sheduler имеются несколько строк кода. В зависимости от того, куда я ставлю breakpoint, а затем после остановки пускаю дальше прога вылетает в разные места. Иногда летит в обработку exception. причем подлавливал в регистре exception 0x14,0x0c и 0x1c (Illegal Instruction, Trap Instruction и Misaligned Destination Address). В другом месте поставлю брейкпоинт или делаю пошагово может дойти до цикла for(;;); и висеть, при этом ipending и ienable висят в 0х01 (то есть должно идти в прерывание, но не идет). Была ситуация, что крутится в цикле проверки пришедшего прерывания (ipending при этом равен 0x01, а переменная active - запомненное значение ipending в файле alt_irq_handler.c). Получается, что все-таки глюк с памятью скорее всего sad.gif.
Одно радует - если повторяю одни и теже действия с breakpoint вроде есть повторяемость. Значит можно будет сигналтаб (как советует Kuzmi4) на это как-нибудь настроить. Сейчас буду читать про связку сигналтаб+ниос, где-то видел апликуху или раздел.

2 vadimuzzz .Акселератор имеет прямой доступ. У меня контроллер MemoryWraper включает себя акселератор, контроллер вывода на LCD и контроллер доступа nios к памяти. Соответственно внутри реализован арбитр, который разруливает между ними. При этом половину полосы пропускания отводится для вывода на экран (подготовку fifo строки), оставшаяся половина делится между акселератором, чтением и записью в память поровну. Просто для чтения и записи один интерфейс с nios, для акселератора отдельный.

PS. Если вообще не ставить breakpoint, то залетаю до for(;;); и весит, при этом ipending и ienable равны 0х01, status=0, exception=0. Делаю перестановки строк, опять запускаю без брейкпоинтов - зависает на бесконечном цикле определения прерывания (active=0;)Очень странно. А можно ли будет одновременно работать и в дебугере niosa и в signaltab?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 22 2009, 07:00
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата
А можно ли будет одновременно работать и в дебугере niosa и в signaltab?

можно и даже лучше так и делать www.altera.com/literature/an/an446.pdf плагин для ниоса в сигналтапе и дизассемблер умеет. еще можно попробовать так: .text и .rom запихать в он-чип, все остальное - в DDR. если сбои будут, значит конфликт с размещением(кто-то, скорее всего акселератор, пишет не по адресу, например, гадит в .text). что-то похожее было у меня, когда мой самописный avalon-master затирал память программ. сигналтапом я его и ущучил.
Go to the top of the page
 
+Quote Post
barabek
сообщение Dec 23 2009, 13:42
Сообщение #39


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



vadimuzzz и Kuzmi4, спасибо! Действительно полезный оказался плагин. Нашел по крайней мере один косяк. В проге после компиляции обнаружил, что встречаются подряд 2 инструкции stw и ldw на тот же адрес (причем неоднократно - вроде неразумно поступает компилятор, но что есть то есть). А у меня запись и чтение идут по отдельным маршрутам. Соответственно чтение иногда обгоняет запись. Отсюда имею свое горе sad.gif. Буду теперь ломать голову над этой проблемой.
Go to the top of the page
 
+Quote Post
barabek
сообщение Jan 24 2010, 07:28
Сообщение #40


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Не знаю точно, сюда нужно постить, или в раздел gcc микроконтроллеров. Поиском похожие темы не нашел.
Есть такие структуры, описывающие подпись для кнопок меню (пока только текст, без иконок)
Код
typedef struct {unsigned char length;char * arr;}lable_line_st;
typedef struct {unsigned char lines;const lable_line_st* strinrs;}lable_text_st;
typedef struct {lable_text_st text;}lable_st;

Т.е. при выводе на экран сразу могу определить сколько строк в подписи и сколько в каждой строке символов для выравнивания по центру.
Необходимо каким-то образом красиво создавать подписи на этапе компиляции. Ничего не смог придумать лучше, чем:
Код
//в заголовочном файле:
#define STRINGLINE(x) {(sizeof(x)-1),x}  
// в тексте
const lable_line_st Button1_text[]={STRINGLINE("line 0,"),STRINGLINE("line 2"),STRINGLINE("and line 3")};
const lable_st Button1={{3,
                    &Button1_text[0]
                    }};

хотелось бы, чтобы подпись можно было бы создавать как нибудь наглядней , что-то типа
Код
const lable_st Button1{{CREATETEXT("line0,","line1","and line 3" )}}

Реально ли это как-нибудь сделать? Пробовал делать структуру с переменной длиной массива
typedef struct {unsigned char lines;const lable_line_st strinrs[];}lable_text_st;
Но компилятор ругается, т.к. эта структура является вложенной в другую структуру.

PS. Работаю в nios IDE, соответственно компилятор gcc, в свойствах библиотеки не стоит флажок "support C++" ,
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 25 2010, 01:39
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



посмотрите тут http://porn.quiteajolt.com/2007/11/05/init...ay-member-in-c/

название сайта жжот )
Go to the top of the page
 
+Quote Post
Serg_Sm
сообщение Feb 10 2010, 10:07
Сообщение #42


Частый гость
**

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



Здравствуйте. Начинаю разбираться с ниосом, при этом возникло множество вопросов, кита к сожалению нет. Документации очень много, где конкретно искать непонятно плюс ко всему все рассмотренные мной описания сделаны под предыдущие версии, а в 9.1 много чего по другому.
Ответьте пожалуйста на следующие вопросы:
Я сделал проект на циклоне3 в квартусе состоящий из одного NIOS и PIO порта вывода (+JTAG UART). В NIOS IDE создал проект "Hello World small" на основе квартусовского.
1) В main вбил строчку
IOWR(0x00000000, 0, 0xffffffff); - запись в порт "1" с учетом того, что в SOPC Builder pio занимает адресное пространство с 0х00000000 верно или нет?
Скомпилилось успешно, elf создался.
2) Как зашить данный проект и откуда (квартус или NIOS IDE)? Компилирую в квартусе - в симуляторе выход не меняется.
В NIOS IDE запуск через "NIOS hardware" ничего не дает. Подцеплял плату подключенную через USB-Blaster, но не к JTAG (в плате используется AS загрузка), сброс видно что работает, но в списках соединений ничего не появляется. Будет ли работать при подключении к JTAG или надо еще что-нибудь сделать?
3) В каком именно документе находится описание использования периферии NIOS?
4) JTAG при конфигурировании NIOSа добавлять нужно для программирования? Или он по дефолту есть? "JTAG UART" это замена штатному или основной?
Go to the top of the page
 
+Quote Post
barabek
сообщение Feb 11 2010, 05:43
Сообщение #43


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(Serg_Sm @ Feb 10 2010, 21:07) *
Документации очень много, где конкретно искать непонятно плюс ко всему все рассмотренные мной описания сделаны под предыдущие версии,

Основное по NIOS - на "родине" http://www.altera.com/literature/lit-nio2.jsp (Processor Reference Handbook, Software Developer's Handbook, ну и остальные по мере надобности), по самому Quartus - естественно первым делом его handbook ( http://www.altera.com/literature/hb/qts/qu...i_handbook.pdf).
Книги эти большие, но там много воды, нужно научиться их читать, пропуская введения и т.п. перед каждым разделом.

1) Да.
2) Не понял как у Вас разведена на плате схема программирования. Возможны варианты с разведенными отдельно разъемами и JTAG и AS как на Figure 10–28. в книге "Cyclone III Device Handbook, Volume 1", на самом деле достаточно развести как "Figure 10–29. Programming Serial Configuration Devices In-System Using the JTAG Interface". У Вас вообще jtag выведен?
3) http://www.altera.com/literature/hb/nios2/n2cpu_nii5v3.pdf
4) Нет, добавлять ничего не обязательно. JTAG UART это отдельная фича (сам не пользовался smile.gif ), с помощью которой Вы можете обмениваться с консолью NIOS в процессе отладки, как если бы Вы вставили в SOPC модуль UART, развели его на плате, подключили к COM-порту и работали, например, в Гипертерминале. Плюс у этой фичи, что на плате разводить ничего не надо, минус - что работать с таким UART можно только (на сколько я знаю) из консоли NIOS IDE.
Go to the top of the page
 
+Quote Post
Serg_Sm
сообщение Feb 11 2010, 06:53
Сообщение #44


Частый гость
**

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



Большое спасибо за ответ.
Сейчас платы с разведенным JTAG у меня нет, поэтому хочу попробовать загрузить через AS. Требуется ли для этого какие-либо манипуляции в NIOS IDE?
После компиляции в симуляторе квартуса видно, что pio выводы остаются в нуле. Хотя в проекте NIOS им присваивается значение "1".
Go to the top of the page
 
+Quote Post
S_Lee
сообщение Feb 22 2010, 20:45
Сообщение #45





Группа: Участник
Сообщений: 3
Регистрация: 26-11-09
Пользователь №: 53 890



Доброго времени суток. Я начал работать в SOPC Builder (Q8.1) и столкнулся с проблемой: мне необходимо создать свой условно говоря интерфейсик, для этого я хочу создать в SOPC свой компонент который будет состоять только из сигналов входов и выходов, но, создав такой компонент он не размещается в системе, а точнее он не попадает в адресное пространство. Кто-то может подсказать что-то? Как правильно создать компонент в сопк баилдер состоящий из портов входов и выходов?
Go to the top of the page
 
+Quote Post

43 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 22:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01508 секунд с 7
ELECTRONIX ©2004-2016