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

 
 
> Компонент в SOPC Builder, как "узнать свой адрес"?
torik
сообщение Jan 28 2009, 08:52
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Итак, делаем компонент в SOPC Builder. Это будет avalon slave. Создаем модуль с текстом вроде:

Код
                         ....................
                        input [15:0] address,
                        input [15:0] data,
                        input wren
                        );
.........
reg        [3:0]    reg_alpha;

always @(posedge clock  or posedge reset) begin
    if(reset) begin
        reg_alpha <= 4'd4;
    end else begin
        if((wren == 1'b1)&&(address == 0 [b](???)[/b])) begin
            reg_alpha <= data[3:0];
        end
    end
end


Т.е. имеется набор регистров в этом модуле, куда мастер (например процессор) будет записывать данные. Но когда модуль ставим в систему, ему присваивается адрес, обычно отличный от нуля. Как мне его определить, учесть в модуле?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
vetal
сообщение Jan 28 2009, 09:16
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Зачем его учитывать?
SOPC Builder выделит вашему модулю пространство адресов внутри которого ему будет пересчитал адрес и выставлены сигналы управления. В вашем случае это будет 128 кБайт.

В программе этот адрес можно взять из файла system.h
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 28 2009, 10:52
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Нет, я не это имею ввиду. Просто я невнятно объясняю.
Например в самом модуле я хочу записывать данные data в регистр, когда шина обращается к этому модулю по относительному адресу "0". Т.е. заполнение регистрового файла...

Код
        if((wren == 1'b1)&&(address == 0) begin
            reg_alpha <= data[3:0];
        end


Тут в регистр reg_alpha пишутся данные data, если идет обращение по адресу (адрес модуля + 0). Но адрес модуля в системе может измениться, как это учесть?

Где-то я читал давно, да найти не могу. Модуль будет "видеть" абсолютный адрес или только относительный? В последнем случае достаточно будет использовать сигнал CS шины авалон.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 28 2009, 11:09
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(torik @ Jan 28 2009, 04:52) *
Где-то я читал давно, да найти не могу. Модуль будет "видеть" абсолютный адрес или только относительный? В последнем случае достаточно будет использовать сигнал CS шины авалон.


vetal вам уже сказал. Задачу декодирования доступа к вашему слейву берет на себя интерконект (Avalon Switch Fabric), и адрес он вам подсунет после удаления из него информации о выборе вашего слейва.

Обычно это делается за счет "адресных окон" в карте адресов, которые выбираются кратными 2^N.

например. пусть мастер пользует карту :: слейв1 : 0x000 - 0x0FF, слейв 2 0x100 - 0x1FF. В этом случае 9ый бит выбирает к какому слейву обращаться, а каждый слейв видит CS (зависит от используемой шины) и адрес 0x00-0xFF .

Но для себя можно поизвращаться и сделать окна не кратные 2^N, будет весело %)


--------------------
Go to the top of the page
 
+Quote Post
vetal
сообщение Jan 28 2009, 11:11
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Цитата
Но адрес модуля в системе может измениться, как это учесть?

Никак это учитывать не надо. Все уже учтено за вас. На момент обращения к модулю он будет видеть только свои адреса. В сигналы чтения/записи и cs вся необходимая информация уже встроена. Никаких дополнительных телодвижений со стороны железа делать не требуется.
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 28 2009, 12:17
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Спасибо! Да, теперь все понятно. Дело в том, что CS я сперва поленился использовать smile.gif, исправляю...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
vetal
сообщение Jan 28 2009, 12:39
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Цитата
Спасибо! Да, теперь все понятно. Дело в том, что CS я сперва поленился использовать smile.gif, исправляю...

Его необязательно использовать. Он уже входит в состав сигнала wren !
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 28 2009, 13:55
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Здорово, тогда, получается, у меня все впорядке smile.gif. Оно и работает, просто одолевали сомнения...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post

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

 


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


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