DASM 0 November 12, 2010 Posted November 12, 2010 · Report post Тут задачка такая, вобщем надо mmslave 8 битный повесить на avalon bus. Как я понимаю при записи-чтении произойдет 4-ре обращения к слейву, что мне совсем не надо. Выхода я вижу два - или указать "addressAlignment" "NATIVE" (кстати а это поможет ? В примерах от Террасика вроде работает именно так) Вторым вариантом мне видится представить мой слейв таки как с 32 битной шиной, но в вериложном файле оответсвенно корректировать принимаемые адреса и использовать только байт из 32 битного слова (соответственно в НИОСе отсекать при чтении). - а этот вариант подойдет ? Ну и главный вопрос - как все же лучше то ? Quote Share this post Link to post Share on other sites More sharing options...
torik 0 November 12, 2010 Posted November 12, 2010 · Report post А о каких четырех обращениях идет речь? Quote Share this post Link to post Share on other sites More sharing options...
DASM 0 November 12, 2010 Posted November 12, 2010 · Report post If the master is wider than the slave, data bytes in the master address space map to multiple locations in the slave address space. For example, when a 32-bit master port performs a read transfer from a 16-bit slave port, the system interconnect fabric executes two read transfers on the slave side on consecutive addresses, and presents 32-bits of slave data back to the master port. Quote Share this post Link to post Share on other sites More sharing options...
vadimuzzz 0 November 12, 2010 Posted November 12, 2010 · Report post If the master is wider than the slave... я думаю, здесь имеются в виду операции с более чем 1 словом. например, пытаемся прочесть 5 байт, тогда в описанной здесь схеме будет 3 операции по 16 бит. у процессора ведь есть разные инструкции чтения: ldb, ldh,ldw ... Quote Share this post Link to post Share on other sites More sharing options...
DASM 0 November 12, 2010 Posted November 12, 2010 · Report post ммммм.. а я так понял, что если ниос с 32 битной шиной сделает IORD к 8 битному слейву, то прочтет таки 4 байта..... Quote Share this post Link to post Share on other sites More sharing options...
vadimuzzz 0 November 12, 2010 Posted November 12, 2010 · Report post ммммм.. а я так понял, что если ниос с 32 битной шиной сделает IORD к 8 битному слейву, то прочтет таки 4 байта..... посмотрите в сигналтапе, если есть возможность. самому интересно :) Quote Share this post Link to post Share on other sites More sharing options...
DASM 0 November 12, 2010 Posted November 12, 2010 · Report post TAP уже забыл как юзать, просто написал в верилоге счетчик кол-ва стробов RD и выдаю его.. Ан нет, одно обращение за раз делает... Тогда вообще не понимаю как эту фразу понимать Причем мне даже SOPC дает warning slave0 does not have byteenables from cpu. Narrow (less than 32-bit) writes will result spurios writes... Попробовал счетчик на write - то же самое - только одно обращение. Потом правда понял свою ошибку - в дизасме то он stw делал по макросу IOWR. Но я поменял запись на такое volatile alt_u8 *ptr = (alt_u8 *)(BRIDGE2MPEG_CNTRL_IF_0_BASE | 0x80000000); Теперь в дизасме stb уже, но ВСЕ РАВНО только одно обращение... ничо не понимаю... Quote Share this post Link to post Share on other sites More sharing options...
DASM 0 November 12, 2010 Posted November 12, 2010 · Report post Все. Понял. Просто я забыл при NATIVE перекомпилить SOPC Вобщем если в tcl стоит set_interface_property avalon_slave_0 addressAlignment NATIVE - то обращение будет одно. Если set_interface_property avalon_slave_0 addressAlignment DYNAMIC - то 4 (в моем случае) Quote Share this post Link to post Share on other sites More sharing options...