RHnd 0 6 октября, 2007 Опубликовано 6 октября, 2007 · Жалоба Я сейчас посмотрел ваши даташиты со структурами - это pdf от 2003 года. В последних версиях литературы (7.1) в пункте software programing model стали писать уже о макросах, типа того, что я привел выше. PS: Сейчас глянул наискосок версию 7.2 - самую последнюю. Такое ощущение, что они из документации вообще описание API убрали, типа смотрите в таких-то h-файлах. Или мне показалось? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 9 октября, 2007 Опубликовано 9 октября, 2007 · Жалоба таймер в ISS не работает, проверено... PIO работает... по крайне мере если изменять значения PIO потом при помощи printf выводить в консоль, то выводит то, что надо... а таймеру в документации еаписано ясно что нужно тактирование clk... прям в самом начале, если нужна какая-то задержка то можно воспользоваться "usleep()" в #include "unistd.h"... p.s. вообще писать софтинку под ниос просто как оказалось... нужно терпение только... ну как обычно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Voloshchenko 0 9 октября, 2007 Опубликовано 9 октября, 2007 · Жалоба таймер в ISS не работает, проверено...У меня пока тот же результат, но есть утверждения, что должен работать (вот два): 1. http://forum.niosforum.com/forum/index.php?showtopic=322 The iss supports simulation of the following peripherals: . memory (ram/rom) . avalon timer . avalon jtag uart . avalon uart 2. http://forum.niosforum.com/forum/index.php?showtopic=5418 "If any unsupported components are present in the system, the ISS displays a warning message at the start of the run or debug session. The ISS ignores writes to unsupported components during simulation. Reading from an unsupported component during simulation returns zero. suported component list: -All Nios II processor cores: Nios II/f, Nios II/s, Nios II/e -Interval timer core -JTAG UART core -UART core -On-chip memory (RAM/ROM) -SDRAM controller core -IDT71V416 SRAM (1 MB SRAM mounted on Nios development board) -EPCS serial flash controller core, with limitations." And here is aditonal limitations of ISS: Simulations are functional only, and not cycle-accurate. The ISS does not model Nios II instruction and data caches, and will not find bugs involving cache initialization, flushing, or bypassing. The ISS does not support reading or writing tightly coupled memories connected to the Nios II processor. The ISS does not support custom instructions. 3. А это взято из Nios II IDE Help Instruction Set Simulator (ISS) The Nios II instruction set simulator (ISS) allows you to execute and debug Nios II programs in simulation on a host PC. The ISS simulates software executing on a Nios II processor core connected to a limited set of peripherals. The simulation is at the functional level, and all operations complete in one cycle. It is not a cycle-accurate simulation, and therefore performance benchmarking on the ISS gives optimistic results. On a modern Windows PC, the ISS runs at about 300K instructions per second when simulating code on the fast example design provided in the Nios II Embedded Design Suite. The ISS can produce an execution trace. The trace output appears in the Console view, and you can optionally redirect it to a file. It is common to output trace data to a file, because trace tends to produce a large amount of information. ISS-supported SOPC Builder components: - All Nios II processor cores: Nios II/f, Nios II/s, Nios II/e - Interval timer core - JTAG UART core - UART core - On-chip memory (RAM/ROM) - SDRAM controller core - IDT71V416 SRAM (1 MB SRAM mounted on Nios development board) - EPCS serial flash controller core, with limitations. If any unsupported components are present in the system, the ISS displays a warning message at the start of the run or debug session. The ISS ignores writes to unsupported components during simulation. Reading from an unsupported component during simulation returns zero. SOPC Builder system requirements: The Nios II ISS simulates a Nios II processor system described by an SOPC Builder system file (.ptf). The Nios II ISS makes the following assumptions about the SOPC Builder system: - SOPC Builder successfully generated the .ptf file. - All memories with initialized content are initialized from one .elf file. - The system contains exactly one Nios II CPU. The ISS does not support multiprocessor systems. - The system has one clock domain. - The system has one address map. (This is true for all Nios II systems created by SOPC Builder.) ISS limitations: - Simulations are functional only, and not cycle-accurate. - The ISS does not model Nios II instruction and data caches, and will not find bugs involving cache initialization, flushing, or bypassing. - The ISS does not support reading or writing tightly coupled memories connected to the Nios II processor. - The ISS does not support custom instructions. - The ISS models the Nios II ienable register as a complete 32-bit register. In hardware (both on a target board and in HDL simulation), all bits associated with unused interrupt inputs are always zero. - The EPCS Serial Flash Controller core only supports boot-from-flash behavior. If the SOPC Builder system contains an EPCS Serial Flash Controller core, the simulation does not model the full behavior of the EPCS device. The ISS only models the first 1 Kbytes of the controller's register map as a block of ROM. In the case that the processor resets to the EPCS controller address (the typical boot-from-flash scenario), the simulation relies on the fact that RAMs are pre-initialized. Therefore, the controller's boot-loader does not need to copy code from EPCS memory to RAM. Instead, the controller simply jumps directly to RAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 10 октября, 2007 Опубликовано 10 октября, 2007 (изменено) · Жалоба техническая документация нас спасёт... The Timeout Period setting determines the initial value of the periodl and periodh registers. When the Writeable period setting is enabled, a processor can change the value of the period by writing periodl and periodh. When Writeable period (see below) is off, the period is fixed and cannot be updated at runtime. сейчас проверю это утверждение... у меня такой код получился volatile np_timer *timer = TIMER_BASE; void InitTimer1(void) { timer->np_timerperiodl = 0xffff; timer->np_timerperiodh = 0xffff; timer->np_timercontrol = np_timercontrol_start_mask + np_timercontrol_cont_mask; } void delay(void) { while(timer->np_timerstatus & np_timerstatus_to_mask); timer->np_timerstatus = 0; } int main(void){ while(1) { delay(); printf(" ok "); } return 0; } как я понимаю при изменении timer->np_timerperiodl и timer->np_timerperiodh вывод "ок" должен быть с различной скоростью... может быть в железе так и есть.. но при симуляции т.е. ISS ничего подобного.... в сопс билдере я изменил период с мС до С.... Изменено 10 октября, 2007 пользователем Mozart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RHnd 0 10 октября, 2007 Опубликовано 10 октября, 2007 · Жалоба Это вы так цитату вставили или действительно забыли Init перед while(1) запустить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 11 октября, 2007 Опубликовано 11 октября, 2007 · Жалоба это я действительно забыл инит вставить... вставил всё равно не пашет... зато появился варнинг... Warning : SOPC Builder system component pio_led is not supported by the simulato r. Simulation may be incorrect if your software attempts to access it но это ничего страшного... мдаа... :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manfred 0 15 октября, 2007 Опубликовано 15 октября, 2007 (изменено) · Жалоба Можно как-то получить программу на ассеблере? - во что компилятор преврящает С код Как ускоряется процесс записи в переферийные регистры (использую IOWR()) - сейчас интервал составляет аж 40 тактов из-за вызовов функций, на самом быстром Ниосе - переферийное устройство Slave Avalon Изменено 15 октября, 2007 пользователем Manfred Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 15 октября, 2007 Опубликовано 15 октября, 2007 (изменено) · Жалоба у меня вообще железки нету... я чувствую себя ущербным каким-то... Как ускоряется процесс записи в переферийные регистры (использую IOWR()) - сейчас интервал составляет аж 40 тактов из-за вызовов функций, на самом быстром Ниосе - переферийное устройство Slave Avalon я уже на такие вещи натыкаюсь и не раз... железки нету чтобы проверить, но если это повально у всех... то НИОС мягко говоря не оч хорошо... меня nios2 ide добивает потихоньку... то симуляция идёт нормально то тормозит со страшной силой... то debug as nios ISS запускается, то посылает на три буковы... чаще посылает... исходничек int main(void){ InitPioLed(); InitTimer1(); InitTimerM(); // printf("timer->np_timerperiodl = %d \n", timer->np_timerperiodl); // printf("timer->np_timerperiodh = %d \n", timer->np_timerperiodh); // printf("timer->np_timercontrol = %d \n", timer->np_timercontrol); //usleep(10000); unsigned char DataInPort = 101; DataInPort = IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE); printf("%d \n", DataInPort); //usleep(10000); IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0x3); printf("%d \n", IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE)); //usleep(10000); while(1) { //delay(); // printf(" timer->np_timersnapl = %d ", timer->np_timersnapl); // printf(" timer->np_timersnaph = %d ", timer->np_timersnaph); // printf(" timer->np_timerstatus = %d \n", timer->np_timerstatus); // while(timer->np_timerstatus & np_timerstatus_to_mask); //led_pio->np_piodata = DataInPort; //delay(); DelayM(); printf(" ok \n"); DataInPort = IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE); printf("%d \n", DataInPort); usleep(10000); printf("%d \n", IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE)); usleep(10000); } return 0; } int main(void){ 0x00000310 <main>: addi sp,sp,-12 0x00000314 <main+4>: stw ra,8(sp) 0x00000318 <main+8>: stw fp,4(sp) 0x0000031c <main+12>: mov fp,sp InitPioLed(); 0x00000320 <main+16>: call 0x2e4 <InitPioLed> InitTimer1(); 0x00000324 <main+20>: call 0x200 <InitTimer1> InitTimerM(); 0x00000328 <main+24>: call 0x238 <InitTimerM> // printf("timer->np_timerperiodl = %d \n", timer->np_timerperiodl); // printf("timer->np_timerperiodh = %d \n", timer->np_timerperiodh); // printf("timer->np_timercontrol = %d \n", timer->np_timercontrol); usleep(10000); 0x0000032c <main+28>: movi r4,10000 0x00000330 <main+32>: call 0xd60 <usleep> unsigned char DataInPort = 101; 0x00000334 <main+36>: movi r2,101 0x00000338 <main+40>: stb r2,0(fp) DataInPort = IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE); 0x0000033c <main+44>: movui r2,32800 0x00000340 <main+48>: ldwio r2,0(r2) 0x00000344 <main+52>: stb r2,0(fp) printf("%d \n", DataInPort); 0x00000348 <main+56>: ldbu r5,0(fp) 0x0000034c <main+60>: movhi r4,0 0x00000350 <main+64>: addi r4,r4,10136 0x00000354 <main+68>: call 0x3dc <printf> usleep(10000); 0x00000358 <main+72>: movi r4,10000 0x0000035c <main+76>: call 0xd60 <usleep> IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0x3); 0x00000360 <main+80>: movui r3,32800 0x00000364 <main+84>: movi r2,3 0x00000368 <main+88>: stwio r2,0(r3) printf("%d \n", IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE)); 0x0000036c <main+92>: movui r2,32800 0x00000370 <main+96>: ldwio r5,0(r2) 0x00000374 <main+100>: movhi r4,0 0x00000378 <main+104>: addi r4,r4,10136 0x0000037c <main+108>: call 0x3dc <printf> usleep(10000); 0x00000380 <main+112>: movi r4,10000 0x00000384 <main+116>: call 0xd60 <usleep> while(1) { //delay(); // printf(" timer->np_timersnapl = %d ", timer->np_timersnapl); // printf(" timer->np_timersnaph = %d ", timer->np_timersnaph); // printf(" timer->np_timerstatus = %d \n", timer->np_timerstatus); // while(timer->np_timerstatus & np_timerstatus_to_mask); //led_pio->np_piodata = DataInPort; //delay(); DelayM(); 0x00000388 <main+120>: call 0x274 <DelayM> printf(" ok \n"); 0x0000038c <main+124>: movhi r4,0 0x00000390 <main+128>: addi r4,r4,10144 0x00000394 <main+132>: call 0x3dc <printf> DataInPort = IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE); 0x00000398 <main+136>: movui r2,32800 0x0000039c <main+140>: ldwio r2,0(r2) 0x000003a0 <main+144>: stb r2,0(fp) printf("%d \n", DataInPort); 0x000003a4 <main+148>: ldbu r5,0(fp) 0x000003a8 <main+152>: movhi r4,0 0x000003ac <main+156>: addi r4,r4,10136 0x000003b0 <main+160>: call 0x3dc <printf> usleep(10000); 0x000003b4 <main+164>: movi r4,10000 0x000003b8 <main+168>: call 0xd60 <usleep> printf("%d \n", IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE)); 0x000003bc <main+172>: movui r2,32800 0x000003c0 <main+176>: ldwio r5,0(r2) 0x000003c4 <main+180>: movhi r4,0 0x000003c8 <main+184>: addi r4,r4,10136 0x000003cc <main+188>: call 0x3dc <printf> usleep(10000); 0x000003d0 <main+192>: movi r4,10000 0x000003d4 <main+196>: call 0xd60 <usleep> 0x000003d8 <main+200>: br 0x388 <main+120> вот дизасм... Изменено 15 октября, 2007 пользователем Mozart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manfred 0 15 октября, 2007 Опубликовано 15 октября, 2007 (изменено) · Жалоба Где дизасм можно найти?) Я задержки между выставлениями данных смотрю в модел симе Изменено 15 октября, 2007 пользователем Manfred Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 15 октября, 2007 Опубликовано 15 октября, 2007 (изменено) · Жалоба Где дизасм можно найти?) Я задержки между выставлениями данных смотрю в модел симе открываешь nios2ide потом жмёшь кнопочку debug, выбираешь nios II ISS, чисто теоретически у тебя всё проходит хорошо, тебя перекидывают на debug и справа там есть disasm.... если вдруг нету, то window->show view это я так делал, может быть как-то по другому мона... хз... Изменено 15 октября, 2007 пользователем Mozart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manfred 0 16 октября, 2007 Опубликовано 16 октября, 2007 · Жалоба открываешь nios2ide потом жмёшь кнопочку debug, выбираешь nios II ISS, чисто теоретически у тебя всё проходит хорошо, тебя перекидывают на debug и справа там есть disasm.... если вдруг нету, то window->show view это я так делал, может быть как-то по другому мона... хз... Спасибо - я давно в дебаг не заглядывал сразу моделирование запускал) - чтоб он быстрее работал надо оптимизацию ставить тогда данные из массива во внешнее устройство записываются за 3-5 тактов Не видел ли где файл асемблеровского листинга? Тот листинг, что в дебаге у меня почему-то не полный, не до конца программы Не скажет ли кто, что надо сделать, чтобы можно было симулировать программу с самостоятельно сделаным устройством на шину авалон в симуляторе ISS? в Модел Симе работа устройства симулируется правильно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Voloshchenko 0 30 октября, 2007 Опубликовано 30 октября, 2007 · Жалоба таймер в ISS не работает, проверено... У меня пока тот же результат, но есть утверждения, что должен работать (вот два): Все-таки таймер симулируется в ISS. Ниже текст программы с выводом на Console состояния изменяющегося таймера. Вот первые строки, что видны на Console: Hello from Nios II! 00000000, 00000646, 00000dad, 00001582, 00001dc4, 00002644, 00002eb8, 000 03784, 0000401e, 0000487a, 00005168, 00005a02, 00006274, 00006b14, 000073 bc, 00007cb6, 000085c4, 00008eba, 00009806, 0000a0ca, 0000a9b2, 0000b2bc, А это программа: #include "sys/alt_stdio.h" //----------------------------- #include "alt_types.h" #include "system.h" //----------------------------- #include "altera_avalon_timer_regs.h" //all for timer //----------------------------- int alt_timestamp_start(void) { void* base = TIMER_BASE; { IOWR_ALTERA_AVALON_TIMER_CONTROL (base,ALTERA_AVALON_TIMER_CONTROL_STOP_MSK); IOWR_ALTERA_AVALON_TIMER_PERIODL (base,0xFFFF); IOWR_ALTERA_AVALON_TIMER_PERIODH (base,0xFFFF); IOWR_ALTERA_AVALON_TIMER_CONTROL (base,ALTERA_AVALON_TIMER_CONTROL_START_MSK); } return 0; } alt_u32 alt_timestamp(void) { alt_u32 lower; alt_u32 upper; void* base = TIMER_BASE; { IOWR_ALTERA_AVALON_TIMER_SNAPL (base, 0); lower = IORD_ALTERA_AVALON_TIMER_SNAPL(base); upper = IORD_ALTERA_AVALON_TIMER_SNAPH(base); return (0xFFFFFFFF - ((upper << 16) | lower)); } } //----------------------------- int main() {alt_u32 a; a=alt_timestamp_start(); alt_putstr("Hello from Nios II!\n"); printf("%08x, ", a); while (1){a=alt_timestamp(); printf("%08x, ", a);}; return 0; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mozart 0 7 ноября, 2007 Опубликовано 7 ноября, 2007 (изменено) · Жалоба вот я сейчас читаю документацию на этот таймер и там написано The TO (timeout) bit is set to 1 when the internal counter reaches zero. Once set by a timeout event, the TO bit stays set until explicitly cleared by a master peripheral. Write zero to the status register to clear the TO bit. вот мой код... #include "C:\altera\71\quartus\sopc_builder\components\altera_avalon_pio\sdk\pio_struct.h" #include "C:\altera\71\quartus\sopc_builder\components\altera_avalon_timer\sdk\timer_struct.h" void InitTimer0(void) { na_timer0->np_timercontrol = np_timercontrol_stop_mask; na_timer0->np_timerperiodl = 0x0000; na_timer0->np_timerperiodh = 0x01F4; na_timer0->np_timercontrol = np_timercontrol_cont_mask|np_timercontrol_start_mask; } int main() { //if (alt_avalon_sysid_test()) { InitTimer0(); InitPio(); unsigned char a = 0x01; while(1) { //CountTimer0(); while (!(na_timer0->np_timerstatus & (1 << 0))); na_timer0->np_timerstatus = 0; na_pio->np_piodata = a++; } } } если честно мне только не нравися прописывать такие длинные пути.... как от этого уйти? эмулировал всё на доске... ещё не получается запускать Debug ISS он раз через раз запускается, нашёл где-то про индексирование, но после индексации тоже не всегда запускается.... надо где-нить что-нить прописывать? Изменено 7 ноября, 2007 пользователем Mozart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 8 ноября, 2007 Опубликовано 8 ноября, 2007 · Жалоба впечатление такое, что никто и не читает Nios II Software Developer’s Handbook тут http://www.altera.com/literature/hb/nios2/n2sw_nii5v2.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexanderL 0 20 ноября, 2007 Опубликовано 20 ноября, 2007 · Жалоба Здравствуйте! Подскажите пожалуйста как отладить обработчик прерывания в NIOS IDE? Отладка программы ведется на реальном железе (т.е. hardware debug mode), при запуске программы без IDE (т.е. старт после сброса) программа корректно выполняет обработчик прерывания (загораются светодиодики). Если начинать отлаживать по шагам, при возникновении прерывания (прерывание выставляется по записи в регистр) дебагер не входит в обработчик, а просто продолжает выполнять программу далее (причем в этом случае некоторые значения регистров устройства вычитываются неправильно), и заветные светодиодики не загораются. Помогите плиз разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться