Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SOPC component builder
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
DASM
Извините, было наверное уже, но впрямую не нашел. Написал модулек небольшой на Verilog. В нем буфер небольшое, по приему байта буфер сдвигается, и над буфером производится XOR по всем байтам. Вобщем не суть. То есть input 8 bit и 8 bit output (ну и clock) . Создал в Component editor модуль, Avalon slave как я понимаю мне проставился автоматом. После компиляции в system.h появился базовый адрес этого моего модуля. А вот чего с этим адресом делать - не пойму. Мне б надо на Сях в модуль байтик этот туда(в input) писать, а следущей командой считывать из output.. Несколько сумбурно объяснил, но, наверное, суть ясна.
Kuzmi4
Используйте IOWR_32DIRECT/IORD_32DIRECT
страница 242
Там же и примеры есть rolleyes.gif маленькие правда

Хороший пример
страница 147
DASM
То, что надо использовать IORD_8DIRECT/IOWR_8DIRECT в моем случае ясно. Непонятно, какая привязка к этим портам с исходным verilog файлом. В system.h только BASE есть. Вообще я по-моему что-то не так делаю
Kuzmi4
Цитата
Непонятно, какая привязка к этим портам с исходным verilog файлом

обычная привязка - вам выделили кусок адресного пространства и при обращении к нему будут бегать реквесты к вашему модулю.
DASM
все равно не догоняю..
есть модуль
module testXOR(clock, out, inData);
input clock;
input [7:0] inData;
output [7:0] out;
..... lalalalala
endmodule
Вот как его подключить, чтобы получил при обращении к нему из NIOS доступ к адресам out и inData ?
Kuzmi4
Всё на рисунке
Нажмите для просмотра прикрепленного файла
кратко - нужн онаписать мастер/слейв на авалон и уже через него интерфейсить свою логику

Для затравки
DASM
Итого - с чего начать в SOPC builder - ваще теперь запутался.. И рисунок тем более ничего не прояснил
Kuzmi4
Начинать нужно как обычно с чтения тонны документации
Вот этой например:
QII Handbook->SOPC Builder
SOPC Builder Component Development Walkthrough
Embedded Design Handbook
vadimuzzz
вы, наверное, что-то такое пытаетесь сделать: http://www.altera.com/support/examples/nio...celeration.html
DASM
неужели все так сложно =) Найти банального примера простейшего модуля на Verilog и как его подключить ? вроде ж не так много хочу для начала. Просто сейчас стадия такая, что нужно вообще оценить, насколь NIOS нужен в проекте. Углубиться в основы еще успею
vadimuzzz
Цитата(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 в том примере, что я выше приводил, он есть. как раз на верилоге.
DASM
Ага, пример похоже и есть то что надо. Код то написал, это не лень. Просто куча всяких вариантов в Сети, но именно с 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
yes
еще раз посоветую:

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

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

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

у ксайлинса слейв генерится автоматом (но там кореконнект - замаишься руками писать), а так как тут шина простая, то альтеровцы предлагают самому слэйва писать. ну и смысла в автоматическом генераторе нет - на выходе будет тоже что и на входе
DASM
Чего-то все равно лыжи не едут.. Если я не использую address signal в Avalon slave, а использую только readdata и writedata и стробы read write - то они оба будут иметь адресс BASE ? Для теста сделал
always @(posedge clock)
if (read)
begin
out <= 8'haa;
end
В NIOS же считывается 0xFC sad.gif В чем не так ?
vadimuzzz
или не оттуда читает, или одно из двух. м.б. адрес сменился, SOPC пересобирали? можно сигналтапом посмотреть или в моделсим загнать.
Stewart Little
Цитата(DASM @ Mar 5 2010, 12:27) *
В чем не так ?

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

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

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

Так это, поди, конфликт на шине. При любом цикле чтения на шине (чтении из памяти, к примеру) Ваш модуль будет пытаться тоже чего-то там на шину выдать.
DASM
Разве Avalon не рулит этим ? Не к адресам же модуля обращаются
Stewart Little
Цитата(DASM @ Mar 5 2010, 13:16) *
Разве Avalon не рулит этим ? Не к адресам же модуля обращаются

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

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

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

в HAL API есть соотв. функции. например, alt_remap_uncached(void* ptr, alt_u32 len) преобразует область памяти по адресу ptr для некэшированного доступа.
yes
Цитата(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);
}
vadimuzzz
дык код alt_dcache_flush посмотрите, сбрасываются только строки, которые лежат по нужному адресу.
по поводу использования гляньте в sgdma и в ethernet. при передаче данных(дескриптора) от ЦП к контроллеру DMA вызывается alt_remap_uncached. обратная операция (делается в драйвере ethernet, например) использует вызов alt_remap_cached.
yura-w
Подскажите,
можно ли в SOPC Builder, для вложенных в top файл модулей, использовать массивы портов?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.