?

Log in

No account? Create an account
Вопрос на Хабре: Какое ваше мнение о pyhdl и cx с точки зрения обучения? - Юрий Панчул [entries|archive|friends|userinfo]
Money can buy bandwidth. Latency requires bribing God.

[ website | My Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Вопрос на Хабре: Какое ваше мнение о pyhdl и cx с точки зрения обучения? [Feb. 25th, 2015|06:24 am]
Yuri Panchul
Задали вопрос на Хабре:

http://habrahabr.ru/post/250511/

farcaller:

Какое ваше мнение о pyhdl и cx с точки зрения обучения?

См.

https://bitbucket.org/blubberdiblub/pyhdl/src/2fb68fd652cf4f3e3b3384e4e425d0df91c9d603/tests/test_module.py?at=master

и сходную попытку

http://dspace.mit.edu/bitstream/handle/1721.1/41543/219728438.pdf

http://cx-lang.org/


panchul:

По поводу Cx - я знаком с двумя десятками подобных тулов, так как сам был автором подобного тула еще в середине 1990-х годов - см. мой патент на эту тему - http://www.patents.com/us-6226776.html

С точки зрения обучения ценность данного класса тулов имхо сомнительная. Дело в том, что с моей точки зрения студента нужна научить двум ключевым концепциям - конечным автоматам и конвейерности, а тулы типа Cx скрывают конечный автомат (они извлекают его их софтверноподобной последовательности действий), а также делают конвейер не-наглядным (если конвейерность вообще поддерживается в Cx).

Что касается pyhdl, я посмотрел его и он показался мне очень многословным - слишком много текста, больше, чем в Verilog. Кроме этого, я подозреваю, что у него могут быть пролемы с временем симулирования на нетривиальных дизайнах. Вообще я видел несколько попыток сделать HDL средствами других языков (включая даже Lisp), но ни один из них не получил распостранение кроме SystemC, который тоже RTL-дизайнерам не нравится, но был навязан индустрии массированным маркетингом от Synopsys в течение многих лет.
LinkReply

Comments:
[User Picture]From: modest_so_zvezd
2015-02-25 04:29 pm (UTC)

Хорошо бы ещё разъяснить что такое pyhdl

(Reply) (Thread)
[User Picture]From: panchul
2015-02-25 05:48 pm (UTC)
Попытка построить языковое средство описания поведения цифровой схемы, на основе скриптового языка программирования общего назначения Python.

См.

https://bitbucket.org/blubberdiblub/pyhdl/src/2fb68fd652cf4f3e3b3384e4e425d0df91c9d603/tests/test_module.py?at=master

и сходную попытку

http://dspace.mit.edu/bitstream/handle/1721.1/41543/219728438.pdf


Edited at 2015-02-25 05:53 pm (UTC)
(Reply) (Parent) (Thread)
[User Picture]From: techwork
2015-02-28 10:40 pm (UTC)
Да Питон не подходит для таких задач ... (Holy war но на мой взгляд это вообще тупиковый язык как и его близнец руби - хочешь не хочешь а понимать то что ты пишешь ты должен, и желательно синтаксис всё таки знать и правильно применять, никаких дополнительных преимуществ в скорости разработки эти два нитудыма нисюдыма не дают, а код получается раздутый и .. как бы это сказать ... грязный, не оптимальный. так что java c# если для общих задач и скорость разработки важна, а если есть время то С++, для специализированных задач - специализированная система комманд и синтаксис должны быть)
(Reply) (Parent) (Thread)
[User Picture]From: oppad1
2015-02-25 04:39 pm (UTC)
Synopsys от SystemC отказалась в 2005, от синтеза, а для симуляции это просто С++.

по-моему, упускаете момент, что SystemC (+gcc) и pyhdl являются [честно] бесплатными, что немаловажно для многих стран.

ну и мое мнение - на 1-2-ом курсе надо учить FSM и т.п., а к завершению обучения студент должен знать SV, и иметь представление об UVM (то есть классы, фабрики, покрытие, constraint based random методологию и т.п., а не RTL) и должен бы уметь работать над реальными задачами.


Edited at 2015-02-25 04:40 pm (UTC)
(Reply) (Thread)
[User Picture]From: panchul
2015-02-25 05:45 pm (UTC)
Вы предлагаете учить схемотехнику на уровне логических элементов, после чего SV с UVM - но без синтезируемого RTL? Но это имхо какая-то странная конструкция обучения, как пищеварительный тракт с ртом, пищеводом и кишками - но без желудка. Это точно то, что вы хотите? Я могу перечислить сразу несколько проблем, которые из этого выходили бы.
(Reply) (Parent) (Thread)
[User Picture]From: oppad1
2015-02-25 10:03 pm (UTC)
нет. я считаю, что было бы хорошо, чтобы молодой специалист имел представление о современном производственном процессе, а не на 40-20 лет устаревшем. как при этом организовывать учебный процесс - я не знаю.

описание rtl это маленькая брошюрка, если схемотехника пройдена. и в моей практике - хороший программист может писать хороший rtl практически сразу (спасибо, конечно, современным средствам синтеза), а у схемотехников часто видел предел сложности :), ну то есть glue logic на hdl он описать может, а Витерби декодер или АЛУ уже нет - парадигма мышления неправильная :)
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-02-25 10:42 pm (UTC)
*** имел представление о современном производственном процессе ***

Я вас не понимаю. Говорить, что UVM современнее чем RTL, это как говорить что в автомобиле трансмиссия современнее чем поршни двигателя.

Это просто разные задачи в современном производственном процессе. Я работаю в группе разработки микропроцессора MIPS I6400 (см. http://blog.imgtec.com/mips-processors/meet-mips-i6400-warrior-cpu-for-64-bit-computing-revolution ) - мы на переднем краю в этом смысле.

*** хороший программист может писать хороший rtl практически сразу (спасибо, конечно, современным средствам синтеза) ***

У программиста сначала например много слоев логики получается - плохо для static timing analysis. Кроме этого программисту трудно перестроить мозг на микроархитектуру (конвейерное выполнение).

Далее, вы считаете, что выучить библиотеку классов UVM, coverage based constrained random verification methodology и т.д. - это сложнее, чем наработать интуицию про static timing analysis в RTL и микроархитектурные решения?

Я не согласен. Библиотека UVM - это много материала в документации, но концептуально она несложная (я активно использую UVM). TLM, который идет в придачу к UVM - вообще кривая идея имхо (я наблюдал ее с момента зарождения в конце 1990-х).
(Reply) (Parent) (Thread)
[User Picture]From: oppad1
2015-02-26 12:42 pm (UTC)
rtl пишет один человек, а тестбенч к нему 10 чел. то есть потребность в специалистах разная.
ну и как правило, после ВУЗа обычно предлагают верификацией заниматься, а по мере "развития", можно и в писатели переходить.

ну как может быть разное кол-во слоев логики при одинаковом числе входов? синтезатор находит оптимальную схему, независимо от того в assign-ах она описана или в always_comb с if и for и кучей "ненужных" переменных

да, нужно уметь писать констрейны и уметь "вертеть ручки" у синтезатора, но это мало соотносится со схемотехникой

то есть это просто такое view - кому-то удобнее мыслить схемотехникой, то есть сразу создавать комбинаторную схему (которая ес-сно, будет заменена синтезатором на эквивалентную, скорее всего, совсем другую структурно) или мыслить поведенческой моделью, то есть как программист
ну и я написал, что в первом случае сложность для мозгов выше, поэтому сложные конструкции так описывать сложнее

раз UVM пользуете, то умеете мыслить как программист :) ну и мы TLM не применяем (и соответственно с UVM тоже мало пользуем), так как не сетевые протоколы имплементируем, а обработку сигналов

(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-02-27 05:34 pm (UTC)
Я полностью согласен с вами, что чтобы писать код внутри combinational cloud, большого ума не надо, как и для constrains, но вы в этой ветке начисто упустили микроархитектуру - планирование стадий конвейера, процессорные stalls, forwarding, scoreboarding итд.

Ни UVM, ни чистая схемотехника этого не содержат. В какой-то момент студенту желательно написать свой конвейерный процессор, а также имхо штучки типа кэша и для продвинутых студентов простую реализацию MESI протокола для многоядерных систем .

Процессор на верилоге студенты строят в частности в книжке Digital Design and Computer Architecture, Second Edition, 2013 by David Harris and Sarah Harris, которая через ~месяц появится бесплатно в электронном виде на русском языке (этот перевод спонсорировала наша компания):

последовательный:

Screenshot 2015-02-27 09.31.38

конвейерный

Screenshot 2015-02-27 09.35.34


Edited at 2015-02-27 05:36 pm (UTC)
(Reply) (Parent) (Thread)
[User Picture]From: oppad1
2015-02-27 06:13 pm (UTC)
учить - дело достаточно сложное, чтобы там не говорила народная мудрость :)
я немного в МФТИ вел лабы и немного в МАИ (но там не по HDL/RTL/...) и понял, что учить я не умею.

в рамках спора : все равно это теория, и без wireload модели или, как сейчас модно, предварительного размещения правильно регистры не расставишь. то есть либо итерации синтеза, либо разрешить синтезатору двигать логику через регистры.

но естественно - студент должен понимать, что такое конвеер - ктоже будет спорить с этим
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-02-27 06:26 pm (UTC)
*** все равно это теория, и без wireload модели или, как сейчас модно, предварительного размещения правильно регистры не расставишь. то есть либо итерации синтеза, либо разрешить синтезатору двигать логику через регистры. ***

Несомненно. Harris & Harris - это вводный учебник, потом на это накручивается много чего, UVM, floorplanning, retiming и т.д. и т.п. на более старших курсах.
(Reply) (Parent) (Thread)
[User Picture]From: techwork
2015-02-28 10:58 pm (UTC)
Спасибо за книжку
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-02-25 06:05 pm (UTC)
*** по-моему, упускаете момент, что SystemC (+gcc) и pyhdl являются [честно] бесплатными, что немаловажно для многих стран. ***

Mentor ModelSim (Questa) тоже имеет бесплатную студенческую версию с огранчением 10,000 statement-ов Verilog-а, что более чем достаточно для студенческих проектов, даже для проектов с небольшими индустриальными процессорными ядрами - http://www.mentor.com/company/higher_ed/modelsim-student-edition

Кроме этого, если дизайн вылазит за пределы 10,000, симулятор не останавливается, а просто начинает работать медленно все-таки бесплатная версия).


У Xilinx и Altera бесплатные версии тоже более чем достаточны для многобразных студенческих проектов, даже с небольшими индустриальными процессорными ядрами.
(Reply) (Parent) (Thread)
[User Picture]From: oppad1
2015-02-25 09:42 pm (UTC)
мне питон очень нравится - лучший скриптовый язык, что я знаю, но pyhdl я никогда не смотрел. SystemC пробовал в те времена, когда еще не было SV, а после только для высокоуровневых моделей. то есть могу сказать, что это не мои инструменты.

но к преимуществам для продвинутых студентов я бы отнес отрытый код, то есть возможность копаться во внутренностях.

------

да, есть и бесплатные тулзы Icarus и еще что-то, я давно уже не интересовался, но когда-то запускал - работают, и опять же у нас и китайцев есть торенты, а там студенческие программы, то есть индустрию pyhdl-ю, думаю, не победить, и если уж речь об проф. образовании, то ни pyhdl, ни SC в обязательную программу вносить не нужно
(Reply) (Parent) (Thread)
[User Picture]From: Valeriy Shunkov
2015-02-26 10:27 am (UTC)
На первом-втором курсе студентов учат математике и физике с целью отсева тех, кто поступил случайно, и вбивания в головы неслучайных хоть каких-то базовых знаний.
В лучшем случае основы дискретной математики можно в это время давать.
(Reply) (Parent) (Thread)
[User Picture]From: oppad1
2015-02-26 11:40 am (UTC)
может ужасную вещь скажу - но нужно отказываться от "оверквалифая". писание hdl и его верификация занятие не научное, то есть этим может заниматься выпускник колледжа (ПТУ по старорежимному). я много сотрудничаю с восточными конторами при производстве микросхем, при этом считаю тамошних инженеров достаточно квалифицированными (скажем из 4-х tape-out чипов на 10МGate ни одного не запороли), но несколько раз случались какие-то теоретические споры и выясняется, что в базовом образовании у них большие пробелы, ну например про Найквиста (по нашему Котельникова) они не слышали и не понимают, про спектры и Фурье тоже имеют неправильное представление и т.д.
но это не мешает им доводить до производства чипы, а у нас все умные, а чипы выпускают с ошибками - попробуйте найти ерату на отечественный чип, а когда начинаешь с ним работать выясняется, что половина не работает (и еще удивительнее, что это может быть не первая итерация)
(Reply) (Parent) (Thread)
[User Picture]From: techwork
2015-02-28 10:54 pm (UTC)
не в умности дело а в неправильной постановке своего места. Знать более приближенный к железу логический уровень того же Котельникова обязанность не каждого. Если для тебя hdl часть кто то написал потому что ты используешь стандартизированный тул это замечательно и это работает. Но кто то должен писать всё. Но опять таки всё упирается лишь в вопрос - кого готовим ?
(Reply) (Parent) (Thread)
[User Picture]From: oppad1
2015-03-01 06:36 pm (UTC)
у меня квант времени закончился - не могу подробно сформулировать:
за рубежом сформулированы методологии, то есть правила построения разработки, опять же не по тому, что там умнее люди, а потому что имеют больший опыт (значительно)
это все описано в "менеджерских" и "полуменеджерских" книжках, но иногда и перекрывается с техникой - то есть в команде должно быть сколько-то понимающих идею, а сколько-то (гораздо большее количество) реализующих эту идею по неким формальным правилам
(Reply) (Parent) (Thread)
[User Picture]From: techwork
2015-03-01 08:23 pm (UTC)
aye aye cap
(Reply) (Parent) (Thread)
[User Picture]From: froan
2015-02-25 04:48 pm (UTC)
Правильно ли я понимаю, что Сх - это более высокоуровневый язык программирования? А ты его ругаешь, что он плохой и надо быть ближе к железу. На мой дилетансткий взгляд высокоуровневые тоже нужны, пусть цветут 100 цветов. Для софтовых программистов как я (базы данных) проектировать микропроцессоры точно никогда не понадобится, но будущее за тем, что скоро вся бытовая техника будет программироваться. Кто знает чем придётся в жизни заниматься, но более высокоуровневый изучить будет легче.
(Reply) (Thread)
[User Picture]From: panchul
2015-02-25 05:33 pm (UTC)
Да сколько угодно, просто он скрывает именно то, чему я предлагал учить в исходном посте. С такой изоляцией что использование HDL, что имплементация протокола, используя general-purpose I/O pins на микроконтроллере - одна хрень.

Если использовать аналогию из мира софтвера, предположим, что вы хотите кого-нибудь обучить Си, чтобы он мог писать ядро Линукса и код драйверов. А в ответ кто-нибудь предлагает учить Питон, потому что в нем указатели скрыты и их не нужно учить. И коню понятно, что человек не знающий поинтеры, не сможет разрабатывать ядро и драйверы ОС, т.е. выдирается главная причина для данного конкретного обучения.
(Reply) (Parent) (Thread)
[User Picture]From: andrey_yurin
2015-02-26 05:42 am (UTC)
>студента нужна научить двум ключевым концепциям - конечным автоматам и конвейерности

Юрий, а что из толковой литературы по данным вопросам вы можете посоветовать? Поясню. Я сам плисовод-самоучка. Тоесть в университете нас - вроде как - должны были чему-то обучать. Ну и обучали. Чему-то. Объяснять что такое state-machine без привязки к практической реализации - абсурд. Зачем это нужно и как это можно применить на практике я понял лишь гораздо позже, подсмотрев HDL-код коллег по работе на конкретной задаче типа контроллера памяти. К этому времени университет был уже окончен и много теории осталось за бортом. Про конвейеры мне вообще никто ничего не рассказывал и не упоминал. Так вот наверняка же есть какая-то толковая литература, давно уже ставшая классикой, но я о ней не знаю. Типа Хоровиц-Хилл "искусство схемотехники". А то на работе постоянно чувствую себя каким-то детсадовцем-переростком, который в 18 лет всё ещё играется в песочнице в куличики тогда как его сверстники уже вовсю созрели и делают дела поинтереснее.
(Reply) (Thread)
[User Picture]From: panchul
2015-02-26 06:37 am (UTC)

По конвейеру

http://panchul.livejournal.com/268104.html

По state machines и по литературе сделаю пост

(Reply) (Parent) (Thread)