Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа из EPCS
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Alezi
Суть следующая, необходимо обеспечить работу программы (не критичную по скорости исполнения) из EPCS, а работу обработчика прерывания и памяти данных из on-chip. Работаю на плате DE2-70, Quartus 9.1. Как уже пробовал, просто поставить вектор сброса на EPCS, а вектор исключений на on-chip не работает, ругается BSP editor:(( И еще, как определить, сколько памяти будет доступно для памяти программ в EPCS?
vadimuzzz
если мне память не изменяет, просто так EPCS как память программ использовать нельзя. в свое время попался модуль "epcs virtual memory", он вроде для таких извратов предназначен.
murmel1
Как нельзя ? Компонент для этого идет в комплекте с NIOS. Называется, если не ошибаюсь epcs_flash_controller
vadimuzzz
Цитата(murmel1 @ Jul 21 2010, 00:32) *
Как нельзя ? Компонент для этого идет в комплекте с NIOS. Называется, если не ошибаюсь epcs_flash_controller

epcs_flash_controller представляет из себя контроллер SPI + on-chip memory. в on-chip находится код загрузчика, который копирует код из epcs в какое-нибудь ОЗУ, а затем передает ему управление. вектор сброса указывает именно на on-chip.
Alezi
Насчет epcs virtual memory конечно интересно, но вот информации мало, как, да что. К сожалению сайт автора не работает, ссылок куда он перенесен не нашел((. Если есть какая нибудь информация по этому поводу буду рад видеть))
vadimuzzz
автор ушел работать в microtronix и убрал свои разработки из свободного доступа. так что, наверное, самый простой путь - разобрать его исходники и написать свой модуль. там всего 1 файл, второй сгенерирован мегавизардом.
Alezi
А если пробовать следующим образом, записать программу в EPCS при помощи флеш программера, а затем, допустим по 1 кБ читать и выполнять этот код, используя on-chip memory как файл подкачки. Возможен ли такой вариант?
vadimuzzz
дык epcs virtual memory, что выше приводился, это и делает примерно smile.gif цимес тут в следующем: ниос должен видеть этот модуль как память соотв. размера, обращение же по некоторому адресу будет происходить либо быстро (нужный сегмент находится в буфере), либо медленно (код подгружается в буфер).
Alezi
Пока пробовал поставить epcs virtual memory как компонент SOPC builder, но возникли проблемы при компиляции:
Код
Error: One or more components could not be located (epcs_virtual_memory). Check IP Search Path under Tools->Options... in SOPC Builder.
Error: System generation failed.

Хотя все пути до файлов проверил sad.gif
Мой предыдущий вариант про файл подкачки в принципе работает, однако приходится в EPCS записывать машинный (откомпилированный) код, который я нашел только в дебугере (скопировал из памяти код готовых команд). Ну а в основной программе, извлекаю часть этого кода и делаю к нему переход.
Но тут очень много проблем, например работа с библиотеками очень затруднительна(( А искать машинный код очень тяжело...
Может есть какие варианты?
vadimuzzz
а сам компонент epcs virtual memory создали?
по поводу кода - а чем nios2-flash-programmer не подходит?
Alezi
Делал и new component (хотя при указании в IP Search Path ->Tools->Options компонент появляется в общем списке), но он ругается на большое число "лишних" сигналов, да и сам компонент при этом выглядит не так как прежде...
По поводу кода, я не нашел как сделать средствами nios2-flash-programmer машинный код. Либо, необходимо использовать утилиту elf2flash?
Подскажите если не сложно...
vadimuzzz
Цитата(Alezi @ Jul 29 2010, 08:04) *
Либо, необходимо использовать утилиту elf2flash?

да, примерно так:
elf2flash --epcs --input="hello_world.elf" --output="output_file_name.flash"


Цитата(Alezi @ Jul 29 2010, 08:04) *
Делал и new component (хотя при указании в IP Search Path ->Tools->Options компонент появляется в общем списке), но он ругается на большое число "лишних" сигналов, да и сам компонент при этом выглядит не так как прежде...

скриншоты с руганью покажите, скорее всего он не распознал по именам сигналов типы интерфейсов
Alezi
Цитата
да, примерно так:
elf2flash --epcs --input="hello_world.elf" --output="output_file_name.flash"

Файл сделал, однако, как я думаю все это бесполезно...буду копать в сторону epcs virtual memory.
Проблемы при создании new component:
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
vadimuzzz
Цитата(Alezi @ Jul 29 2010, 12:55) *
Файл сделал, однако, как я думаю все это бесполезно...буду копать в сторону epcs virtual memory.

почему бесполезно?
насчет интерфейсов - так и есть, он не распознал. должно быть 2 интерфейса Avalon-MM Slave, 1 clockreset, и export для шины ASMI (которая к EPCS идет). кто такие FLASH_ERASED* не понятно, по идее они внутри должны быть, процессор о них типа не знает. вообще пихать все в один файл не есть гут, имхо. лучше по модулям разбить.
Alezi
Вроде собрать блок в SOPC builder удалось, правда в квартусе не видны asmi интерфейсы и FLASH_ERASED торчат наружу....Проблема теперь в следующем:
Код
Error: Cannot place the following nodes
Error: Cannot place node "system:inst3|epcs_virtual_memory_classic_0:the_epcs_virtual_memory_classic_0|epcs_virtual_memory:the_epcs_virtual_memory|epcs_virtual_memory_ep:end_point|asmi_miso" of type ASMI block

Работаю на CycloneII и пока не нашел к чему зацепить эти выводы....на Cyclone III вроде все проще...sad.gif
vadimuzzz
попробуйте в Assignment Editor добавить опцию enable_asmi_for_flash_loader on
Alezi
Ругается на закоментированную строку:
Код
--synthesis read_comments_as_HDL on
--SIGNAL asmi_clk, asmi_cs, asmi_mosi, asmi_miso     : std_logic;
--synthesis read_comments_as_HDL off
SIGNAL asmi_clk_int : std_logic;
SIGNAL asmi_cs_int    : std_logic;

После того как сторка была удалена, появилось:
Код
Error (10482): VHDL error at epcs_virtual_memory.vhd(166): object "asmi_clk" is used but not declared

и направляет на строку:
Код
asmi_clk <= asmi_clk_int;

Сам ASMI_CLK: OUT std_logic; указан в описании PORT();

Цитата
попробуйте в Assignment Editor добавить опцию enable_asmi_for_flash_loader on

Нашел описание
Цитата
A logic option that enables the Active Serial Memory Interface (ASMI) for Flash Loader IP blocks. This option can be set in the Assignment Editor.

но саму опцию так и не нашел((
На всякий случай прописал в Tcl Scripts
Код
set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER on


И еще, т.к. работаю с CycloneII пришлось подредактировать файл class.ptf для epcs_virtual_memory. По умолчанию там работа с Cyclone.
vadimuzzz
Цитата(Alezi @ Aug 3 2010, 08:13) *
Ругается на закоментированную строку:
Код
--synthesis read_comments_as_HDL on
--SIGNAL asmi_clk, asmi_cs, asmi_mosi, asmi_miso     : std_logic;
--synthesis read_comments_as_HDL off
SIGNAL asmi_clk_int : std_logic;
SIGNAL asmi_cs_int    : std_logic;

а если так:
Код
SIGNAL asmi_clk, asmi_cs, asmi_mosi, asmi_miso     : std_logic;
SIGNAL asmi_clk_int : std_logic;
SIGNAL asmi_cs_int    : std_logic;
Alezi
Ну в принципе так и сделал...только не понял для чего коментарий был...((
Теперь разбираюсь куда подключать контакты ASMI_CLK, ASMI_CS, ASMI_MOSI, ASMI_MISO. Ничего подобного в пин планере не нашел...есть вариант посмотреть у EPCS контроллера...разбираюсь..
vadimuzzz
а во 2-м циклоне квартус разве не автоматом распознает эти ноги?
Alezi
Как оказалось комментарий типа:
Код
synthesis read_comments_as_HDL on/off
видится в Quartus как обычный код. И это возвращает обратно к ошибке:
Код
Error: Cannot place node "system:inst3|epcs_virtual_memory_classic_0:the_epcs_virtual_memory_classic_0|
epcs_virtual_memory:the_epcs_virtual_memory|epcs_virtual_memory_ep:end_point|asmi_miso" of type ASMI block

Из топика C2 & C3 AS Mode EPCS without Altera EPCS IP понял, что идет работа с ASMI устройством...
В чем ошибка, пока не понял ...разбираюсь sad.gif
vadimuzzz
там в коде есть:
Код
--synthesis read_comments_as_HDL on
--COMPONENT cyclone_asmiblock is
--PORT (
--   signal data0out : OUT STD_LOGIC;
--       signal oe : IN STD_LOGIC;
--       signal scein : IN STD_LOGIC;
--        signal dclkin : IN STD_LOGIC;
--        signal sdoin : IN STD_LOGIC
--      );
--END COMPONENT cyclone_asmiblock;
--synthesis read_comments_as_HDL off

вам надо заменить cyclone_asmiblock на cycloneii_asmiblock
Alezi
Уже добавлял в проект altasmi_parallel из megafunction и там нашел тот же код:
Код
COMPONENT  cycloneii_asmiblock
     PORT
     (
        data0out    :    OUT STD_LOGIC;
        dclkin    :    IN STD_LOGIC;
        oe    :    IN STD_LOGIC := '1';
        scein    :    IN STD_LOGIC;
        sdoin    :    IN STD_LOGIC
     );
END COMPONENT;


Код
    cycloneii_asmiblock1 :  cycloneii_asmiblock
      PORT MAP (
        data0out => asmi_miso,  
        dclkin => asmi_clk,
        oe => '0',
        scein => asmi_cs,
        sdoin => asmi_mosi
      );

но от всего этого легче не стало...((
Еще одна тонкость, случайно поменял сигналы, т.е. data0out => asmi_mosi и sdoin => asmi_miso все скомпелировалось...правда смысла от этого мало))
Alezi
Ну вроде всему этому нашел решение: EPCS4: Compilation problem
Компиляция прошла успешно, теперь вопрос доступа к данным, т.е. собственно запись/чтение EPCS.
Есть ли разница какая EPCS подключена или нет?
В визарде к epcs_virtual_memory есть какие то настройки, пока не понял для чего...Типа "map code space in flash sector" и выбор из нескольких значений.
И в самом коде есть:
Код
PACKAGE epcs_virtual_memory_package IS

CONSTANT flash_sector_code_offset : INTEGER := 2;
CONSTANT flash_sector_code_size : INTEGER := 1;
CONSTANT flash_sector_data_offset : INTEGER := 4;
CONSTANT flash_sector_data_size : INTEGER := 1;
CONSTANT dp_avalon_addr_width : INTEGER := 16;
CONSTANT cp_avalon_addr_width : INTEGER := 16;
CONSTANT delay_counter_data : INTEGER := 2;
CONSTANT avalon_clk_is_too_fast : std_logic := '1';

END PACKAGE epcs_virtual_memory_package;

На что может влиять, например, flash_sector_code_offset?

Пока в ниосе читать или писать не получилось, использовал стандартные IOWR, IORD и через указатель. В окне ничего не выдает, а в дебугере пишет Connection reset by peer.
vadimuzzz
Цитата(Alezi @ Aug 4 2010, 09:34) *
На что может влиять, например, flash_sector_code_offset?

похоже на номера страниц для кода и данных (flash_sector_data_offset), соответственно.
размер, видимо, тоже в секторах исчисляется. проверить функционирование лучше сигналтапом или в моделсиме.
Alezi
Пробовал смотреть сигналтапом...Хотел найти эти сигналы, но увы...
Код
asmi_block : cycloneii_asmiblock
    port map(
              data0out => ASMI_MISO,
              oe     => '0',
              scein     => asmi_cs,
              dclkin     => asmi_clk,
              sdoin     => ASMI_MOSI
        );

Видны только ASMI_MISO и ASMI_MOSI.
В ниос дебугере наблюдаю также интересную картину, при просмотре памяти по адресу устройства (EPCS_VIRTUAL_MEMORY_CLASSIC_0_DATA_BASE 0x40000) при выполнении операции чтения наблюдаю картину:
Нажмите для просмотра прикрепленного файла
Похоже изменение данных в памяти идет как то спонтанно...((
При попытке что либо записать виснет окончательно...
Alezi
Кто нибудь использовал блок EPCS vitual memory? Он вообще работает? sad.gif
Пока решил использовать стандартную мегафункцию altasmi_parallel, есть ли возможность подключить ее в SOPC builder, чтобы отслеживать данные через Nios II IDE?
Alezi
Спасибо всем кто помогал... Все заработало smile.gif
vadimuzzz
Может статейку напишете, что и куда наливать?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.