Pull to refresh
344
47
Юрий Панчул / Yuri Panchul @YuriPanchul

Проектировщик CPU, GPU, сетевых микросхем

Send message
Если вы хотите послать своих детей в Новосибирск, вам нужно написать емейл организаторам

По вопросам можно обращаться по адресу info@school.iis.nsk.su (Татьяне Ивановне Тихоновой)

Для взрослых есть взрослые семинары, один из них организуется в этом году в Томске — nanoandgiga.com/ngc2017/digital-design
*** ИМХО преимущества знания и программирования на ПЛИС также неочевидны по сравнению с ардуиной. ***

ПЛИС и Ардуино лежат в столь же разных областях, как учебник правил дорожного движения и учебник по конструированию автомобилей. Сколько бы вы не водили машину, вы не поймете, как работает ее двигатель. С Ардуиной люди пишут программу, с ПЛИС они конструируют электронную схему. Программируя Ардуино, невозможно понять, как сконструировано само Ардуино, а вот реализуя примеры на ПЛИС, можно за несколько итераций самому сконструировать простой процессор, подобный тому, который находится в Ардуино.

Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция

https://habrahabr.ru/post/250511/

и Введение в дизайн харвера микросхем для тех программистов, которые этим никогда не занимались

http://panchul.com/2011/07/28/basics-of-hardware-design-for-software-engineers/


Описание что такое ПЛИС из первого текста:

… внутри FPGA по сути находится конструктор из тысяч логических элементов наподобие элементов в K155ЛА3, но в FPGA их можно соединять не руками с помощью проводов, а меняя содержимое специальной памяти, биты которое соединены с мультиплексорами, которые меняют логические функции ячеек FPGA и соединения между ними:


Описание RTL2GDSII flow — маршрут проектирования современных массовых микросхем, к которому идет путь от упражнения с ПЛИС (из второго текста):

В последние 25 лет дизайн чаще всего пишется на языке Verilog (в Европе и у военных – VHDL), после чего специальная программа (logic synthesis) превращает дизайн в граф из проводов и логических примитивов, другая программа (static timing analysis) сообщает дизайнеру, вписывается ли он в бюджет скорости, а третья программа (place-and-route) раскладывает этот дизайн по площадке микросхемы.

Когда дизайн проходит все этапы: кодирование на верилоге, отладка, верификация, синтез, static timing analysis, floorplanning, place-n-route, parasitics extraction и т.д. – получается файл под названием GDSII, который отправляют на фабрику, и фабрика выпекает микросхемы. Самые известные фабрики этого типа принадлежат компании Taiwan Semiconductor Manufacturing Company или TSMC.

Ну например там была проблема для префетчера в L2 кэше, он дистанционно помогал ее отлаживать; далее он давал байкаловцам рекомендации по максимизации производительности с помощью неких установок в Cop0 и других регистрах; наконец (это не только про байкаловцев но и про других пользователей ядер MIPS) он написал что-то в ядре Линукса.
Он имеет в виду ставить в loweest-power сенсоры для IoT. Ставить линукс в хабы для IoT или другие устройства для IoT инфраструктуры — это нормально
Сама плата ничем не плоха, но вот подход «we simplify FPGA design by providing easy to use drag and drop circuit libraries» является спорным, причем буквально спорным, т.е. я лично спорил на этот счет с менеджером образовательных программ нашей компании в UK Робертом Оуэном. Я ему говорю «ни мы [процессорная группа MIPS Business Unit в Imagination Technologies, ни наши промышленные клиенты, не строят системы на кристалле и IP блоки, собирая их мышкой на экране из кубиков». Он «да ты ничего не понимаешь, студентам нравится возить мышкой по экрану».

Дело в том, что кажущаяся легкость работы с GUI в данном случае — обманчива. Проще написать a = b & (c | d), чем нарисовать это же мышкой на экране. А с даже небольшим усложнением дизайна (простой процессор) писать код на верилоге становится на два порядка поще, чем делать мышкой schematic entry. Порог с верилогом выше, но ненамного, особенно если сначала смотреть на схемы, синтезируемые из кода — см. напр. http://www.silicon-russia.com/public_materials/2016_11_04_one_day_mipsfpga_connected_mcu_materials_public_for_the_website/06_optional_introductory_materials_if_necessary_for_the_audience/08_quizes/quiz_4_synthesis_1.html
С комбинационной логикой проще написать a = b & (c | d), чем нарисовать это же мышкой на экране. С конечными автоматами — диаграммы переходов состояний прямо в конфигурацию ПЛИС не синтезируются (хотя такие тулы были в 1990-е), а вот код позволяет получить работающее железо через синтез и конфигурацию ПЛИС-а.
Если логику привязать к конкретным поделками на макетной плате, она лучше усвоится, запомнится
Приведите пример языков которые вам нравятся и которые содержат поддержку прерываний на уровне языка (не библиотеки и не расширения)
Это бы коммента не вам, а товарищу выше
Приведите пример языков которые вам нравятся и которые содержат поддержку прерываний на уровне языка (не библиотеки и не расширения)

это был коммент не вам а товарищу выше
Несомненно, но так как сам я работаю в части индустрии, где делаются ASIC-и для массовых устройств, и ПЛИС используются у нас для отладки, то мне такой перекос простителен — я смотрю на рост прежде всего этой индустрии. Понятно, что возможности ПЛИС для DSP, телекоммуникационных устройств, криптографии, малосерийных специализированных вычислителей тоже еще полностью не реализованы и это тоже создает рынок работ.
Графика на рисунке 3.30 нагляднее, когда ваш мозг уже связал ее с неким процессом во времени (сканировании нулей и единичек улиткой или, что эквивалентно, нажимании на кнопку на FPGA с работающим на частоте 0.5 герца тактовым сигналом). Да, тогда схема очевидна. Но если мозг не вопринимает диаграмму состояний как процесс во времени, то диаграмма будет восприниматься как абстрактная картинка. И код — способ реализации диаграммы состояний в реальном железе, работающем во времени.

Ну ладно, я вашу позицию понял. Она может быть верна, но чтобы сделать окончательный вывод, мне нужно сделать чистый эксперимент на детях. Вот с этим конечным автоматом (и вообще классом автоматов для распознавания последовательностей), а также простым процессором. Что я и собираюсь сделать.
Ну давайте возмем конкретику. Ниже — простейший конечный автомат. Схема и код на SystemVerilog. Вы утверждаете, что схема более наглядна чем код? Или что схема будет понята как что-то конкретное, а не абстрактное без «прощупывания» этого на FPGA плате?





Код на Verilog из которого синтезируются схемы выше:

http://www.silicon-russia.com/public_materials/2016_11_04_one_day_mipsfpga_connected_mcu_materials_public_for_the_website/06_optional_introductory_materials_if_necessary_for_the_audience/06_exercises/exercise_3_counter_shift_fsm.html

// Smiling Snail FSM derived from David Harris & Sarah Harris

module pattern_fsm_moore
(
    input  clock,
    input  reset_n,
    input  a,
    output y
);

    parameter [1:0] S0 = 0, S1 = 1, S2 = 2;

    reg [1:0] state, next_state;

    // state register

    always @ (posedge clock or negedge reset_n)
        if (! reset_n)
            state <= S0;
        else
            state <= next_state;

    // next state logic

    always @*
        case (state)

        S0:
            if (a)
                next_state = S0;
            else
                next_state = S1;

        S1:
            if (a)
                next_state = S2;
            else
                next_state = S1;

        S2:
            if (a)
                next_state = S0;
            else
                next_state = S1;

        default:

            next_state = S0;

        endcase

    // output logic

    assign y = (state == S2);

endmodule

//----------------------------------------------------------------------------

// Smiling Snail FSM derived from David Harris & Sarah Harris

module pattern_fsm_mealy
(
    input  clock,
    input  reset_n,
    input  a,
    output y
);

    parameter S0 = 1'b0, S1 = 1'b1;

    reg state, next_state;

    // state register

    always @ (posedge clock or negedge reset_n)
        if (! reset_n)
            state <= S0;
        else
            state <= next_state;

    // next state logic

    always @*
        case (state)

        S0:
            if (a)
                next_state = S0;
            else
                next_state = S1;

        S1:
            if (a)
                next_state = S0;
            else
                next_state = S1;

        default:

            next_state = S0;

        endcase

    // output logic

    assign y = (a & state == S1);

endmodule


В построении простого процессора появляется как минимум одна идея такого же уровня фундаментальности, как и рекурсия в софтвере — это конвейерная обработка.

Ну ладно, отложим процессор в сторону — это действительно не для всех.

Но вы согласны с утверждением: «концепции переменной в программе, массивов, циклов while и for и подпрограмм — это концепции одинаковой степени фундаментальности, как и концепции логического элемента И-ИЛИ-НЕ, элементарного хранилища бита информации (D-триггера) и конечного автомата»?

Насчет языка SystemVerilog — его подмножество можно объяснить за пару уроков. Писать логику лучше на нем. А как еще? Картинками (схемами и диаграммами состояний)? Ну это как изучать программирование не на Паскале или Питоне, а блок-схемами, кстати, так пытались делать для детей (к меня есть детская книжка начала 1980-х годов с блок-схемами).
Работ в России мало потому что в России есть только несколько команд, где это востребовано — http://elvees.ru http://milandr.ru http://module.ru http://mcst.ru http://baikaleletronics.ru и еще несколько. Это проблема курицы и яйца. Чтобы это развить, нужно иметь кучу инженеров с данными skills.

Или вы может вообще считаете, что в России не нужно дизайнить своих чипов, а только программировать готовые чипы от Intel, Apple, MediaTek, Broadcom, Qualcomm, Microchip и т.д. и т.п.?
Это надежды не «начала века», а еще 1973 года (виртуальная машина p-кода на которой исполняется Паскаль — https://en.wikipedia.org/wiki/P-code_machine
Интересно, почему для всех нужно давать концепции переменной в программе, массивов, циклов while и for и подпрограмм (включая рекурсию) — а вот концепцию логического элемента И-ИЛИ-НЕ, элементарного хранилища бита информации (D-триггера) и конечного автомата, который изменяет состояние по тактовому сигналу — это не для всех? Вы можете написать в развернутой форме аргументы?
Всем может быть полезно ознакомится с фундаментальными идеями, для картины мира. А тем кто особо заинтересуется — можно построить на FPGA простое микропроцессорное ядро, это несколько сотен строк кода на Verilog. См. глава 7 вот такой книжки, которая доступна старшим школьникам: https://habrahabr.ru/post/317558/

Information

Rating
131-st
Location
Sunnyvale, California, США
Date of birth
Registered
Activity