akhcelo (akhceloo) wrote,
akhcelo
akhceloo

Categories:

Панчул: Мы с Алексом Белицем спортировали MIPSfpga на плату Terasic DE0-CV с Altera Cyclone V

Продолжаю собирать в свой ЖЖ материалы по MIPSfpga от Панчула, и не только от него.
---------------------------------------------
Оригинал взят у panchul в Мы с Алексом Белицем спортировали MIPSfpga на плату Terasic DE0-CV с Altera Cyclone V
Мы с Алексом Белицем abelits спортировали MIPSfpga на плату Terasic DE0-CV с Altera Cyclone V. Крутизна этой платы заключается в том, что она дешевая ($150) и ее просто импортировать в Россию из Тайваня (отсюда).





Вейвы от чего на экране моего лаптопа?

Synopsys VCS/DVE
1(11.1%)
Cadence IUS/SimVision
1(11.1%)
Mentor ModelSim/Questa
5(55.6%)
Xilinx Vivado
0(0.0%)
Icarus / GTKWave
1(11.1%)
Другое / пояснить в комментариях
1(11.1%)

Платы с какими FPGA есть у вас на руках или доступны на работе или на учебе?

Xilinx Virtex-7
1(3.6%)
Xilinx Kintex-7
2(7.1%)
Xilinx Artix-7
1(3.6%)
Xilinx Virtex-6
1(3.6%)
Xilinx Spartan-6
6(21.4%)
Xilinx Spartan-3
6(21.4%)
Другие Xilinx - пояснить в комментариях
2(7.1%)
Altera Stratix
0(0.0%)
Altera Arria
0(0.0%)
Altera Cyclone V
0(0.0%)
Altera Cyclone IV
5(17.9%)
Altera Cyclone III
0(0.0%)
Altera Cyclone II
2(7.1%)
Другая Altera - пояснить в комментариях
1(3.6%)
Другие FPGA - Lattice и т.д. - пояснить в комментариях
1(3.6%)

Через какую хрень вы готовы грузить на плату программы для рабоющего на ней soft core?

Через BusBlaster / OpenOCD
4(10.3%)
Через USB - UART - DMA - custom logic
13(33.3%)
Через Xilinx-овую тулзу (объяснить как)
3(7.7%)
Через Altera-вскую тулзу (объяснить как)
2(5.1%)
Загружать с SD-карты
10(25.6%)
Другое дешевое решение не требующее пересинтезирования системы для каждой программы(пояснить в комментариях)
4(10.3%)
У меня много лишнего времени, я готовить хардкодить программу прямо в память во время синтеза системы на верилоге
2(5.1%)
Я московская журналистка. Правильно ли я поняла, что Панчул еще на один шаг ближе к приезду в Россию в октябре?
1(2.6%)

-----------------------------------------
(А вот результаты опроса: http://www.livejournal.com/poll/?id=2018182&mode=results - забавно, загляните)
-----------------------------------------
Сюда же прикрепляю справку-комментарий к этому посту от abelits (которого также френжу благодаря этой наводке от Панчула)
-----------------------------------------
Comments:
[User Picture] From: abelits
2015-07-29 05:25 pm
Отслеживать

(Link)

> А не посоветуете какую-нибудь хорошую, годную литературку на этот счёт?

Основной "классический" текст по драйверам в Linux'е и механизмам ядра, на которые они полагаются -- "Linux Device Drivers, 3rd edition" или LDD3. Вот здесь: https://lwn.net/Kernel/LDD3/ , здесь http://www.oreilly.com/openbook/linuxdrive3/book/ или в бумажном и e-book виде здесь: http://www.amazon.com/Linux-Device-Drivers-3rd-Edition/dp/0596005903

Некоторые части несколько устарели, но всё важное на месте. Исходный текст вручную не аннотировался кроме как комментариями, но очень хорошо проиндексирован утилитой, специально для этой цели созданной: http://lxr.sourceforge.net , результат находится на http://lxr.free-electrons.com . Прошу обратить внимание на "линейку" версий, на этом сайте довольно удобно отслеживать историю изменений, что собственно проливает свет на то, что не покрыто в LDD3. Есть документация в самом дереве Linux'а: http://lxr.free-electrons.com/source/Documentation/ , однако покрытие и качество там очень неровные, есть очень подробные описания подсистем и интерфейсов, есть заметки урывками.

> Вот есть, допустим, сетевая карта в компьютере. Из под ОС с ней работа - в виде сокета. А как быть в случае с FPGA? Вот есть IO FPGA PORT. Я принимаю с него Ethernet-Frame. Я должен его положить в оперативную память устройства, а потом как-то сообщить ОС, что он в этой памяти лежит? По сути мне надо аккурат написать этот самый сокет, получается.

Работа сетевых интервейсов/устройств с сокетами производится через поддержку операций над socket buffers (skb), что описано, заодно с установкой параметров и прочими деталями работы сетевого драйвера в главе 17 LDD3. Сами по себе сокеты реализованы независимо от драйверов.

Устройство реализованное в FPGA, или внешний чип, подключённый к FPGA через какой-либо интерфейс, с точки зрения процессора -- периферия, подключённая к его шине, то есть, то же самое, что и в традиционном компьютере.

> 1. Я сам Си знаю лишь на уровне "прошивка для микроконтроллера". Тоесть я на Си перешёл после ассемблера (в котором работа с регистрами - обычное дело), а потому для "больших компьютеров" писать не умею - там своя стезя.

В ядре Linux'а можно увидеть многое привычное по микроконтроллерам, однако интерфейсы для доступа к регистрам единообразны между аппаратными платформами, и всё должно быть работоспособно при одновременной работе нескольких ядер или переключения контекста при обработке прерываний и таймера, для чего существует целый набор стандартных механизмов. Привычные по микроконтроллерам "давайте выключим на всё время работы функции прерывания и будем делать что попало", "а вот у нас набор указателей volatile, соответствующих регистрам" не проходят.

> 2. Коллеги, кто ПОВТ заканчивал - те пишут на С++ и на ассемблер смотрят с ужасом (не умеют они толком работать на уровне регистров, а работают на уровне API)

В ядре Linux'а C++ нет, ассемблер используется только в крайних случаях, и не рекомендуется в коде, не специфичном для конкретной архитектуры процессора, а C - подавляющее большинство всего кода и практически только он в драйверах периферии. Из-за этого и возникает этот эффект "заработала шина -- значит, будут работать драйверы".

В пользовательских программах (то есть, выполняющихся не в ядре, а в userspace) C, C++ и Python вполне популярны в различных сочетаниях.

> А меня именно что регистровый уровень интересует применительно ко "взрослой" ОС типа Linux. Кто, куда, кому, как и по какому интерфейсу должен что передавать. Так что если бы кто ткнул носом где посмотреть решение подобной задачи - был бы весьма признателен.

Регистры в Linux'е видны из драйверов, то есть, рекомендую прочитать LDD3. С точки зрения пользовательской программы Linux -- традиционная Unix-подобная система. В данный момент Linux можно считать "среднестатистическим UNIX'ом" несмотря на формальное отсутствие у него торговой марки "UNIX". До Linux'а долгое время "среднестатистическим UNIX'ом" был Solaris. Всё относящееся к основам работы с Unix-подобными системами из userspace можно найти в книгах Ричарда Стивенса (W. Richard Stevens).

Edited at 2015-07-29 17:28 (UTC)
From: andrey_yurin
2015-07-30 06:11 am
Отслеживать

(Link)

Огромное спасибо за ликбез! Будем теперь грызть гранит науки, пока зубы не сотрутся. Жаль, что у нас никто ничего подобного в университетском курсе никогда не рассказывал.
(Ответить) (Parent) (Thread)
Tags: de0-nano-soc, panchul, ЖЖ-френды, электроника
Subscribe
promo akhceloo march 17, 2018 23:55 8
Buy for 100 tokens
Социальный Капитал, говорите? А Олигархического Коммунизма не желаете? Пусть повисит пока здесь. Может, кто-то из рядовых коммунистов догадается, во что переродилась верхушка их любимой коммунистической партии Зюганова.
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments