|
Как распределяется адесное пространство в компоненте? |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 22)
|
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, для автоматического распознавания типов сигналов по именам, не помешает также сделать прерывание.
|
|
|
|
|
Apr 12 2010, 11:57
|

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

|
Цитата(Shevnnov @ Apr 12 2010, 17:21)  Немного нt понял про разделение управления между DMA и NIOS CPU. Какова идеология и как это организовать? Если есть ссылка на литературу, скиньте плиз. приемная часть MAC (это же справедливо и для передающей) обычно состоит из моста между шинами MII и Avalon (по сути буфер FIFO) и контроллера DMA. DMA нужен чтобы разгрузить процессор от тупого копирования. работа примерно выглядит так: проц выделяет сегмент памяти, отдает указатель на этот сегмент контроллеру DMA и разрешает прием. MAC принимает пакет, пишет его в память, проверяет контрольную сумму и генерит прерывание. все, пакет целиком загружен, процессор может его обрабатывать, а контроллеру DMA дает следующий кусок памяти. примеры реализации: альтеровский www.altera.com/literature/ug/ug_ethernet.pdf и опенкоровский http://www.opencores.org/project,ethmac. есть модификация последнего под Avalon http://www.alteraforum.com/forum/showthread.php?t=21005 исходники 2 последних открыты и неплохо документированы. мне опенкоровский вариант больше нравится, т.к. контроллер DMA интегрирован в компонент, а в альтеровском надо внешний цеплять, возни больше. Цитата А можно ли в рамках одного интерфейса Avalon Slave выводить просто регистры? Или обязательно они должны быть как блок памяти? собственно, вся периферия memory mapped, не вижу проблемы. доступ ко всем регистрам i/o осуществляется как к памяти Цитата А пока всем управляет CPU и суть в том что когда приходит пакет, должно срабатывать прерывание и программа с помощью HAL считывает содержимое памяти. ну разве что чисто в академических целях, чтобы понять почему так делать не нужно Цитата ТАк же требуются управляемые регистры для контроля контроллера процессором. Пока сейчас отлаживаю на симуляции в ModelSim считывание данных программой через драйвер, без прерываний - нужна просто группа регистров по состоянию которых буду судить о том что и как было принято. делайте минимум 2 интерфейса, для регистров отдельный. читайте тут, особенно главу 6 (Naming Signals for Automatic Type and Interface Recognition) http://www.altera.com/literature/hb/qts/qts_qii5v4.pdfэто тоже читайте www.altera.com/literature/manual/mnl_avalon_spec.pdf
|
|
|
|
|
Apr 12 2010, 19:03
|

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

|
С адресным пространством компонента и как оно формируется разобрался. Всё завязано на интерфейсе Avalon-MM. Главное в компоненте обеспечить совместимость с шиной и обеспечить адресацию. Спасибо кто подсказывал, очень помогли. Как тут советовали - сделал два итерфейса Avalon MM Slave. Теперь осталось компонент переписать немного. Задумался вообще об общей идеологии контроллера. СЕйчас он работает по принципу из интерфейса MII поступают данные, склеиваются в 4 байтные слова и записыватся в встроенный в компонент блок памяти (просто пока изучаю инструментарий и софт - так что пытаюсь на таком примитиве хотя бы пройти все стадии от RTL модели -> к SOPC системе на FPGA принимающей пакеты) Вопрос - как в такую схему можно встроить DMA контроллер Alter'овский? И нужен ли он? P.S. Диплом сдавать в июне месяце, поэтому приходиться сейчас очень активизироваться ))
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|