Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Nios II IDE
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
diwil
Уважаемые, подскажите пожалуйста,

У меня есть установленный ква 9 и все что с ним бесплатное с сайта альтеры.

Я генерю процессор в котором:
on-chip memory 16k
nios II/s cpu
pio_0 - input 32pin
pio_1 - input, sync IRQ, 1pin
poi_2 - output, 8 pin

Далее, запускаю ниос ИДЕ, описываю пустой проект и один файл в нем - main.c
Этот файл содержит следующий код:

#include <stdlib.h>
volatile long long a,b,c;

int main()
{
a = 100;
b = 0xfff;
c = a*b >> 31;
return 0;
}

в каждой строчке ставлю по бряку и запускаю в симуляторе инструкций.

Зараза, не останавливается...

За сим вопросы:
1. Что я делаю не так здесь?
2. Можно ли в симуляторе посчитать количество тактов на выполнение куска кода? как?

Далее - мне нужно всего лишь вот что от проца:
1. По нарастающему фронту на pio_1 прочитать что на pio_0.
2. Обработать это и данные и выдать на pio_3.

И еще - я вижу, что после компиляции моей проги, инициализация занимает около 8К кода. нельзя ли эту цифру сильно уменьшить путем исключения избыточной инициализации?
Ведь нужно только обнулить .bss и проинициализировать .data
Если да, то как?

Заранее благодарен.
Stewart Little
Цитата(diwil @ Nov 3 2009, 17:02) *
Далее - мне нужно всего лишь вот что от проца:
1. По нарастающему фронту на pio_1 прочитать что на pio_0.

Мне кажется, что решать эту задачу через два PIO не совсем корректно. Вход в обработчик прерывания PIO может занимать до 105 тактов (это в лучшем случае), Вы уверены, что за это время данные не изменятся?
Я бы сделал свой собственный модуль, который защелкивает данные по фронту, и генерит запрос прерывания. А в обработчике процессор считывает уже защелкнутые данные.

Цитата(diwil @ Nov 3 2009, 17:02) *
И еще - я вижу, что после компиляции моей проги, инициализация занимает около 8К кода. нельзя ли эту цифру сильно уменьшить путем исключения избыточной инициализации?
Ведь нужно только обнулить .bss и проинициализировать .data
Если да, то как?

Ну механизмов много. Например, задание альтернативной точки входа alt_main. Смотрите раздел "Reducing code footprint" в Nios II Software Developer's Handbook
diwil
Цитата(Stewart Little @ Nov 3 2009, 17:24) *
Мне кажется, что решать эту задачу через два PIO не совсем корректно. Вход в обработчик прерывания PIO может занимать до 105 тактов (это в лучшем случае), Вы уверены, что за это время данные не изменятся?
Я бы сделал свой собственный модуль, который защелкивает данные по фронту, и генерит запрос прерывания. А в обработчике процессор считывает уже защелкнутые данные.


да. защелка сделана. данные остаются неизменными в течении 1250 тактов. Поэтому читаем правильные данные.

А вот если обработчик так долго инициализируется, то можно как-либо его избежать?
Дело в том, что данные у меня идут потоком в 40кГц и на самом деле там 4х32 линии данных.
Как эти данные по фронту импуься запихать в память проца, например через DMA?




Прочитал про уменьшение кода. понятно. благодарю.
Leka
Цитата(Stewart Little @ Nov 3 2009, 18:24) *
Вход в обработчик прерывания PIO может занимать до 105 тактов (это в лучшем случае)

И на что тратятся эти такты(с Ниосом дела не имел)?
Kuzmi4
2 Leka - у ниоса нет хардварного контроллера прерываний (ну чтоб за пару тактов сразу в обработчике оказаться), переход организован через си-код - а это такты smile.gif .
По крайней мере во времена 8-го квартуса так было. Там вон 9.1 уже испекли - может и появился хардварный контроллер в ниосе.
Alezi
Приветствую!
Я в настоящее время работаю с прерываниями, если кому интересно, результаты следующие:
на on-chip при выборе 3 типа NIOS время реакции составило 2,56 мкс (~128 тактов) при частоте 50 МГц. Есть данные по другим типам NIOS и памяти...
На этот счет у меня вопрос, как и где посмотреть код, на который тратиться время реакции? И почему на разных типах процессора это время различается?
И личный вопрос к Kuzmi4 : откуда информация про си-код, очень интересно! ))
Kuzmi4
2 Alezi
Для затравки читаем это, раздел 8 - "Exception Handling" - там всё написано и написано где есчё посмотреть laughing.gif .

По идее под ответ вам подходит страница 206
Цитата
Internal or External Interrupt Controller
The Nios II IIC is nonvectored, requiring the processor to dispatch ISRs with a
software routine. An EIC, by contrast, can be vectored. With a vectored EIC, such as
the Altera® VIC, ISR dispatch is managed by hardware, eliminating the processing
time required for ISR dispatch, and substantially reducing hardware interrupt
response time.
An EIC has no impact on software exception latency or response time.
Shadow Register Sets
In conjunction with an EIC, shadow register sets speed up hardware interrupt
response by making it unnecessary to save registers on the stack. This feature has no
impact on interrupt latency, but significantly reduces interrupt response time.
Shadow register sets have no impact on software exception response time.

ну и дальше по тексту smile.gif

Я так понимаю у вас там нет VIC в вашей системе, так ? Засандальте его и померяйте время wink.gif по идее должно уменьшится
Stewart Little
Цитата(Alezi @ Nov 10 2009, 13:06) *
И почему на разных типах процессора это время различается?

Конвейер, кэши и пр.

Цитата(Alezi @ Nov 10 2009, 13:06) *
... откуда информация про си-код, очень интересно! ))

Гугль в помощь : How the IRQ Code Works for the Nios II Processor
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.