реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как распределяется адесное пространство в компоненте?
Shevnnov
сообщение Apr 11 2010, 05:15
Сообщение #1


Частый гость
**

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



Суть вопроса. Имеется мною написнный компонент для Nios II Cyclone III. Интегрирую его в SoPC-Builder'е в систему через Avalon. Мне выделяется диапазон адресов размером 7ff. В самом компоненте имеется блок под память, управляющие регистры. Где найти информации какие регистры моего по какому адресу сейчас находятся? Потому что есть необходимость как читать, так и писать в блок паямти, так и отслеживать состояние компонента через управлющие регистры.
Go to the top of the page
 
+Quote Post
murmel1
сообщение Apr 11 2010, 11:43
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 2-11-08
Из: Ростов-на-Дону
Пользователь №: 41 331



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


Частый гость
**

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



Про базовый адрес и смещение я понял - так и предполагал. Проблема в том, что внутри самого компонента не знаю как узнать расположение адресов. Как оно там строится? Сам компонент состоит из нескольки модулей, связанных между собой - и как там оно расположено, не понятно.
Если кто-нибудь поможет - буду благодарен. Прикрепляю исходники компонента.
Прикрепленные файлы
Прикрепленный файл  eth_rx_comp.zip ( 3.85 килобайт ) Кол-во скачиваний: 20
 
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 11 2010, 13:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



так Вы сами же порт адреса должны декодировать, и ессно тогда знаете - где что и как.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 11 2010, 13:26
Сообщение #5


Гуру
******

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



наружу выведен только интерфейс памяти 512x32бита или 2048(0..7ff)байт, никаких регистров извне не видно
Go to the top of the page
 
+Quote Post
Shevnnov
сообщение Apr 11 2010, 17:47
Сообщение #6


Частый гость
**

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



Сейчас пока да - только память. Но буду добавлять еще один модуль с памятью (для TX части) и регистры управдения для MDIO. И тут станет актуальна очень. Как вывести регистры, чтобы они были доступны из вне? Просто я этот момент не понимаю немного. И как между регистрами, как потом между ними адресацию задать?
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Apr 11 2010, 18:18
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



Цитата(Shevnnov @ Apr 11 2010, 22:02) *
Сейчас пока да - только память. Но буду добавлять еще один модуль с памятью (для TX части) и регистры управдения для MDIO. И тут станет актуальна очень. Как вывести регистры, чтобы они были доступны из вне? Просто я этот момент не понимаю немного. И как между регистрами, как потом между ними адресацию задать?

Сами внутри должны декодировать, например, в таком духе:
CODE
if (cs & ~wr_n) ctlreg[addr]<=wr_data;
Go to the top of the page
 
+Quote Post
Shevnnov
сообщение Apr 11 2010, 19:46
Сообщение #8


Частый гость
**

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



То есть получается у меня имется блок памяти и я только в рамках него могу адресацию выполнять?
А как быть если например у меня есть mem1[512], в другом модуле mem2[512], а еще хочу пару регистров из третьего модуля (тот что eth_rx_sm.v) вывести. (например регистр ready)?
Go to the top of the page
 
+Quote Post
des333
сообщение Apr 11 2010, 20:47
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 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?

И как это должно работать?


--------------------
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 11 2010, 22:25
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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, для автоматического распознавания типов сигналов по именам, не помешает также сделать прерывание.
Go to the top of the page
 
+Quote Post
Shevnnov
сообщение Apr 12 2010, 10:06
Сообщение #11


Частый гость
**

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



Спасибо за совет! Да, вы правильно поняли. Цель - написать прототип контроллера MAC. Это пишу в рамках своей дипломной работы в Универе, поэтому нужно свой реализовать. Немного нt понял про разделение управления между DMA и NIOS CPU. Какова идеология и как это организовать? Если есть ссылка на литературу, скиньте плиз.
А можно ли в рамках одного интерфейса Avalon Slave выводить просто регистры? Или обязательно они должны быть как блок памяти?
А пока всем управляет CPU и суть в том что когда приходит пакет, должно срабатывать прерывание и программа с помощью HAL считывает содержимое памяти. ТАк же требуются управляемые регистры для контроля контроллера процессором. Пока сейчас отлаживаю на симуляции в ModelSim считывание данных программой через драйвер, без прерываний - нужна просто группа регистров по состоянию которых буду судить о том что и как было принято.
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 12 2010, 10:10
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



выводить можно что угодно, хоть память, хоть регистры, хоть состояние другого порта. Просто декодируйте адрес и делайте нужное присваивание. Литературы настолько много, что порой не хватает времени читать - приходится у народа спрашивать smile.gif
Go to the top of the page
 
+Quote Post
Shevnnov
сообщение Apr 12 2010, 10:56
Сообщение #13


Частый гость
**

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



С литературой это верно подмечено. Руководитель уже начинает докучать, почему так медленно. Да потому что тут не поймешь с какого бока подходить и что читать.
Это хорошо что можно всё. Вопрос в том как добавить то что я хочу в адресное пространство компонента, которое выделяется SOPC-Bulder'ом (0x00000800..0x00000fff - как сечас уменя) другие регистры. И как потом разобрать в этой каше потом где и что SOPC-builder разместил?
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 12 2010, 11:26
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Так Вам же посоветовали - ДВА слейва ! А SOPC никакую кашу не делает - адреса ПОЛНОСТЬЮ определяются Вашим декодером адреса
Go to the top of the page
 
+Quote Post
des333
сообщение Apr 12 2010, 11:28
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(Shevnnov @ Apr 12 2010, 15:11) *
С литературой это верно подмечено. Руководитель уже начинает докучать, почему так медленно. Да потому что тут не поймешь с какого бока подходить и что читать.

А какая конкретно тема диплома, если не секрет?


--------------------
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 16:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016