Jump to content
    

16 и 32 бит доступ к внешней памяти

Уважаемые, поясните пожалуйса, не пойму никак.

На плане цыклон3 и 16-ти разрядная sram, подключена к ниосу через avalon-mm tristate bridge, младший адрес к памяти не подключен. Она работает правильно, но не пойму почему:

работает и 8-ми, и 16-ти и (!внимание) 32-х разрядный доступ (еще раз:память снаружи 16-ти разрядная)

Выполняю команду IOWR(RD)_8DIRECT() - пишет/читает по 8 бит, IOWR(RD)_16DIRECT() - пишет/читает по 16 бит, ну думаю щас сделаю 32-х разрядный доступ IOWR(RD)_32DIRECT() - старшее полуслово либо в 0-х либо в единицах будет - нет! пишет и читает по 32 разряда. Другая мысль возникла - драйвером ниос наверно разруливает софтово - написал тест, запись 10 млн.раз один адрес памяти - время абсолютно одинаковое, что при 16-ти, что при 32-х разрядной команде. Посмотрел дизасм - единственная разница при 16 разр. доступе команда sthio, при 32-х команда stwio.

А физически то как это происходит? Ну 8-ми разрядный доступ можно разрулить байт-энейблами, а 32-х как? За два цикла пишет чтоли? Тогда почему время при 16 и 32 битном обращении одно и то же?

 

Непонятно!

 

Как то привык я понимать как все происходит, и если не понимаю - боюсь блин! Когда-нибудь непонимание это аукнется ведь!

 

 

Share this post


Link to post
Share on other sites

пАтАму как вАлшеПство (С) Я

А с каких пирогов (чем оценили) что одинаково? неуж встроенные ср-ва отладчика? Аль осцилограммка есть?

PS уровни абстракции чудеса творят

Share this post


Link to post
Share on other sites

А с каких пирогов (чем оценили) что одинаково? неуж встроенные ср-ва отладчика? Аль осцилограммка есть?

Я ж пишу, во-первых 10 млн. записей в память происходит за 4,3 сек, что при 16, что при 32 разрядном доступе (оценил секундомером незатейливо), во-вторых, код дизасма смотрел, разница между 16 и 32 разрядным доступом - одна команда соответственно sthio и stwio, подозреваю, что за одинаковое количество времени выполняются они, раз нет разницы в общем времени выполнения.

Share this post


Link to post
Share on other sites

А физически то как это происходит? Ну 8-ми разрядный доступ можно разрулить байт-энейблами, а 32-х как? За два цикла пишет чтоли? Тогда почему время при 16 и 32 битном обращении одно и то же?

подозреваю, что даже не 2 такта, а больше. там ведь наверное еще куча слейвов висит на шине. прицепите сигналтап и посмотрите, как транзакции происходят http://www.altera.com/literature/an/an446.pdf. там можно прямо сигналы к памяти смотреть на фоне дизассемблера.

Share this post


Link to post
Share on other sites

SRAM 16 бит, и пиши в нее хоть 16, хоть 32 слова, ее пропускная способность от этого не меняется. Если пишете 32 бит слова, то где-то появится фифо с входом 32 и выходом 16 бит.

Share this post


Link to post
Share on other sites

SRAM 16 бит, и пиши в нее хоть 16, хоть 32 слова, ее пропускная способность от этого не меняется. Если пишете 32 бит слова, то где-то появится фифо с входом 32 и выходом 16 бит.

 

А фифо сопц-билдер сам ставит чтоли? Я то никаких фифо не ставил. И разве фифо не переполнится при постоянной записи (тестовый код, больше проц ничем не занят) 10 млн. раз? Или он wait генерит, пока два полуслова не запишет? Но тогда получается что он и при 16 бит доступе тоже wait генерит - время выполнения одно и тоже. Не рационально как-то. При 16 бит дотсупе wait не нужен по логике то. Эх железки под руками не будет еще 2 недели - отдали пока, посмотреть бы...

Share this post


Link to post
Share on other sites

А фифо сопц-билдер сам ставит чтоли? Я то никаких фифо не ставил. И разве фифо не переполнится при постоянной записи (тестовый код, больше проц ничем не занят) 10 млн. раз? Или он wait генерит, пока два полуслова не запишет? Но тогда получается что он и при 16 бит доступе тоже wait генерит - время выполнения одно и тоже. Не рационально как-то. При 16 бит дотсупе wait не нужен по логике то. Эх железки под руками не будет еще 2 недели - отдали пока, посмотреть бы...

 

Я конечно больше по микробам с PLB специалист, но в ниосах я думаю не лучше - авалон тормозит по полной.

Посчитайте сами: 10мегазаписей за 4.3 секунды - это 2.5мегазаписей в секунду. За время пока данные ползут по авалону нормальная SRAM может 20 раз их записать - т.е. как и у микроба всё упирается в производительность шины. Она кстати 32-битная, поэтому на неё разряность данных не влияет. А лишнюю быструю запись в SRAM с секундомером вы не увидите на фоне тормозов.

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...