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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> SOPC component builder
DASM
сообщение Mar 4 2010, 12:22
Сообщение #1


Гуру
******

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



Извините, было наверное уже, но впрямую не нашел. Написал модулек небольшой на Verilog. В нем буфер небольшое, по приему байта буфер сдвигается, и над буфером производится XOR по всем байтам. Вобщем не суть. То есть input 8 bit и 8 bit output (ну и clock) . Создал в Component editor модуль, Avalon slave как я понимаю мне проставился автоматом. После компиляции в system.h появился базовый адрес этого моего модуля. А вот чего с этим адресом делать - не пойму. Мне б надо на Сях в модуль байтик этот туда(в input) писать, а следущей командой считывать из output.. Несколько сумбурно объяснил, но, наверное, суть ясна.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 4 2010, 13:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Используйте IOWR_32DIRECT/IORD_32DIRECT
страница 242
Там же и примеры есть rolleyes.gif маленькие правда

Хороший пример
страница 147
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 4 2010, 13:09
Сообщение #3


Гуру
******

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



То, что надо использовать IORD_8DIRECT/IOWR_8DIRECT в моем случае ясно. Непонятно, какая привязка к этим портам с исходным verilog файлом. В system.h только BASE есть. Вообще я по-моему что-то не так делаю
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 4 2010, 13:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата
Непонятно, какая привязка к этим портам с исходным verilog файлом

обычная привязка - вам выделили кусок адресного пространства и при обращении к нему будут бегать реквесты к вашему модулю.
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 4 2010, 13:46
Сообщение #5


Гуру
******

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



все равно не догоняю..
есть модуль
module testXOR(clock, out, inData);
input clock;
input [7:0] inData;
output [7:0] out;
..... lalalalala
endmodule
Вот как его подключить, чтобы получил при обращении к нему из NIOS доступ к адресам out и inData ?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 4 2010, 14:06
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Всё на рисунке
Прикрепленное изображение

кратко - нужн онаписать мастер/слейв на авалон и уже через него интерфейсить свою логику

Для затравки
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 4 2010, 14:13
Сообщение #7


Гуру
******

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



Итого - с чего начать в SOPC builder - ваще теперь запутался.. И рисунок тем более ничего не прояснил
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 4 2010, 14:20
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Начинать нужно как обычно с чтения тонны документации
Вот этой например:
QII Handbook->SOPC Builder
SOPC Builder Component Development Walkthrough
Embedded Design Handbook
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 4 2010, 14:21
Сообщение #9


Гуру
******

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



вы, наверное, что-то такое пытаетесь сделать: http://www.altera.com/support/examples/nio...celeration.html
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 4 2010, 14:26
Сообщение #10


Гуру
******

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



неужели все так сложно =) Найти банального примера простейшего модуля на Verilog и как его подключить ? вроде ж не так много хочу для начала. Просто сейчас стадия такая, что нужно вообще оценить, насколь NIOS нужен в проекте. Углубиться в основы еще успею
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 4 2010, 14:34
Сообщение #11


Гуру
******

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



Цитата(DASM @ Mar 4 2010, 20:26) *
неужели все так сложно =) Найти банального примера простейшего модуля на Verilog и как его подключить ? вроде ж не так много хочу для начала. Просто сейчас стадия такая, что нужно вообще оценить, насколь NIOS нужен в проекте. Углубиться в основы еще успею

т.е. даже какие сигналы в шине avalon используются читать не хотите? smile.gif зря. ну для ленивых: clk,reset,read_data;read_address;read;write_data;write_address;write. регистры замапить на соотв. адреса, например, inData на адрес 0, out - на 1. это локальные адреса, потом они автоматом преобразуются в глобальные.

upd: а может вы и код писать не хотите? wink.gif в том примере, что я выше приводил, он есть. как раз на верилоге.
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 4 2010, 14:39
Сообщение #12


Гуру
******

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



Ага, пример похоже и есть то что надо. Код то написал, это не лень. Просто куча всяких вариантов в Сети, но именно с Verilog модулем не попадалось - все вода одна http://www.google.ru/search?hl=ru&neww...mp;aq=f&oq=
PS в примере методика создания неясна. =(
"clk,reset,read_data;read_address;read;write_data;write_address;write. регистры замапить на соотв. адреса, " - а где их мэпить то ?
*.tcl файлами РУЧКАМИ ? crying.gif
PPS А, кажется понял.. rolleyes.gif
Go to the top of the page
 
+Quote Post
yes
сообщение Mar 4 2010, 17:30
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



еще раз посоветую:

всякие операции с потоками лучше прогонять через Streaming, а не MM Avalon
там и интерфейс гораздо проще smile.gif

а потом, например, поставить FIFO с преобразованием stream в ММ

----------------

у ксайлинса слейв генерится автоматом (но там кореконнект - замаишься руками писать), а так как тут шина простая, то альтеровцы предлагают самому слэйва писать. ну и смысла в автоматическом генераторе нет - на выходе будет тоже что и на входе
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 5 2010, 09:27
Сообщение #14


Гуру
******

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



Чего-то все равно лыжи не едут.. Если я не использую address signal в Avalon slave, а использую только readdata и writedata и стробы read write - то они оба будут иметь адресс BASE ? Для теста сделал
always @(posedge clock)
if (read)
begin
out <= 8'haa;
end
В NIOS же считывается 0xFC sad.gif В чем не так ?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 5 2010, 09:55
Сообщение #15


Гуру
******

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



или не оттуда читает, или одно из двух. м.б. адрес сменился, SOPC пересобирали? можно сигналтапом посмотреть или в моделсим загнать.
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Mar 5 2010, 10:01
Сообщение #16


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(DASM @ Mar 5 2010, 12:27) *
В чем не так ?

Во всем smile.gif
Avalon - это системная шина. На нее могут подключаться разные устройства - ведущие (master) и ведомые (slave). Мастер может инициировать транзакцию на шине, а слейв может только реагировать на транзакцию мастера, адресованную именно этому слейву.
Мастеров и слейвов на шине может быть много. Для того, чтобы определять нужный слейв на Avalon'е, служит шина адреса. Тут все абсолютно аналогично стандартной микропроцессорной схемотени.
Т.е. адресовать слейв нужно обязательною (в исходнике предусмотрите порт адреса, и дешифровку, если нужно). А SOPC Builder на этапе сборки системы привяжет базовый адрес этого слейва к конкретному адресу на авалоне.

Поскольку ресурсы ПЛИСа хочется сэкономить, Avalon всегда создается неким оптимальныс с точки зрения SOPC Builder'a способом - а именно каждый мастер соединяется только с теми слейвами, с которыми он может организовать транзакции.

И еще один момент - при создании нового модуля в Component Editor'е можно указать, что этот модуль является памятью (там нужно спец. галку установить) - тогда с этим модулем можно будет общаться через указатели.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 5 2010, 10:06
Сообщение #17


Гуру
******

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



да, все всегда пересобираю.. Как-то странно, out <= 8'haa или другие, отличные нуля числа ; - на выходе 0xFC , только если ь out <= 8'h00 - тогда ноль читается. То есть читаю, похоже оттуда, но почему-то все портится. Мож времянка какая не того ? Тактовая у циклона 27 Мгц PLL нету, то есть частоты то невысокие. До сигналтапа еще не проэрудировался smile.gif
PS Оппа... просто регистр был 8-битный, а читал я видимо его как 8-битный. Полагал что это не страшно. Однако какой эффект... сделал его 32 битным - все OK
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Mar 5 2010, 10:11
Сообщение #18


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(DASM @ Mar 5 2010, 13:06) *
да, все всегда пересобираю.. Как-то странно, out <= 8'haa или другие, отличные нуля числа ; - на выходе 0xFC , только если ь out <= 8'h00 - тогда ноль читается. То есть читаю, похоже оттуда, но почему-то все портится. Мож времянка какая не того ? Тактовая у циклона 27 Мгц PLL нету, то есть частоты то невысокие. До сигналтапа еще не проэрудировался smile.gif

Так это, поди, конфликт на шине. При любом цикле чтения на шине (чтении из памяти, к примеру) Ваш модуль будет пытаться тоже чего-то там на шину выдать.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 5 2010, 10:16
Сообщение #19


Гуру
******

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



Разве Avalon не рулит этим ? Не к адресам же модуля обращаются
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Mar 5 2010, 10:29
Сообщение #20


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(DASM @ Mar 5 2010, 13:16) *
Разве Avalon не рулит этим ? Не к адресам же модуля обращаются

Да, что-то я погорячился... Сорри... laughing.gif

Цитата(DASM @ Mar 5 2010, 13:06) *
PS Оппа... просто регистр был 8-битный, а читал я видимо его как 8-битный. Полагал что это не страшно. Однако какой эффект... сделал его 32 битным - все OK

Тогда понятно. Вопросы выравнивания.
Забейте на макросы и переходите на работу с указателями.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
yes
сообщение Mar 5 2010, 12:59
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(Stewart Little @ Mar 5 2010, 13:29) *
Забейте на макросы и переходите на работу с указателями.


а меня заодно проинформируйте - как определить - кэшед или ан-кэшед обращение сгенерирует та или иная конструкция (конструкция HAL-а или API альтеровского - то есть высокоуровневая) ?
проц без ММУ

то, что это определяется 31-м битом я знаю, и по коду могу посмотреть
собственно IOWR / IORD тем и хороши, что ан-кешед аксес генерят и думать не надо, я их и использую

а с указателем надо 0х80000000 добавить к базовому адресу или как-то по другому?

-------------------------------------

2DASM по поводу многопроцессорных ниосов

я вопроса не нашел, а то что я разбирался - мне показалось проще иметь несколько независимых проектов для SOPC (для каждого процессора свой)

при этом плюсы - при изменении одного SOPC не надо пересобирать софтверные проекты для остальных процессоров, ну и квартус быстрее собирает
ну и мне всегда казалось, что двумя половинками проще оперировать чем одним целым,
в моем случае разные программисты программируют разные процессоры, поэтому организационно это проще - каждому свой ptf файл - меньше проблем

так как с именами там проблема (SOPC генерит верилог с одинаковыми именами), то надо для каждой системы свою директорию, которую включить для сборки в квартус

в качестве эксперимента пробовал многопроцессорную систему SOPC - но, по-моему, более трудоемко/громоздко, потом требуется дополнительно внимание прилагать для распределения памятей и т.п. (свойства системной библиотеки)
плюсов никаких не увидел, так как софт все-равно для каждого процессора автономный/независимый

upd: у меня разделяемой периферии не было, передача данных через conduit-ы вытащенные на топ-левел, причем кондуиты к Avalon-ST (а не ММ)

ну и еще есть вопросы работы шины - лень влезать.
минус аппаратный семафор не поставить, но как сделать семафор на общей памяти без блокировки Дейкста еще в 50-е придумал

в обоих случаях столкнулся с проблемой отладки/загрузки/программирования флаш - тулзы не могут правильно определить какой процессор используешь, поэтому вручную надо праставлять --instance (в дополнительных параметрах, если из gui)
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 7 2010, 02:35
Сообщение #22


Гуру
******

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



Цитата(yes @ Mar 5 2010, 18:59) *
а меня заодно проинформируйте - как определить - кэшед или ан-кэшед обращение сгенерирует та или иная конструкция (конструкция HAL-а или API альтеровского - то есть высокоуровневая) ?
проц без ММУ
то, что это определяется 31-м битом я знаю, и по коду могу посмотреть
собственно IOWR / IORD тем и хороши, что ан-кешед аксес генерят и думать не надо, я их и использую
а с указателем надо 0х80000000 добавить к базовому адресу или как-то по другому?

в HAL API есть соотв. функции. например, alt_remap_uncached(void* ptr, alt_u32 len) преобразует область памяти по адресу ptr для некэшированного доступа.
Go to the top of the page
 
+Quote Post
yes
сообщение Mar 10 2010, 10:13
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(vadimuzzz @ Mar 7 2010, 05:35) *
в HAL API есть соотв. функции. например, alt_remap_uncached(void* ptr, alt_u32 len) преобразует область памяти по адресу ptr для некэшированного доступа.

если не лень - объясните, как она работает?
то есть 1) как использовать, 2) как устроено в софте

UPD :

посмотрел, зачем же там параметр len,
вобщем-то разумно, почистить кэш,
хотя с другой стороны кэш - write-through, поэтому зачем флашить его - непонятно
Код
volatile void* alt_remap_uncached (void* ptr, alt_u32 len)
{
  alt_dcache_flush (ptr, len);
  return (volatile void*) (((alt_u32) ptr) | BYPASS_DCACHE_MASK);
}


Сообщение отредактировал Omen_13 - Apr 1 2010, 15:54
Причина редактирования: Оформление кода
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 10 2010, 15:01
Сообщение #24


Гуру
******

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



дык код alt_dcache_flush посмотрите, сбрасываются только строки, которые лежат по нужному адресу.
по поводу использования гляньте в sgdma и в ethernet. при передаче данных(дескриптора) от ЦП к контроллеру DMA вызывается alt_remap_uncached. обратная операция (делается в драйвере ethernet, например) использует вызов alt_remap_cached.
Go to the top of the page
 
+Quote Post
yura-w
сообщение Mar 19 2010, 12:30
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 22-06-07
Из: Санкт-Петербург
Пользователь №: 28 617



Подскажите,
можно ли в SOPC Builder, для вложенных в top файл модулей, использовать массивы портов?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 12th August 2025 - 09:57
Рейтинг@Mail.ru


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