|
Создание компонета для SOPC Builder с несколькими регистрами ввода/вывода |
|
|
|
Jul 25 2012, 06:23
|
Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035

|
Здравствуйте! Простая по идее задача - хочу созадать свой компонент I2C для SOPC с возможностью конфигурирования его через внутренние регистры компонента (да хотя бы флаг RUN реализовать  ). Как это сделать? Нашел на сайте Altera пример Memory Mapped Slave. В этом шаблоне у устройства задается использование 16 внутренних регистров. Но там мощный шаблон, на 700 сток кода. Я аж испугался  А мне кажется можно это все сделать проще. Ведь всего лишь нужно вытянуть из SOPC информацию о том, по какому адресу он разместил внутренние регистры устройства, ну и сделать их программно доступными конечо с шины Avalon. Примеров других пока не разбирал. Но мне кажется моя задача должна встречаться у всех разработчиков периферии под процессор для FPGA. Товарищ показал код для Xilinx MicroBlaze в аналогичной ситуации. Там, как и в примере Altera в описании компонента применяется специальная нотация. Смотрел IP-core I2C от Terasic. Там, как я понял используется несколько отдельных регистров ввода-вывода, то есть устройство состоит из нескольких устройств на шине Авалон. Видимо это вообще самое простое решение. Но ведь как-то некрасиво?..
--------------------
|
|
|
|
|
 |
Ответов
|
Aug 21 2012, 11:10
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Копейкин @ Aug 21 2012, 13:35)  Добавляете интерфейс Interrupt sender. У Вас добавится прерывание, которое в SOPC билдере нужно будет подключить к процессору. В пользовательской логике предусмотреть посылку прерывания уровнем или импульсом. Чтение/запись как обычно Avalon MM... Спасибо. Получилось
Чем может грозить предупреждение? Warning: cpu_0.data_master/ramtest_0.s0: ramtest_0.s0 does not have byteenables. Narrow (less than 32-bit) writes from cpu_0.data_master will result in spurious writes to ramtest_0.s0
Сообщение отредактировал Acvarif - Aug 21 2012, 11:13
|
|
|
|
|
Aug 22 2012, 10:13
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Почитал немного букварь "Avalon Interface Specification". Прописал нормально механизм чтения из RAM на Avalon. Чтение из RAM пошло. Но пока какая-то путаница с адресами. Если я определяю Код #define IORD_ALTERA_AVALON_RAM_0(base) IORD_16DIRECT(base, 0); #define IORD_ALTERA_AVALON_RAM_1(base) IORD_16DIRECT(base, 1); #define IORD_ALTERA_AVALON_RAM_2(base) IORD_16DIRECT(base, 2); #define IORD_ALTERA_AVALON_RAM_3(base) IORD_16DIRECT(base, 3); то надеюсь, что IORD_ALTERA_AVALON_RAM_0(base) прочитает данные по базовому адресу без смещения (по нулевому адресу RAM) - таки так оно и есть. далее надеюсь, что IORD_ALTERA_AVALON_RAM_1(base) прочитает данные по адресу базовый плюс 1- а реально читаются данные опять по нулевому адресу RAM. И только IORD_ALTERA_AVALON_RAM_2(base) читает данные по первому адресу RAM. IORD_ALTERA_AVALON_RAM_3(base) тоже читает данные по первому адресу RAM. В чем тут хитрость?
|
|
|
|
Сообщений в этой теме
altlogic Создание компонета для SOPC Builder с несколькими регистрами ввода/вывода Jul 25 2012, 06:23 Konst_777 Цитата(altlogic @ Jul 25 2012, 09:23) ...... Jul 25 2012, 17:41 altlogic Спасибо, буду иметь ввиду. Надо поковырять этот мо... Jul 26 2012, 02:05 barabek Цитата(altlogic @ Jul 26 2012, 12:05) Спа... Jul 29 2012, 22:32 Orochi Я учился работать с регистрами анализируя код этог... Jul 30 2012, 20:00 Acvarif Цитата(Orochi @ Jul 30 2012, 23:00) Я учи... Aug 13 2012, 13:41 Копейкин Сигналы, идущие наружу должны иметь тип интерфейса... Aug 13 2012, 16:40 Orochi Вот как подключен этот этот компонент у меня. aval... Aug 13 2012, 17:15 Acvarif Цитата(Orochi @ Aug 13 2012, 20:15) Вот к... Aug 14 2012, 07:05 Копейкин Deprecated-параметрами не следует пользоваться.
Эт... Aug 14 2012, 08:53 Acvarif Создал компонент Avalon MM Slave с пользовательско... Aug 17 2012, 06:44 Копейкин Я не силён в VHDL, пишу на Verilog, но
1) Выходной... Aug 17 2012, 08:00 Acvarif Спасибо. Попробую разобраться.
Если примитивно то... Aug 17 2012, 08:29 Копейкин Для чтения/записи отдельного байта следует использ... Aug 20 2012, 09:18 Acvarif Цитата(Копейкин @ Aug 20 2012, 12:18) Для... Aug 20 2012, 10:48 Копейкин Макро IORD(base, n) применяется при адресации типа... Aug 20 2012, 11:48 Acvarif Цитата(Копейкин @ Aug 20 2012, 14:48) Мак... Aug 20 2012, 12:35 Копейкин Вы должны увидеть активацию сигналов
avs_s0_read_... Aug 20 2012, 13:36 Acvarif Цитата(Копейкин @ Aug 20 2012, 16:36) Вы ... Aug 20 2012, 14:04 Копейкин Вы имеете в виду, что сигналы avs_s0_read_n & ... Aug 20 2012, 16:51 Acvarif Цитата(Копейкин @ Aug 20 2012, 19:51) Вы ... Aug 20 2012, 17:27  Acvarif Вроде получилось.
Для того, чтобы пронаблюдать на ... Aug 21 2012, 08:07 Копейкин Предупреждение предупреждает (о как), что устройст... Aug 22 2012, 13:31 Acvarif Цитата(Копейкин @ Aug 22 2012, 16:31) Пре... Aug 22 2012, 14:13 Копейкин Нет, автоматом не сбрасывается.
Ты должен иметь св... Aug 22 2012, 15:24 Acvarif Цитата(Копейкин @ Aug 22 2012, 18:24) Нет... Aug 23 2012, 06:30 Копейкин У меня примера под рукой нет, но когда разбирался,... Aug 23 2012, 09:05 Acvarif Цитата(Копейкин @ Aug 23 2012, 12:05) У м... Aug 23 2012, 10:18  barabek Цитата(Acvarif @ Aug 23 2012, 20:18) Спас... Aug 23 2012, 22:19   Acvarif Цитата(barabek @ Aug 24 2012, 01:19) По д... Aug 24 2012, 08:07 Копейкин Импульс небольшой длительности не гарантирует сраб... Aug 23 2012, 13:32
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|