|
Как распределяется адесное пространство в компоненте? |
|
|
|
Apr 11 2010, 11:43
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 2-11-08
Из: Ростов-на-Дону
Пользователь №: 41 331

|
Расположение по адресам внутри компонента Вам известно? Они будут там же, только учитываете базовый адрес (написан в SOPC Builder, при генерации также создается .h в котором он указан, допустим у вас это h1000) и учитываете смещение адресов (то есть, если мастер и компонента 32-битные, смещение 2 бита , то регистры по адресам внутри компонента 0,1,2,3 будут доступны по адресам 1000,1004,1008,100С...) Грубо говоря, смещение - это сколько младших бит адреса мастера выкидываются. Остальные поступают внутрь компонента.
|
|
|
|
|
Apr 11 2010, 13:09
|

Частый гость
 
Группа: Участник
Сообщений: 85
Регистрация: 8-04-10
Из: Нижний Новгород
Пользователь №: 56 498

|
Про базовый адрес и смещение я понял - так и предполагал. Проблема в том, что внутри самого компонента не знаю как узнать расположение адресов. Как оно там строится? Сам компонент состоит из нескольки модулей, связанных между собой - и как там оно расположено, не понятно. Если кто-нибудь поможет - буду благодарен. Прикрепляю исходники компонента.
|
|
|
|
|
Apr 11 2010, 18:18
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Цитата(Shevnnov @ Apr 11 2010, 22:02)  Сейчас пока да - только память. Но буду добавлять еще один модуль с памятью (для TX части) и регистры управдения для MDIO. И тут станет актуальна очень. Как вывести регистры, чтобы они были доступны из вне? Просто я этот момент не понимаю немного. И как между регистрами, как потом между ними адресацию задать? Сами внутри должны декодировать, например, в таком духе: CODE if (cs & ~wr_n) ctlreg[addr]<=wr_data;
|
|
|
|
|
Apr 11 2010, 20:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079

|
Цитата(Shevnnov @ Apr 12 2010, 00:01)  То есть получается у меня имется блок памяти и я только в рамках него могу адресацию выполнять? А как быть если например у меня есть mem1[512], в другом модуле mem2[512], а еще хочу пару регистров из третьего модуля (тот что eth_rx_sm.v) вывести. (например регистр ready)? А Вы сами как думаете? Если у Вас, к примеру, внутри модуля есть память [...] mem1 [7:0] и память [...] mem2 [7:0] (по 8 слов), а снаружи приходит сигнал address[2:0].И равен этот сигнал, к примеру, 3'd5.
К какой памяти в итоге будет обращение, к mem1 или к mem2? И как это должно работать?
--------------------
|
|
|
|
|
Apr 11 2010, 22:25
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(Shevnnov @ Apr 12 2010, 01:02)  Сейчас пока да - только память. Но буду добавлять еще один модуль с памятью (для TX части) и регистры управдения для MDIO. И тут станет актуальна очень. Как вывести регистры, чтобы они были доступны из вне? Просто я этот момент не понимаю немного. И как между регистрами, как потом между ними адресацию задать? Сделайте 2 Avalon-MM Slave интерфейса, один для памяти, другой для регистров. такое разделение удобно тем, что можно, например, к интерфейсу памяти прикрутить DMA, а управлением через регистры займется CPU. я так понял, что вы делаете ethernet MAC? чем готовые не устраивают, тот же опенкоровский от Igor Mohor? upd: сколько блоков памяти, столько и интерфейсов авалоновских делайте + 1 для регистров. посмотрите также Avalon Naming Conventions, для автоматического распознавания типов сигналов по именам, не помешает также сделать прерывание.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|