Полная версия этой страницы:
NIOS для начинающих
Konst_777
Mar 3 2012, 21:16
Нажмите для просмотра прикрепленного файла Цитата(Pashtet791 @ Mar 3 2012, 16:34)

...А я прям не знаю, с какой стороны подступиться

...
Используйте нисходящее программирование, изучите datasheet
24c1024.pdf и задавайте вопросы автору
i2c_master__ComMod_.doc.
Если светодиодом успешно помигали, то сможете добавить в проект четыре файла I2C.c, I2C.h, I2C_ioctl.c и I2C_ioctl.h. Добавили? Теперь, самое главное не забыть написать имя автора в заголовках этих файлов.
I2C.h - уже можно отдать программисту, который будет использовать обмен с EEPROM.
/*
* I2C.h
*
* Created on: 03.03.2012
* Author:
*/
#ifndef I2C_H_
#define I2C_H_
#include "alt_types.h"
// результаты выполнения функций (коды ошибок)
#define I2C_OK 0
#define I2C_IO_ERROR -1
#define I2C_ADDRESS_OVERFLOW -2
// максимальный байт, который можно адресовать в AT24C1024
#define EEPROM_LENGTH 131071
// размер страницы для AT24C1024
#define EEPROM_PAGE_LENGTH 256
/*
*
* Чтение "len" байт в массив "data" начиная с адреса "eeprom_offset" EEPROM.
* Функция возвращает результат выполнения чтения из EEPROM AT24C1024
*
*/
alt_8 I2C_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);
/*
*
* Запись "len" байт начиная с адреса "eeprom_offset" EEPROM из массива "data". Значение "len" должно быть от 1 to 255
* Функция возвращает результат выполнения записи в EEPROM AT24C1024
*
*/
alt_8 I2C_write(alt_u32 eeprom_offset, alt_u16 len, alt_u8* data);
#endif /* I2C_H_ */
Модули I2C.c, I2C_ioctl.c и I2C_ioctl.h Вы будете еще дорабатывать.
Pashtet791
Mar 4 2012, 05:54
Цитата(Konst_777 @ Mar 4 2012, 00:16)

Нажмите для просмотра прикрепленного файла Используйте нисходящее программирование, изучите datasheet
24c1024.pdf и задавайте вопросы автору
i2c_master__ComMod_.doc.
Если светодиодом успешно помигали, то сможете добавить в проект четыре файла I2C.c, I2C.h, I2C_ioctl.c и I2C_ioctl.h. Добавили? Теперь, самое главное не забыть написать имя автора в заголовках этих файлов.
I2C.h - уже можно отдать программисту, который будет использовать обмен с EEPROM.
/*
* I2C.h
*
* Created on: 03.03.2012
* Author:
*/
#ifndef I2C_H_
#define I2C_H_
#include "alt_types.h"
// результаты выполнения функций (коды ошибок)
#define I2C_OK 0
#define I2C_IO_ERROR -1
#define I2C_ADDRESS_OVERFLOW -2
// максимальный байт, который можно адресовать в AT24C1024
#define EEPROM_LENGTH 131071
// размер страницы для AT24C1024
#define EEPROM_PAGE_LENGTH 256
/*
*
* Чтение "len" байт в массив "data" начиная с адреса "eeprom_offset" EEPROM.
* Функция возвращает результат выполнения чтения из EEPROM AT24C1024
*
*/
alt_8 I2C_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);
/*
*
* Запись "len" байт начиная с адреса "eeprom_offset" EEPROM из массива "data". Значение "len" должно быть от 1 to 255
* Функция возвращает результат выполнения записи в EEPROM AT24C1024
*
*/
alt_8 I2C_write(alt_u32 eeprom_offset, alt_u16 len, alt_u8* data);
#endif /* I2C_H_ */
Модули I2C.c, I2C_ioctl.c и I2C_ioctl.h Вы будете еще дорабатывать.
Спасибо большое
Konst_777
Mar 4 2012, 06:22
Цитата(Pashtet791 @ Mar 4 2012, 08:54)

Спасибо большое

Добро пожаловать в Nios II
Уверен, что программист, который будет использовать обмен с EEPROM вернет Вам I2C.h со следующими вопросами:
- Почему Вы дали ему I2C.h, хотя он работает с EEPROM и знать не желает, через какой интерфейс идет обмен.
- Почему у функции I2C_write() ограничение на запись в 256 байт. Ему совсем не интересно знать про Ваши ограничения.
Тогда Вы перепишете Ваши модули и отдадите этому привереде файл EEPROM.h:
/*
* EEPROM.h
*
* Created on: 03.03.2012
* Author:
*/
#ifndef EEPROM_H_
#define EEPROM_H_
#include "alt_types.h"
// результаты выполнения функций (коды ошибок)
#define EEPROM_OK 0
#define EEPROM_IO_ERROR -1
#define EEPROM_ADDRESS_OVERFLOW -2
// максимальный байт, который можно адресовать в AT24C1024
#define EEPROM_LENGTH 131071
/********************************************************************************
*******************************
*
* Чтение "len" байт в массив "data" начиная с адреса "offset" EEPROM.
* Функция возвращает результат выполнения чтения из EEPROM AT24C1024
*
********************************************************************************
*******************************/
alt_8 eeprom_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);
/********************************************************************************
*******************************
*
* Запись "len" байт начиная с адреса "offset" EEPROM из массива "data".
* Функция возвращает результат выполнения записи в EEPROM AT24C1024
*
********************************************************************************
*******************************/
alt_8 eeprom_write(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);
#endif /* EEPROM_H_ */
В свою очередь, у Вас появится желание задать вопрос автору
i2c_master__ComMod_.doc - может ли он создать такой контроллер связи с EEPROM, который будет отображать содержимое EEPROM на область памяти процессора Nios II.
Скорее всего ответ автора контроллера связи с EEPROM будет в духе: "Идите, идите, я не подаю по понедельникам". Но попробовать можно
Pashtet791
Mar 5 2012, 08:22
Цитата(Konst_777 @ Mar 4 2012, 10:22)

Добро пожаловать в Nios II
Уверен, что программист, который будет использовать обмен с EEPROM вернет Вам I2C.h со следующими вопросами:
- Почему Вы дали ему I2C.h, хотя он работает с EEPROM и знать не желает, через какой интерфейс идет обмен.
- Почему у функции I2C_write() ограничение на запись в 256 байт. Ему совсем не интересно знать про Ваши ограничения.
Тогда Вы перепишете Ваши модули и отдадите этому привереде файл EEPROM.h:
/*
* EEPROM.h
*
* Created on: 03.03.2012
* Author:
*/
#ifndef EEPROM_H_
#define EEPROM_H_
#include "alt_types.h"
// результаты выполнения функций (коды ошибок)
#define EEPROM_OK 0
#define EEPROM_IO_ERROR -1
#define EEPROM_ADDRESS_OVERFLOW -2
// максимальный байт, который можно адресовать в AT24C1024
#define EEPROM_LENGTH 131071
/********************************************************************************
*******************************
*
* Чтение "len" байт в массив "data" начиная с адреса "offset" EEPROM.
* Функция возвращает результат выполнения чтения из EEPROM AT24C1024
*
********************************************************************************
*******************************/
alt_8 eeprom_read(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);
/********************************************************************************
*******************************
*
* Запись "len" байт начиная с адреса "offset" EEPROM из массива "data".
* Функция возвращает результат выполнения записи в EEPROM AT24C1024
*
********************************************************************************
*******************************/
alt_8 eeprom_write(alt_u32 eeprom_offset, alt_u32 len, alt_u8* data);
#endif /* EEPROM_H_ */
В свою очередь, у Вас появится желание задать вопрос автору
i2c_master__ComMod_.doc - может ли он создать такой контроллер связи с EEPROM, который будет отображать содержимое EEPROM на область памяти процессора Nios II.
Скорее всего ответ автора контроллера связи с EEPROM будет в духе: "Идите, идите, я не подаю по понедельникам". Но попробовать можно

Сел разбираться. Насколько я понимаю, функция eeprom_write должна записывать данные из массива data в EEPROM. Открыл EEPROM.c и вижу, что функция eeprom_write вызывает I2C_start_io, которая выдает в регистр REG_COMMAND_WRITE команду начала обмена, адрес устройства, бит P0 (так и не понял его назначение) и признак записи/чтения.
Если я правильно понимаю, мне нужно при помощи команд IOWR и IORD записывать/читать по содержащемуся в REG_COMMAND_WRITE адресу информацию из data. А разряды REG_STATUS_READ, помеченные как информация для чтения, должны помещать в себе читаемую информацию.
Konst_777
Mar 5 2012, 20:52
Цитата(Pashtet791 @ Mar 5 2012, 11:22)

...Открыл EEPROM.c и вижу, что функция eeprom_write вызывает I2C_start_io...
Это просто пример использования регистра REG_COMMAND_WRITE. В I2C.h я использую макрос с именем COMOD_WR_CONTROL. Действительно, правильнее использовать для этого макроса имя REG_COMMAND_WRITE.
Цитата(Pashtet791 @ Mar 5 2012, 11:22)

... бит P0 (так и не понял его назначение)...
Нужно изучить
24c1024.pdf. Емкость EEPROM AT24C1024 составляет 128 Кбайт. То есть, чтобы адресовать байт используется 17-разрядный адрес. Младшие 16 разрядов выдаются двумя байтами после Device Address (см. рис. 2, 3, 5, 6). А старший разряд адреса, который не поместился в эти два байта, выдается в разряде P0 байта Device Address.
Цитата(Pashtet791 @ Mar 5 2012, 11:22)

Если я правильно понимаю...
По-моему, Вам нужно попросить автора
i2c_master__ComMod_.doc упростить жизнь и себе и Вам. На самом деле нет никакого выигрыша от применения этого контроллера связи с EEPROM. Ни по времени обращения к EEPROM ни по размеру программы процессора Nios II. Для работы с EEPROM необходимо управлять всего двумя сигналами SCL и SDA. Интерфейс FPGA с EEPROM должен содержать два регистра на чтение и запись. Они так и должны называться SCL и SDA. Через младшие разряды этих регистров процессор Nios II будет устанавливать и считывать состояние линий SCL и SDA. Значение старших разрядов этих регистров должно игнорироваться при записи и устанавливаться в ноль при считывании.
Таким образом, автор
i2c_master__ComMod_.doc должен добавить к SOPC два компонента PIO и закончить разработку "контроллера связи с EEPROM" в течение 5 минут. А Вы потратите пару дней на изучение
24c1024.pdf, написание и отладку программы.
Прошу помочь с программированием EPCS4, уже 4-й день мучаюсь но не могу запустить из неё nios II.
Сразу скажу что форум перерыл весь, за 4 дня испробовал всё что тут нашёл, но ничего не работает.
Скриншоты ключевых моментов прилагаются.
Содержание файла nios2-flash-override.txt, не уверент что тут всё правильно написано поправте если что:
CODE
[EPCS-FF] # EPCS4N
sector_size = 65536
sector_count = 8
таким скриптом пользовался:
CODE
#!/bin/sh
sof2flash --input=EPCS4_SRAM.sof --output=epcs.flash --epcs --verbose
elf2flash --input=software/soft/soft.elf --output=soft.flash --epcs --after=epcs.flash --verbose
nios2-elf-objcopy -I srec -O ihex soft.flash soft.hex
Что бы я не делал через nios2-flash-programmer заливаю ли я прошивку или что то подобное, флешка стирается (erase) но прогресс не уходит дальше 0% и имеем то что видим на terminal_bad.gif(прикрепл.).
Пробовал создавать по методике с сайта naliwator.narod.ru там где elf файл добавляли к sof конвертировали в hex и затем конвертером в jic.
Аппаратная часть работает NIOS II так и не смог оживить.
Вектор сброса указал на контроллер EPCS. (eclipse_BSP_editor.gif)
Что дальше делать не знаю, подскажите кто чем может, уже даже не знаю за что и хвататься, что делаю не так?
naliwator
Mar 9 2012, 10:54
Orochi, пробовали на залитой системе активизировать проект, загрузив через Eclipse elf файл? В какой версии Quartus II работаете? Пробовали ли прочитать ончип память после старта процессора? Пробовали ли вы не в Qsys, а в Sopc Builder создать подобный проект?
В итоге, после 5 дней "напряжённого труда" удалил проект и создал его заново. И как не странно Flash Programmer с первого раза всё прошил на ура без единой ошибки. А если бы у меня был проект не "тестовый" ... даже страшно думать ... время жалко)
PS: Quartus 11.1 sp2 32-bit/Windows 7 - 32-bit
StripSmile
Mar 16 2012, 13:55
Доброго времери суток, товарищи программеры

Подскажите такую штуку: вставляю свои библиотеки в проект (виртуальный каталог с системы), но не все файлы из этих библиотек я использую. Проектов много, и в одних нужно использовать одни файлы, в других другие, но библиотеки общие. Так вот, когда я делаю на ненужных файлах "Exclude from build..." - файл помечается другим значком (типа стал игнорируемым), но при компиляции он остаётся в Makefile и соответственно вкомпиливается и выдаёт ошибки (ошибки связанные с наличием перифирии, которой нет в этом проекте, но используется в других проектах). Если создать несколько файлов в корне проекта - то вроде как функция исколючения файлов с компиляции работает нормально, но именно на виртуальных каталогах непонятный глюк. Подскажите пожалуйста, может я не правильно каталог библиотек добавил, или же нужно как-то по-другому осуществлять менеджмент библиотек?
В примере я исключил FRAM.C но видно, что в Makefile он остался.
ЗЫЖ В Nios II 11й версии уже всё отлично работает, и хорошо всё сделано, НО сам квартус очень глючный,а SOPC вообще неизвестно как компилит
_Desh_
Apr 10 2012, 20:55
Возникла такая проблема. Самый простой пример с прерываниями не работает - count_binary (который идет в комплекте с квартусом и ниосом). Подобные обработчики прерываний раньше уже писал на версии 9.1 - все работает. При переносе проекта на новый квартус 11.1 - ни в какую. В среде NIOS II SBT при компиляции выводит сообщение об ошибке - undefined reference to alt_ic_irq_register (использую vectored interrupt controller). Т.е. не может зарегистрировать обработчик прерывания. Заголовочный файл "sys\alt_irq.h" добавлен. Все по идее должен видеть - но результат нулевой. Не работает также функция alt_irq_register.
На форуме альтеровском смотрел - там были подобные вопросы, но никто толком так ничего и не ответил. Кто что подскажет?
barabek
Apr 10 2012, 22:46
Цитата(_Desh_ @ Apr 11 2012, 06:55)

Возникла такая проблема. Самый простой пример с прерываниями не работает - count_binary (который идет в комплекте с квартусом и ниосом). Подобные обработчики прерываний раньше уже писал на версии 9.1 - все работает. При переносе проекта на новый квартус 11.1 - ни в какую. В среде NIOS II SBT при компиляции выводит сообщение об ошибке - undefined reference to alt_ic_irq_register (использую vectored interrupt controller). Т.е. не может зарегистрировать обработчик прерывания. Заголовочный файл "sys\alt_irq.h" добавлен. Все по идее должен видеть - но результат нулевой. Не работает также функция alt_irq_register.
На форуме альтеровском смотрел - там были подобные вопросы, но никто толком так ничего и не ответил. Кто что подскажет?
Я VIC не использовал, но указанной Вами функции не нашел и в документации. Может имели ввиду alt_ic_
isr_register ?
А функцию alt_irq_register они перекинули в устаревшие. Нужно подключать файл <priv/alt_legacy_irq.h>
_Desh_
Apr 11 2012, 03:05
Цитата(barabek @ Apr 11 2012, 02:46)

Я VIC не использовал, но указанной Вами функции не нашел и в документации. Может имели ввиду alt_ic_isr_register ?
А функцию alt_irq_register они перекинули в устаревшие. Нужно подключать файл <priv/alt_legacy_irq.h>
Да-да, верно, alt_ic_
isr_register, спасибо!
Да alt_irq_register мне и не нужна, это я просто хотел проиллюстрировать, что не работает самый запростецкий проект, не могу понять из-за чего. Все заголовочные фалйы подключены, VIC в системе присутствует, переменная ALT_ENHANCED_API_PRESENT (или как-то там) объявлена. Среда разработки функцию видит (переходит по Ctrl + клик на имени функции к ее объявлению). То есть все сделано по документации. И повторюсь, в 9.1 абсолютно такой же софт успешно компилируется и работает.
_Desh_
Apr 11 2012, 05:56
Вот сейчас на работе пробую вообще пустую программу скомпилировать. Состав системы: nios, onchip_memory, epcs_flash_controller, interval_timer. Qsys чего-то там генерирует (без ошибок и предупреждений), запускаю Nios II SBT, пустой проект, набираю код
Код
int main()
{
while (1);
return 0;
}
При компиляции мне выдает ошибку в файле alt_avalon_timer_sc_init.c (!), т.е. сам у себя в драйверах HAL. Пишет:
Код
undefined reference to 'alt_ic_isr_register'
все что нужно в include прописано? В исходниках ниоса вполне могут быть косяки, не пугайтесь так сильно
_Desh_
Apr 11 2012, 07:00
Цитата(Wic @ Apr 11 2012, 10:27)

все что нужно в include прописано? В исходниках ниоса вполне могут быть косяки, не пугайтесь так сильно

В данном конкретном исходнике все прописано. Мой код ничего не делает, так что в него ничего включать и не надо.
Да я не пугаюсь, но делать-то что? Исходники править? Откатываться на версию 9.1? Спрашиваю исключительно в надежде на то, что кто-нибудь уже сталкивался и знает как решить.
Перегенерировать проект пробовали? пересобрать заново? проверил у меня всё определяется ква версии 11,1сп1
_Desh_
Apr 11 2012, 10:46
Цитата(Wic @ Apr 11 2012, 12:25)

Перегенерировать проект пробовали? пересобрать заново? проверил у меня всё определяется ква версии 11,1сп1
Пробовал. Убрал свой таймер из sys_clk_timer в настройках bsp. Вроде пустой проект скомпилировался. Но пустые проекты никому не нужны, поэтому я написал следующее:
Код
#include "system.h"
#include "sys/alt_irq.h"
#include "altera_avalon_timer_regs.h"
volatile int timer_status = 0;
volatile int timer_timeout = 0;
static void handle_timer_interrupts(void* context)
{
volatile int* timer_status_ptr = (volatile int*) context;
*timer_status_ptr = IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE);
IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0);
timer_timeout = 1;
}
static void init_timer()
{
void* timer_status_ptr = (void*) &timer_status;
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE, 0x5);
IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0);
alt_ic_isr_register(TIMER_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_IRQ,
handle_timer_interrupts, timer_status_ptr, 0x0);
}
int main()
{
init_timer();
/* Тут мой код */
return 0;
}
Ошибка та же: undefined reference to 'alt_ic_isr_register'. Что я делаю не так?
Stewart Little
Apr 11 2012, 18:10
Цитата(_Desh_ @ Apr 11 2012, 14:46)

Ошибка та же: undefined reference to 'alt_ic_isr_register'. Что я делаю не так?
Проверьте вот это:
http://www.altera.com/support/kdb/solution...152011_982.htmlи до кучи вот это:
http://www.altera.com/support/kdb/solutions/spr375970.html
Stewart Little
Apr 12 2012, 15:15
Цитата(Stewart Little @ Apr 11 2012, 22:10)

Проверьте вот это: ...
Проверил в v11.1sp2.
Все работает, как положено. Рукопашной модификации sopcinfo не требуется.
Еще вопрос - в настройках процессора какое количество
shadow register sets указано?
Если задано значение 0 (ноль), то такой контроллер HAL'ом поддерживаться не будет (о чем Qsys честно и предупреждает).
Full41
Apr 19 2012, 11:50
Цитата(naliwator @ Feb 9 2012, 18:01)

Похоже вы давно не чистили папку с проектом.
Для генерации BSP вы используете файл CPU.sopcinfo,
а ваша система генерирует CPU_SOPC.sopcinfo.
Последний сгенерировал нормально.
Попробовал все пересоздать все равно появляются ошибки такого плана.
Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла
Full41
Apr 19 2012, 13:14
Цитата(Full41 @ Apr 19 2012, 14:50)

Разобрался сам. Хотя теперь возник другой вопрос. Например я создал проект ядра NIOS, сделал для него программу в Eclips, после чего мне оказалось необходимо добавить в тот же проект ядра NIOS дополнительные выводы или что то еще, мне что снова надо создавать проект в Eclips по новому или я могу обновить как то старый(Как я понимаю необходимо обновит BSP модель)?
Используете старый проект. Но нужно перегенрировать BSP. Для этого по BSP части проекта (не тот в котором у вас исходники) жмете правой кнопкой там выбираете NIOS II> Generate BSP
Full41
Apr 20 2012, 08:40
Цитата(Wic @ Apr 20 2012, 05:38)

Используете старый проект. Но нужно перегенрировать BSP. Для этого по BSP части проекта (не тот в котором у вас исходники) жмете правой кнопкой там выбираете NIOS II> Generate BSP
Спасибо))
Full41
May 14 2012, 18:20
Уважаемые коллеги, на сайте "Эфо" прочитал что проводятся курсы NIOS 2 на базе " кафедре Автоматики и Вычислительной Техники (СПбГПУ)", написано что те кто заканчивает эти курсы получает в электронном виде: лекции, описания лабораторных работ, результаты лабораторных работ.
Может кто проходил эти курсы поделятся материалами, если не жалко, было бы полезно.
Проблема с запуском проекта для NIOS из-под Eclipse. Как я понимаю (поправьте, если не так), надо иметь на руках файлы .sof и .elf. Оба файла имеются. Итак, включаю железку, шью .sof (Quartus Programmer), затем из-под eclipse выбираю Run As->Nios Hardware. Дальше оболочка меня спрашивает настройки, я их все указываю, но прошивка не загружается - все время выдает Download ELF file process failed. В консоли выводится что-то типа Verify failed at 0x10000 to 0x14FFFF или что-то в этом роде. По адресу 0x10000-0x130xxx (не помню точно) у меня в системе находится onchip_memory. К шине подключена правильно, Reset Vector и Exception Vector указывают на нее. Из периферии оставил только PIO, JTAG UART, Vectored Interrupt Controller.
На форуме Альтеры куча подобных вопросов, но конкретных ответов нет - все время советуют проверить тайминги и сигналы clk, reset. Но раз Quartus предупреждений или ошибок при компиляции не выдал, то ошибок времянки нет. Clk идет с PLL (80 МГц), reset - лог. 1 (пока так, для простоты). Подскажите, пожалуйста, что еще может быть не так?
naliwator
Jun 4 2012, 15:58
Цитата(_Desh_ @ Jun 4 2012, 19:49)

Проблема с запуском проекта для NIOS из-под Eclipse. Как я понимаю (поправьте, если не так), надо иметь на руках файлы .sof и .elf. Оба файла имеются. Итак, включаю железку, шью .sof (Quartus Programmer), затем из-под eclipse выбираю Run As->Nios Hardware. Дальше оболочка меня спрашивает настройки, я их все указываю, но прошивка не загружается - все время выдает Download ELF file process failed. В консоли выводится что-то типа Verify failed at 0x10000 to 0x14FFFF или что-то в этом роде. По адресу 0x10000-0x130xxx (не помню точно) у меня в системе находится onchip_memory. К шине подключена правильно, Reset Vector и Exception Vector указывают на нее. Из периферии оставил только PIO, JTAG UART, Vectored Interrupt Controller.
На форуме Альтеры куча подобных вопросов, но конкретных ответов нет - все время советуют проверить тайминги и сигналы clk, reset. Но раз Quartus предупреждений или ошибок при компиляции не выдал, то ошибок времянки нет. Clk идет с PLL (80 МГц), reset - лог. 1 (пока так, для простоты). Подскажите, пожалуйста, что еще может быть не так?
Не телепат, но подозреваю, что проблема в сборке BSP проекта. Скомпилированный elf файл не соответствует аппаратной части проекта, зашитого в чип. Попробуйте собрать его заново. Проверьте установки в редакторе BSP.
Цитата(naliwator @ Jun 4 2012, 19:58)

Не телепат, но подозреваю, что проблема в сборке BSP проекта. Скомпилированный elf файл не соответствует аппаратной части проекта, зашитого в чип. Попробуйте собрать его заново. Проверьте установки в редакторе BSP.
Тоже так думал, но сегодня в конце рабочего дня специально снес всю папку software, перекомпилировал аппаратную часть и заново сгенерировал BSP с программой - не помогло. Завтра с работы попробую залить исходники.
naliwator
Jun 4 2012, 17:52
А на какой версии работаете? На десятой попадал в тупиковую ситуацию: был глюк с генерированием system.h. Тогда помогало перманентное внесение изменений в SOPC и генерирование всей системы вцелом.
Stewart Little
Jun 4 2012, 18:29
Цитата(_Desh_ @ Jun 4 2012, 19:13)

Тоже так думал, но сегодня в конце рабочего дня специально снес всю папку software, перекомпилировал аппаратную часть и заново сгенерировал BSP с программой - не помогло. Завтра с работы попробую залить исходники.
Покажите Ваши настройки BSP.
Цитата(naliwator @ Jun 4 2012, 21:52)

А на какой версии работаете? На десятой попадал в тупиковую ситуацию: был глюк с генерированием system.h. Тогда помогало перманентное внесение изменений в SOPC и генерирование всей системы вцелом.
Цитата(Stewart Little @ Jun 4 2012, 22:29)

Покажите Ваши настройки BSP.
Версия 9.1. Пробовал понизить рабочую частоту до 64 МГц, перегенерировал систему, не помогло. Описание системы прилагается. Уточнил сообщение об ошибке:
Verify failed between address 0x1000 and 0x148B. Память onchip_memory_instr находится по адресу 0х1000-0x1FFF.
Убрал из программы обращение к JTAG UART, вроде что-то поменялось. Теперь ошибка другая:
CODE
Downloading 00001000 ( 0%)
Downloaded 1KB in 0.0s
Verifying 00001000 ( 0%)
Verified OK
Starting processor at address 0x00001020
/cygdrive/d/Altera/Quartus91/nios2eds/bin/nios2-download: line 595: 2152 Hangup
nios2-gdb-server --cable 'USB-Blaster [USB-0]' --device 1 --instance 0 --sidp N/A --id N/A --timestamp N/A
--accept-bad-sysid --go --tcpport none --write-pid
/cygdrive/d/Altera/Quartus91/User/Erofeev/simple/software/simple/nios2-download.pid
/cygdrive/d/Altera/Quartus91/User/simple/software/simple/simple.elf.srec
naliwator
Jun 5 2012, 07:46
--instance 0 --sidp N/A --id N/A --timestamp N/A
Попробуйте вставить в свою систему модуль идентификатора системы: Debug and Performance > System ID Peripheral.
Ещё вопрос: это ваша первая SOPC система?
Цитата(naliwator @ Jun 5 2012, 11:46)

--instance 0 --sidp N/A --id N/A --timestamp N/A
Попробуйте вставить в свою систему модуль идентификатора системы: Debug and Performance > System ID Peripheral.
Ещё вопрос: это ваша первая SOPC система?
При загрузке ELF файла я включил настройки
Ignore mismatched system ID,
Ignore mismatched timestamp ID.
До этого я только симулировал проекты в моделсиме, причем все работало. В железе - да, первая система.
Копейкин
Jun 5 2012, 08:26
Посмотрите в отчёте таймквеста, при компиляции - какая максимальная частота для вашей системы.
Может многовато применяемых 80 и 64 МГц ?
Цитата(Копейкин @ Jun 5 2012, 12:26)

Посмотрите в отчёте таймквеста, при компиляции - какая максимальная частота для вашей системы.
Может многовато применяемых 80 и 64 МГц ?
При заданных 80 МГц в отчете Fmax = 87 MHz, при заданных 64 МГц Fmax = 73 MHz.
Копейкин
Jun 5 2012, 09:31
Посмотрел Вашу систему, попробуйте пересобрать, для пробы, без контроллера прерываний VIC.
С ним не всегда всё ладно выходит...
PS
Добавлю ещё.
У Вас ведь CycloneII ?
для программы выделено ОЗУ 4Кбайт - это очень и очень мало, не было ошибки, что невозможно разместить программу и данные?
Обращение к JTAG UART или любому устройству вызовет подключение библиотеки, что разом "съест" всё и "ещё должен останешься"

.
Выделите 16-20 КБайт...
naliwator
Jun 5 2012, 09:36
Цитата(_Desh_ @ Jun 5 2012, 12:10)

В железе - да, первая система.
Может быть попробуете тогда с примеров проектов?
И соглашусь с
Копейкин.
В окне Nios II Elf Section Properties название процессора соответствует файлу .sopcinfo.

Тогда почему в окне Run Configurations > Target Connection написано
The expected CPU name does not match the selected target CPU name? И почему в поле Processors > Name пусто? В ПЛИС при этом прошит .sof файл с правильной системой.

Цитата(Копейкин @ Jun 5 2012, 13:31)

для программы выделено ОЗУ 4Кбайт - это очень и очень мало, не было ошибки, что невозможно разместить программу и данные?
Обращение к JTAG UART или любому устройству вызовет подключение библиотеки, что разом "съест" всё и "ещё должен останешься"

.
Выделите 16-20 КБайт...
Для той программы, которую я собираюсь прошить, и килобайта достаточно (специально сделал простейшую вещь, чтобы побыстрее). Никаких предупреждений или ошибок при компиляции Eclipse не выдавал, так что, думаю, дело не в этом.
Цитата(naliwator @ Jun 5 2012, 13:36)

Может быть попробуете тогда с примеров проектов?
Для примеров наверняка нужна отладочная плата? У меня ее нет и не будет. Если получится завтра какой-нибудь готовый проект запустить на доступной мне плате, то попробую.
Да, кстати. На той плате, с которой я упражняюсь, стоит EPCS с прошитым в ней другим проектом. Я пытаюсь на лету зашивать в ПЛИС свой .sof файл через JTAG, а затем и .elf, чтобы не трогать старую прошивку. Так ведь и нужно делать?
Stewart Little
Jun 5 2012, 14:07
Цитата(_Desh_ @ Jun 5 2012, 17:49)

Тогда почему в окне Run Configurations > Target Connection написано The expected CPU name does not match the selected target CPU name? И почему в поле Processors > Name пусто? В ПЛИС при этом прошит .sof файл с правильной системой.
1. В окне Hardware configuration жамкните кнопку Refresh Connection. Какое имя процессора отображается после этого?
2. Убедитесь, что в процессорном ядре используется jtag debug модуль.
3. Еще раз проверьте, соответствует ли Ваша программная часть аппаратной (т.е. BSP создан из sopcinfo именно того проекта, который загружен в кристалл).
Цитата(Stewart Little @ Jun 5 2012, 18:07)

1. В окне Hardware configuration жамкните кнопку Refresh Connection. Какое имя процессора отображается после этого?
2. Убедитесь, что в процессорном ядре используется jtag debug модуль.
3. Еще раз проверьте, соответствует ли Ваша программная часть аппаратной (т.е. BSP создан из sopcinfo именно того проекта, который загружен в кристалл).
1. Нажимал много раз, остается так же, как и на скриншоте, т.е. пустота.
2. JTAG Debug используется, подключен одновременно к data_master и instruction_master.
3. Много раз уже проверял, перекомпилировал, перегенерировал, создавал проект заново...
Stewart Little
Jun 5 2012, 15:57
Цитата(_Desh_ @ Jun 5 2012, 19:05)

2. JTAG Debug используется, подключен одновременно к data_master и instruction_master.
А Вы хардверную часть делаете в SOPC'е или в Qsys'е?
Цитата(Stewart Little @ Jun 5 2012, 19:57)

А Вы хардверную часть делаете в SOPC'е или в Qsys'е?
SOPC. Использую Altera Complete Design Suite 9.1.
Попробовал делать то же самое через Nios II IDE. Во время компиляции программы он кладет файл onchip_memory.hex в папку с проектом аппаратной части. И вот, во время перекомпиляции аппаратной части Quartus выводит предупреждение: Warning: Width of data items in "onchip_memory.hex" is greater than the memory width. Wrapping data items to subsequent addresses. Какая настройка за это отвечает, и как избавиться от этой ошибки? Может быть поэтому при прошивке и возникает ошибка Verify failed between address 0x1000 and 0x148B?
Копейкин
Jun 6 2012, 08:36
Такая ошибка возникает при несовпадении размеров ОЗУ в SOPC и скомпилированного файла программы, который должен там разместиться.
Убедитесь, что все настройки линкера, все сегменты памяти указывают на ваше ОЗУ (onchip_memory).
Также посмотрите карту памяти и размер памяти - всё ли соответствует истине?
Stewart Little
Jun 6 2012, 10:38
Цитата(_Desh_ @ Jun 6 2012, 10:51)

И вот, во время перекомпиляции аппаратной части Quartus выводит предупреждение: Warning: Width of data items in "onchip_memory.hex" is greater than the memory width. Wrapping data items to subsequent addresses. Какая настройка за это отвечает, и как избавиться от этой ошибки?
Это не ошибка, а предупреждение. На наго вполне можно забить.
Но если очень сильно раздражает, то поиграйте настройками в Assignment - Settings - Compilation Process Settings - More Settings - Reading or Writing Hexadecimal (.hex) File in byte addresable mode
Для того, чтобы сделать эту настройку глобальной, откройте в квартусе редактор hex-файла, и в меню Tools - Options - Memory Editor установите или сбросьте соответствующую галку.
Но с Вашей проблемой все вышеизложенное напрямую не связано.
У Вас, скорее всего, или где-то "ошибка на внимание", или проблема в железе/драйверах.
naliwator
Jun 6 2012, 11:27
Цитата(_Desh_ @ Jun 5 2012, 17:49)

Для примеров наверняка нужна отладочная плата? У меня ее нет и не будет. Если получится завтра какой-нибудь готовый проект запустить на доступной мне плате, то попробую.
Для простейшего проекта многое и не требуется: самый простейший проект - это тактовый вход и 5кб памяти. Это чтобы попробовать. Какой у вас чип? На какой пин подаётся тактовый сигнал?
Цитата(_Desh_ @ Jun 5 2012, 17:49)

Да, кстати. На той плате, с которой я упражняюсь, стоит EPCS с прошитым в ней другим проектом. Я пытаюсь на лету зашивать в ПЛИС свой .sof файл через JTAG, а затем и .elf, чтобы не трогать старую прошивку. Так ведь и нужно делать?
Совершенно верно.
В общем, решил я попробовать сделать все то же самое, только в Nios II IDE. При попытке прошиться из-под него выдавались такие же ошибки... пока я случайно (после чтения темы
http://electronix.ru/forum/index.php?showtopic=103410) не заметил, что после компиляции программы IDE (и, видимо, Eclipse тоже) записывает в папку с аппаратным проектом файл onchip_memory.hex. Когда я после очередной неудачной попытки лез в Quartus, что-нибудь менял и перекомпилировал, он подцеплял этот файл, и генерировал .sof уже с прошивкой Nios. Получается, что после конфигурации ПЛИС через Quartus Programmer в устройство уже была залита рабочая программа! А я, следуя инструкциям Альтеры, пытался прошить .elf в уже работающее устройство. Может, дело в этом? В любом случае, если следовать совету
Stewart Little из упомянутой темы и загружать проект только через Quartus Programmer, то все работает.
Уважаемые
naliwator,
Stewart Little,
Копейкин, большое спасибо за советы!
Правда, теперь непонятно, как дебажить программу без Eclipse или IDE.
Stewart Little
Jun 6 2012, 16:40
Цитата(_Desh_ @ Jun 6 2012, 19:25)

А я, следуя инструкциям Альтеры, пытался прошить .elf в уже работающее устройство. Может, дело в этом?
Нет, не в этом.
Elf должен загружаться в систему с ниосом независимо от того, есть там в памяти что-нибудь, или нету.
Eclipse неправильно считывает параметры зашитого в ПЛИС проекта. Для данной платы есть готовый, абсолютно точно рабочий проект. Я точно знаю, что в этом проекте есть процессор Nios, JTAG UART, system ID. Во-первых, не считывается название процессора. Во-вторых, неверно определяется тип ядра (должно быть, как я понял, 1, 2 или 3, а показывает -1). В-третьих, не находит JTAG UART. Последнее - всегда, вне зависимости от проекта, зашитого в плату, пишет, что реальный system ID - 0xffffffff, хотя базовый адрес компонента System ID Peripheral, базовый адрес памяти определяет верно. Если бы такое наблюдалось только с моим проектом, я бы согласился, что дело или в аппаратной части, или в моих кривых руках. Но с чужим проектом все проще - включается питание, проект загружается из EPCS и плата работает. Моего вмешательства в данном случае - один щелчок тумблером и запуск Eclipse. Вывод - проблема именно в Eclipse, возможно в драйвере USB Blaster. Как считаете, поможет ли переустановка или переход на более новую версию?
Цитата(_Desh_ @ Jun 8 2012, 12:41)

Eclipse неправильно считывает параметры зашитого в ПЛИС проекта. Для данной платы есть готовый, абсолютно точно рабочий проект. Я точно знаю, что в этом проекте есть процессор Nios, JTAG UART, system ID. Во-первых, не считывается название процессора. Во-вторых, неверно определяется тип ядра (должно быть, как я понял, 1, 2 или 3, а показывает -1). В-третьих, не находит JTAG UART. Последнее - всегда, вне зависимости от проекта, зашитого в плату, пишет, что реальный system ID - 0xffffffff, хотя базовый адрес компонента System ID Peripheral, базовый адрес памяти определяет верно. Если бы такое наблюдалось только с моим проектом, я бы согласился, что дело или в аппаратной части, или в моих кривых руках. Но с чужим проектом все проще - включается питание, проект загружается из EPCS и плата работает. Моего вмешательства в данном случае - один щелчок тумблером и запуск Eclipse. Вывод - проблема именно в Eclipse, возможно в драйвере USB Blaster. Как считаете, поможет ли переустановка или переход на более новую версию?
Поставьте последний квартус + еклипс, если не поможет то скорей всего, дело в чьих то руках
Копейкин
Jun 8 2012, 07:44
Такие фокусы, как невозможность прочесть system ID и timestamp, очень часто случается, когда не
работает или не соответствует ожидаемым параметрам тактовый генератор.
Я, запаяв не рабочий генератор, тоже как-то долго пытался дебажить проект, и тоже не верифицировалась залитая
программа, не совпадал сисид и время создания...
1) Проверьте, на те ли выводы подаётся тактовая частота и работает ли генератор?
2) Проверьте назначение пина для тактовой частоты в проекте.
3) Есть возможность проверить другую плату/рабочий проект?
PS
А версия ква 9.1 довольно таки безглючная...
Мне сюрпризов почти не преподносила.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.