Jump to content
    

"addressAlignment" "NATIVE"

Тут задачка такая, вобщем надо mmslave 8 битный повесить на avalon bus. Как я понимаю при записи-чтении произойдет 4-ре обращения к слейву, что мне совсем не надо.

Выхода я вижу два - или указать "addressAlignment" "NATIVE" (кстати а это поможет ? В примерах от Террасика вроде работает именно так)

Вторым вариантом мне видится представить мой слейв таки как с 32 битной шиной, но в вериложном файле оответсвенно корректировать принимаемые адреса и использовать только байт из 32 битного слова (соответственно в НИОСе отсекать при чтении). - а этот вариант подойдет ? Ну и главный вопрос - как все же лучше то ?

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

If the master is wider than the slave...

я думаю, здесь имеются в виду операции с более чем 1 словом. например, пытаемся прочесть 5 байт, тогда в описанной здесь схеме будет 3 операции по 16 бит. у процессора ведь есть разные инструкции чтения: ldb, ldh,ldw ...

Share this post


Link to post
Share on other sites

ммммм.. а я так понял, что если ниос с 32 битной шиной сделает IORD к 8 битному слейву, то прочтет таки 4 байта.....

Share this post


Link to post
Share on other sites

ммммм.. а я так понял, что если ниос с 32 битной шиной сделает IORD к 8 битному слейву, то прочтет таки 4 байта.....

посмотрите в сигналтапе, если есть возможность. самому интересно :)

Share this post


Link to post
Share on other sites

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 уже, но ВСЕ РАВНО только одно обращение... ничо не понимаю...

Share this post


Link to post
Share on other sites

Все. Понял. Просто я забыл при NATIVE перекомпилить SOPC

Вобщем если в tcl стоит set_interface_property avalon_slave_0 addressAlignment NATIVE - то обращение будет одно.

Если set_interface_property avalon_slave_0 addressAlignment DYNAMIC - то 4 (в моем случае)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...