Это Video and Image Processing Suite, набор компонент для видеобработки на лету в ПЛИС -- см. http://www.altera.com/literature/ug/ug_vip.pdf.
У нас в проекте что-то оттуда работает, что-то нет...
Нам надо поюзать компонент Frame Reader, чтобы из памяти выдавал картинку на VGA-монитор 800х600 через блок Clocked Video Output.
Последний компонент живой -- его проверяли, подав радужную картинку от Test Pattern Generator-а, а вот Frame Reader очень тихо себя ведёт, даже к памяти не обращается, соответственно и на мониторе нет сигнала.
800х600 настройки, пробовали цветное RGB и ч/б байтовое изображение -- глухо.
Что может быть не так ? На сайте Альтеры наблюдали несколько примеров программирования регистров Frame Reader-а, у нас похоже, и даже если бы какой-то из счётчиков криво записали, хоть раз к памяти ядро должно было полезть ? Старт дошел, анализатор это показал, бит в статусном [1] встал, а потом всё застыло. Правда, контроллер DDR староват -- пачками не работает.
Версия Квартуса 10.0, там уже что-то было подправлено Альтерцами сервиспаками, как они на сайте пишут.
Картинки с настройками обоих блочков прилагаются, инициализация Ниос вот:
CODE
enum {FX = 800, FY = 600};
volatile ui *fr = (volatile ui*)ALT_VIP_VFR_0_BASE;
IOWR(fr, 3, 0); // Frame Select
IOWR(fr, 4, 4*M); // Frame 0 Base Address
IOWR(fr, 5, FX*FY/8); // Frame 0 Words
IOWR(fr, 6, FX*FY); // Frame 0 Single Cycle Color Patterns
IOWR(fr, 8, FX); // Frame 0 Width
IOWR(fr, 9, FY); // Frame 0 Height
IOWR(fr, 10, 3); // Frame 0 Interlaced
IOWR(fr, 11, 5*M); // Frame 1 Base Address
IOWR(fr, 12, FX*FY); // Frame 1 Words
IOWR(fr, 13, FX*FY); // Frame 1 Single Cycle Color Patterns
IOWR(fr, 15, FX); // Frame 1 Width
IOWR(fr, 16, FY); // Frame 1 Height
IOWR(fr, 17, 3); // Frame 1 Interlaced
IOWR(fr, 0, 1);
while (! (fr[1] & 1) ) ; // Wait for start
while (! (fr[2] & 1) ) ; // Waiting Interrupt -- nedowaiting :(
volatile ui *fr = (volatile ui*)ALT_VIP_VFR_0_BASE;
IOWR(fr, 3, 0); // Frame Select
IOWR(fr, 4, 4*M); // Frame 0 Base Address
IOWR(fr, 5, FX*FY/8); // Frame 0 Words
IOWR(fr, 6, FX*FY); // Frame 0 Single Cycle Color Patterns
IOWR(fr, 8, FX); // Frame 0 Width
IOWR(fr, 9, FY); // Frame 0 Height
IOWR(fr, 10, 3); // Frame 0 Interlaced
IOWR(fr, 11, 5*M); // Frame 1 Base Address
IOWR(fr, 12, FX*FY); // Frame 1 Words
IOWR(fr, 13, FX*FY); // Frame 1 Single Cycle Color Patterns
IOWR(fr, 15, FX); // Frame 1 Width
IOWR(fr, 16, FY); // Frame 1 Height
IOWR(fr, 17, 3); // Frame 1 Interlaced
IOWR(fr, 0, 1);
while (! (fr[1] & 1) ) ; // Wait for start
while (! (fr[2] & 1) ) ; // Waiting Interrupt -- nedowaiting :(
Хоть свои рабочие примеры запостИте.