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

 
 
> NIOSII - Странный глюк, тестирую модуль для SOPC и не понимаю :(
RHnd
сообщение Jul 13 2007, 14:36
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Здравствуйте! Наконец-то, после долгого чтения мануалов я написал свой модуль для SOPC. Написал небольшую программку для NIOSII с целью протестировать модуль и столкнулся с очень странным для меня глюком.

Сначала о модуле:
Два порта, мастер и слейв. У слейва три регистра: CNTRL, STATUS и ADR. CNTRL: 0-ой бит – go. NIOSII выставляет этот бит, модуль начинает работать, на следующий такт бит автоматически сбрасываетя. STATUS: 2-ой бит – error, этот бит выставляется, если произошла ошибка. 1-ый бит – busy, выставлен пока модуль работает. 0-ой бит – done, выставлется когда работа модуля закончена. ADR – в этот регистр NIOSII записывает адрес. Работает модуль (по моей задумке, по крайней мере) так: выставляется бит go, логика модуля по этому биту считывает данные извне (свитчи на плате) и передает их мастер-порту. Мастерпорт, получив эти данные, записывает их по адресу из регистра ADR слейва, потом читает данные оттуда же. Если данные совпадают, то работа модуля заканчивается, если не совпадают, то выставляется бит error.

Код программы для NIOSII:
Код
#include <stdlib.h>
#include "alt_types.h"
#include <stdio.h>
#include <unistd.h>
#include "system.h"
#include "sys/alt_irq.h"
#include "altera_avalon_pio_regs.h"
#include "TestM_regs.h"

int ButFlag=0;

static void handle_button_interrupts(void* context, alt_u32 id)
{
  *((alt_u8*)context)=1;
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUT_BASE, 0);
}

static void init_button_pio()
{
  IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUT_BASE, 0x1);
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUT_BASE, 0x0);
  alt_irq_register( BUT_IRQ, (void*) &ButFlag, handle_button_interrupts );
}

int main()
{
  alt_u32 led=0xAAAA;
  init_button_pio();

  while(1)
  {
    if (ButFlag){
      IOWR_TESTM_ADR(TESTM_0_BASE,(int)&led);
      IOWR_TESTM_CTRL(TESTM_0_BASE,0x1);      //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      while (IORD_TESTM_STATUS(TESTM_0_BASE) & 0x1);
      IOWR_ALTERA_AVALON_PIO_DATA(LEDR_BASE,led);
      ButFlag=0;
    }
  }
  return 0;
}


Суть глюка: если прогу запустить как Run As, то LEDR (лампочки на плате) выводят 0xAAAA, а не то, что выставлено свичами. При этом бит ошибки не выставляется. Если запустить как Debug as NIOSII Hardware, то начинаются странности. Если на любой строчке до помеченной восклицательными знаками включительно сделать step (F5 или F6), то все прекрасно работает, выводится именно то, что на свичах. Если же с самого начала дебагинга сделать resume (F8) или же поставить брейкпоинт за помеченной строчкой, то прога ведет себя как при Run As. В чем суть глюка я понять не могу решительно. Адрес в ADR пишется, бит done выставляется, error – нет. Грешил на SDRAM, но проект делал на основе альтеровского примера ниоса для этой самой платы (Starter kit - cyclon 2). Попробовал снизить частоту со 100 до 50 – не помогло. На всякий случай прикладываю файлы головного модуля, модуля pll и reset.
Подскажите, в чем может быть дело и где вообще искать решение?

PS: Я еще только начинаю. Если кому-то вдруг будет не лень просмотреть мои верилоговские файлы и указать всякие ошибки перехода от C к Verilog? поправить стиль и т.п., то я буду очень благодарен!!!

Прикладываю файлы:
TESTM.v, TESTM_L.v, TESTM_M.v, TESTM_S.v - верилоговские файлы, описывающие сам модль.
TestM_regs.h -файл с макросами для работы с модулем.
sdram_pll.v и reset_delay.v - соответственно названию.
NT.v - головной модуль проекта.

Кстати, пытался добавить квартовский архив проекта, но "не имеете прав на добавление файла с разрешением" qar. Почему?
Прикрепленные файлы
Прикрепленный файл  TestM.v ( 1.54 килобайт ) Кол-во скачиваний: 58
Прикрепленный файл  TestM_L.v ( 759 байт ) Кол-во скачиваний: 48
Прикрепленный файл  TestM_M.v ( 3.06 килобайт ) Кол-во скачиваний: 71
Прикрепленный файл  TestM_S.v ( 2.27 килобайт ) Кол-во скачиваний: 59
Прикрепленный файл  NT.v ( 6.22 килобайт ) Кол-во скачиваний: 191
Прикрепленный файл  Reset_Delay.v ( 1.09 килобайт ) Кол-во скачиваний: 59
Прикрепленный файл  SDRAM_PLL.v ( 14.88 килобайт ) Кол-во скачиваний: 87
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- RHnd   NIOSII - Странный глюк   Jul 13 2007, 14:36
- - id_gene   Ну во-первых, вы не приложили модуль syst. Во-вто...   Jul 13 2007, 17:02
|- - RHnd   Цитата(id_gene @ Jul 13 2007, 20:20) Ну в...   Jul 13 2007, 17:24
|- - id_gene   Цитата(RHnd @ Jul 13 2007, 21:24) Можете ...   Jul 13 2007, 18:04
|- - RHnd   Про volatile примерно понял. Вообще, по симптомавм...   Jul 13 2007, 18:29
|- - RHnd   Цитата(RHnd @ Jul 13 2007, 22:29) Пошел с...   Jul 13 2007, 20:10
|- - id_gene   Цитата(RHnd @ Jul 14 2007, 00:10) Помню, ...   Jul 14 2007, 07:30
|- - RHnd   Цитата(id_gene @ Jul 14 2007, 11:30) Есть...   Jul 14 2007, 17:21
|- - RHnd   Итак, дело оказалось в data cache. Сначала попробо...   Jul 16 2007, 15:45
- - vetal   что-то мне не совсем понятно. 1.Для задач общения ...   Jul 16 2007, 16:17
|- - RHnd   Цитата(vetal @ Jul 16 2007, 20:17) 1.Для ...   Jul 16 2007, 16:29
|- - vetal   Цитата(RHnd @ Jul 16 2007, 20:29) Т.е. мн...   Jul 16 2007, 16:51
|- - RHnd   Спасибо, завтра попробую заменить макросы. Надеюсь...   Jul 16 2007, 16:59
- - vetal   Практически ничем, она подставляет в старший бит а...   Jul 16 2007, 17:15
|- - RHnd   Цитата(vetal @ Jul 16 2007, 21:15) Практи...   Jul 16 2007, 17:26
- - vetal   Для чтения используйте макрос IORD_32DIRECT, для ч...   Jul 16 2007, 17:31
|- - RHnd   Цитата(vetal @ Jul 16 2007, 21:31) Для чт...   Jul 16 2007, 17:39
- - vetal   Расположить там, где это вам нужно. alt_u32 i; i= ...   Jul 16 2007, 18:03
|- - RHnd   Может таки проще будет uncached_malloc или remap_u...   Jul 16 2007, 18:18
- - vetal   По моему с макросами быстрее, т.к. нет лишней опер...   Jul 16 2007, 18:23
|- - RHnd   Не, в документации-то я посмотрел. Я осмыслить пыт...   Jul 16 2007, 18:44
- - vetal   скорее всего так и есть. сейчас пока времени нет п...   Jul 16 2007, 19:45
- - RHnd   Итак, повозился сегодня с железкой - разобрался с ...   Jul 17 2007, 15:41


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 04:35
Рейтинг@Mail.ru


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