Цитата(altlogic @ Jul 25 2012, 10:05)

...Но вопрос останется открытым. Чем так может оличаться SGDMA от других IP-core, что не позволяет писать в свои регистры данные. Где у меня может быть ошибка?...
У меня все работает.
Начните с простых вещей:
- Проверьте по "system.h" и с помощью Qsys, что константа SGDMA_0_BASE действительно содержит базовый адрес для Вашего SGDMA.
- Познакомтесь с файлом "altera_avalon_sgdma_regs.h".
- Попробуйте выполнить такой код в отладчике в пошаговом режиме:
Код
alt_u32 wrData, rdData;
IOWR_ALTERA_AVALON_SGDMA_CONTROL(SGDMA_0_BASE, 0x00);
// Проверьте, что считывается 0x0
rdData = IORD_ALTERA_AVALON_SGDMA_CONTROL(SGDMA_0_BASE);
wrData = 0x00100000;
IOWR_ALTERA_AVALON_SGDMA_NEXT_DESC_POINTER(SGDMA_0_BASE, wrData );
// Проверьте, что rdData == wrData
rdData = IORD_ALTERA_AVALON_SGDMA_NEXT_DESC_POINTER(SGDMA_0_BASE);
Цитата(altlogic @ Jul 25 2012, 10:05)

Маскимальный размер транзакции DMA 2^32 байт, в то время как у SGDMA всего лишь 2^16. Изображение 640*480*3 байт будет передано за одну транзакцию DMA, а для передачи по SGDMA нужно делать несколько дескрипторов.
Зато, значения дескриптора можно формировать и цифровым автоматом. То есть, дескриптор может быть и цифровым автоматом. Жаль только, что SGDMA съедает много ресурсов FPGA.