Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование выводов LOAN IO на Altera SoC Cyclone V
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
COMA
Всем привет!

Разбираюсь с работой LOAN IO на своей плате. Задача - поморгать светодиодом посредством вывода HPS LOANIO.

Собрал систему с HPS, NIOS II и PIO.

У HPS сконфигурировал вывод LOANIO 48.
Выход LOANIO 48 подключен к выводу PIO.
PIO также подключен к обычному выводу FPGA.

HPS стартует с SD карты, на карту записан spl загрузчик.
После подачи питания, HPS выполняет spl загрузчик (выводится информация в консоль).
Далее я прошиваю FPGA и запускаю в режиме отладки программу, которая переключает состояние вывода PIO.

На отладке вижу, что светодиод который подключен к обычному выводу переключается, а светодиод подключенный к LOANIO 48 не меняет своё состояние (горит постоянно).

Возможно я что-то пропустил?


Прикладываю гланвый модуль проекта. Вырезал ненужное:

Код
module fpga (

    //loaner IOs
    inout           hps_gpio_LOANIO48,

    // FPGA
    // clock and reset
    input           fpga_clk_25,
    input           fpga_reset_n,

    // pio
    output          fpga_pio    
    );

    // wire instances of the 3 loan IO buses from Qsys instance
    wire    [66:0]  loan_io_in;
    wire    [66:0]  loan_io_out;
    wire    [66:0]  loan_io_oe;



    // loan_io    
    // cpu_led
    assign loan_io_out[48] = led_export;
    assign loan_io_in[48] = 1'b0;
    assign loan_io_oe[48] = 1'b1;
    
    assign fpga_pio = led_export;

    altpll_dev u0 (
        .rst            (~fpga_reset_n),
        .refclk         (fpga_clk_25),
        .outclk_0       (pll_clk_50),
        .locked         (pll_locked)
    );

    soc_system u1 (
        // HPS
        .hps_io_hps_io_gpio_inst_LOANIO48   (hps_gpio_LOANIO48),

        .hps_loan_io_in                     (loan_io_in),
        .hps_loan_io_out                    (loan_io_out),
        .hps_loan_io_oe                     (loan_io_oe),

        // FPGA
        .clk_50_clk                         (pll_clk_50),
        .reset_50_reset_n                   (pll_locked),
        
        .led_export                         (led_export),
    );
    
endmodule //fpga
serjj
hps_gpio_LOANIO48 сами назначили ножку в qsf или это какая то дефолтная нога? Spl пересобирали после первой компиляции проекта? Программа в процессоре вообще запускается (по jtag дает о себе знать)?
COMA
hps_gpio_LOANIO48 - это дефлотная нога, квартус сам назначает ноги HPS.
spl собрал заново после полной компилции проекта, когда сгенерировались новые файлы hps_isw_handoff. Я их предварительно удалил.
spl рабочий, выводит отладочную информацию в терминал.
По jtag программа в NIOS II дебажится прекрасно - светодиод подключенный к выводу FPGA моргает.

Подозреваю, что кроме spl необходим убут.

P.S. Остаются неясные для меня моменты - что делает с HPS spl, когда не находит убут или приложение. Где все таки конфигурируются выводы HPS - в spl или в убуте.
serjj
Цитата
Подозреваю, что кроме spl необходим убут.

P.S. Остаются неясные для меня моменты - что делает с HPS spl, когда не находит убут или приложение. Где все таки конфигурируются выводы HPS - в spl или в убуте.


Убут нужен для линукса. Bare metal приложение требует только spl. Ноги конфигурируются в spl (pinmux). То, что он рассказывает в терминал что-то, еще не значит что все хорошо - у меня было такое, что в терминал выводится, а что-то конкретное не работало. 1 раз было, что spl не знал про qspi контроллер, а другой - конфликт на ноге, которая нужна интерфейсу. Ну вы мои темы видели про эти проблемы rolleyes.gif

Я вот только не понял, у вас программа в ниосе, которая управляет светодиодом или в hps? Если используете дефолтную ногу проца, то подозреваю, что в проце. Вы ее по jtag заливаете или она у вас на sd карте рядом с preloader'ом лежит?
COMA
На SD карте только spl. Больше ничего нет.

Программа запущена на NIOS, управляет выводом PIO - led_export.
Вывод PIO -led_export подключается к hps_gpio_LOANIO48 и к выводу FPGA - fpga_pio.
Получается одним светодиодом я управляю через hps_gpio_LOANIO48, а другим через fpga_pio.
Светодиод подключенный к fpga_pio переключается, а подключенный к hps_gpio_LOANIO48 нет.

Выше я привел код.

Может дело в spl?
Он ищет приложение которе должен запустить, не находит его и портит выводы?
Вотчдог в настройках spl отключен.
serjj
У меня сильное предчувствие, что здесь что-то не так. Разве можно ножками HPS рулить со стороны FPGA? Вы можете переназначить некоторые интерфейсы что бы HPS использовал ножки FPGA. Но насколько мне известно обратная операция недопустима. Единственное исключение - SDRAM bridge, но и то он даёт только интерфейс к контроллеру памяти, который находится в HPS.

Выложите плиз qsys файл, тут нужно глядеть настройки HPS компонента и как там что соединено.
tvcam
Ножками HPS рулить со стороны FPGA можно! У меня так сделано.
В выше выложенном коде явных ошибок не нащёл. led_export подключен к HPS, а не как написано к НИОСу.
Только у меня имена длиннее и везде присутствует "wire".
...
inout wire hps_io_hps_io_gpio_inst_LOANIO49,
...
sopc_0 sopc_0_inst ( // это HPS

.hps_io_hps_io_gpio_inst_LOANIO49 (hps_io_hps_io_gpio_inst_LOANIO49),

.hps_0_h2f_loan_io_in (loan_in), // <-- [66:0] Connect to FPGA logic
.hps_0_h2f_loan_io_out (loan_out), // <-- [66:0] Connect to FPGA logic
.hps_0_h2f_loan_io_oe (loan_oe) // <-- [66:0] Connect to FPGA logic If '1' , then it is an output

);

wire [66:0] loan_in,loan_out,loan_oe;

assign loan_oe[49] = 1'b1;
assign loan_out[49] = MigSveto[25];

В qsys в hps в пинах должна быть нажата кнопка LOANIOxx , где хх ваш пин.
COMA
Цитата(serjj @ Mar 5 2015, 20:10) *
У меня сильное предчувствие, что здесь что-то не так. Разве можно ножками HPS рулить со стороны FPGA? Вы можете переназначить некоторые интерфейсы что бы HPS использовал ножки FPGA. Но насколько мне известно обратная операция недопустима. Единственное исключение - SDRAM bridge, но и то он даёт только интерфейс к контроллеру памяти, который находится в HPS.

Выложите плиз qsys файл, тут нужно глядеть настройки HPS компонента и как там что соединено.


Завтра на работе прикреплю sm.gif

tvcam, у меня примерно также:

soc_system u1 () // система в QSYS содержит в себе ниос и hps

.led_export (led_export), // Это выход из системы с NIOS

assign loan_io_out[48] = led_export; // соединяем с выводом led_export которым управляет NIOS II
assign loan_io_in[48] = 1'b0;
assign loan_io_oe[48] = 1'b1; // Конфигурируем на выход

assign fpga_pio = led_export; // led_export - дополнительно выводим на обычный вывод FPGA

кнопка LOANIO48 нажата.

tvcam, с чего у Вас грузится hps?

P.S. Попробую явно объявить wire.
tvcam
COMA, это осталось последней проблеммой для сдачи заказа к которой я не притрагивался, пока грузится прямо из компьютера из DS-5.
FPGA зашита, сброс через отключение питания=> FPGA работает => затем загрузка HPS с компа по JTAGу.

.led_export (led_export), // Это выход из системы с NIOS
Теперь понятно, но зачем вам NIOS, пользуйтесь HPS, а всё что подключено к ниосу цепляйте к HPS через авалон.
COMA
tvcam, NIOS используется для своих задач, HPS - для своих.
serjj
Цитата
Завтра на работе прикреплю

Ждём rolleyes.gif мне уже стало интересно, не думал, что можно к ногам HPS из FPGA залезть.

Цитата
это осталось последней проблеммой для сдачи заказа к которой я не притрагивался, пока грузится прямо из компьютера из DS-5

Ох зря не притрагивались, там столько подводных камней... Если будут проблемы с этим пишите в личку, в январе много с этим ковырялся, получил пару рабочих конфигураций.
tvcam
serjj, Вот по этому и не притрагивался , уверен что там много подводных камней. Спасибо за предложение, воспользуюсь. Я и так пол года осваивал этот HPS.
В конце концов мне он надоел со своими глюками и не мерянным софтом. К примеру чтобы заработал RS232 нужно скомпилировать в СИ 1000 строк, подключить кучу .h файлов, чума. Вот тут меня достало и я завёл нужные мне ноги RS232, SPI и Ethernet от HPS прямо в FPGA, а там на шине авалон работают проверенные блоки, а HPS использую как NIOS.
Да, только на эти ноги невозможно положить констрейны, он не знает время от триггера FPGA до Пина HPS, и там только простые входы и выходы (нет триггеров в пинах).
serjj
Цитата
В конце концов мне он надоел со своими глюками и не мерянным софтом. К примеру чтобы заработал RS232 нужно скомпилировать в СИ 1000 строк, подключить кучу .h файлов, чума. Вот тут меня достало и я завёл нужные мне ноги RS232, SPI и Ethernet от HPS прямо в FPGA, а там на шине авалон работают проверенные блоки, а HPS использую как NIOS.

Ну RS232 в hwlib есть, так что должно быть все норм. Я из hwlib пробовал qspi, timer, nand, watchdog, mmu. Всё работает, пару раз только нужно было кое что ручками править в исходниках. Проблема с тем, чего нет в hwlib. Вот например EMAC. Я начинал разбираться с драйвером для этого дела, пока получилось только достучаться до контроллера и до физики через MDIO. За основу брал линуксовый драйвер для designware с выкидыванием кучи лишнего. Обмен я так и не поднял, переключился на более нужные задачи и оставил все это до лучших времен. Там нужно с DMA заморачиваться и с динамическим выделением памяти, на этом мой непрограммистский мозг устал и я пошел на верилоге писать rolleyes.gif .
COMA
Прикладываю проект.
serjj
Ну я не знаю! laughing.gif
2 варианта - попробуйте перейти на 14.1 квартус
или еще вот есть на альтере описание одной фичи
COMA
Спасибо, попробую на 14.1.
tvcam
СОМА, посмотрел ваш проект, ошибок не нашёл. Нужно смотреть софт HPS, поднимаются ли там мосты. И добавьте Lightweight
HPS-to-FPGA Bridge и PIO к нему, опять же чтобы посмотреть что мосты включаются, всё равно что то потом придётся приделывать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.