Pull to refresh

Comments 16

Вот что получится, если дать программисту писать для FPGA — внятного HDL кода не жди )))
Хотя, на самом деле, получилось довольно нетривиально и это интересно.

Я так понял всё это делалось на Altera, которая нынче Intel'ом зовётся. У Xilinx есть интересный инструмент под названием Vivado HLS, в котором код можно писать прямо на Си, а на этапе синтеза САПР сам его преобразует в нужный RTL. Еще года три назад представители Xilinx сильно описывали преимущество такого подхода с т.з. экономии времени и ресурсов. Но там всё равно есть свои моменты, которые надо знать и учитывать, однако сделать какой-нибудь фильтр или сложную математику, где не требуются сотни мегагерц, на HLS действителньо будет попроще, чем его HDL описанием делать, а потом упорно моделировать.

Насколько я знаю, для некоторых устройств Altera/Intel тоже доступны инструменты, конвертирующие OpenCL (в каком-то смысле, почти C) в дизайн для FPGA.


Хотя, на самом деле, получилось довольно нетривиально и это интересно.

Спасибо :) Раз получилось "нетривиально" при не очень большом количестве кода и почти полном отсутствии опыта, значит, возможно, Chisel мог бы дать возможность не-суровым-профессионалам написать что-то осмысленное и относительно близкое к железу (то есть всё же не на С), как в своё время экосистема Arduino многих приобщила к электронике. Впрочем, Chisel выглядит серьёзнее, чем Arduino IDE. :)


ИМХО, есть несколько путей "оюзерфрендливания" языка:


  • угадывание намерений (не всегда точное) — JavaScript, PHP
  • усложнение выстрела в ногу / упрощение отладки — все те же + Java — там хоть стек-трейс почти всегда будет, а в Java ещё и статическая проверка типов
  • лаконичность и безопасность ценой более запутанной системы типов и, возможно, существенного усложнения некоторых низкоуровневых вещей--- Scala, Rust (?)

Есть подозрение, что Chisel — это вариант 3.

У нас как-то один подрядчик сдавал «цифру» — так у него исходники вообще в матлабе были))
Verilog ну очень прост в освоении, пиши сразу на нем. Вместо осциллографа сигнал можно смотреть в ModelSim, или других пакетах симуляции.

Chisel, вроде, тоже проще некуда при условии, что уже знаешь Scala. Вопрос, на чём мне будет комфортнее писать от случая к случаю. Я при этом не утверждаю, что ответ — Chisel — у меня банально опыта нет для таких сравнений. Но учитывая, что на основной работе мой язык — Scala, то вкусовщина, скорее всего, будет именно на его стороне. Вот что интересно, так это узнать у людей, знакомых как с Verilog, так и с "хипстерской функциональщиной", что безопаснее в плане "не выстрелить в ногу".


А ещё, помню, натыкался на вопрос на Quora, о том, стоит ли учить Chisel или Verilog для промышленного применения. Ответ был "Verilog учить однозначно — стандарт, остальное — по желанию". И при этом указывалась полезность большого кругозора даже не в плане "профессионально знаю десять языков, поддержу что угодно", а в плане знакомства с мотивациями "а нафига вам ещё один язык понадобился, что плохого/опасного в существующих решениях". Знакомство с Maybe[A] и Either[A, B] по Хаскелю может и при программировании на C++ пригодиться.


Ну и, гипотетически, если вам нужно что-то очень хитро кастомизировать каждый раз — то в Chisel к вашим услугам вся мощь ФП и экосистемы Java — хоть в БД лезь. Нужно ли это кому-то и насколько это будет удобно — другой вопрос.

Улыбнуло, спасибо :-)
На самом деле, очень показательно, что Chisel вообще работает, и на нем можно писать и получать рабочее железо. У меня были большие сомнения по этому поводу еще с тех времен, когда только начали появляться новости про risk-5, и как его создавали. Отличный bridging the gap между программистом и железом. Но на мой взгляд, до конкуренции Chisel и HDL — как до до луны пешком.
Отличный bridging the gap между программистом и железом. Но на мой взгляд, до конкуренции Chisel и HDL — как до до луны пешком.

О, это было бы как раз интересно: комментарий от человека, хорошо знакомого с классическими HDL о том, почему Chisel не конкурент HDL. Правильно ли я понимаю, что подразумевается примерно то же, что "Java не конкурент C/C++" (то есть, что Chisel — это упрощённое безопасное подмножество, на котором сложнее выстрелить в ногу, но некоторые низкоуровневые вещи выразить существенно сложнее, как и понять, во что оно оттранслируется на самом низком уровне)? Всё-таки Chisel — это просто язык описания, а не попытка автоматически транслировать Scala в Verilog.

Сейчас процесс разработки микросхемы выглядит следующим образом: код на HDL синтезируется в базис логических элементов, а полученная схема затем реализуется в виде программируемой логики, бмк или эсик. Синтезатор (аналогия с компилятором) может по разному трактовать код, и от этого сильно зависят хар-ки результата (частота, потребление, площадь и т.д.). Chisel добавляет еще одну стадию в описанный процесс разработки — конверсию в HDL, поэтому результат теперь зависит уже от двух стадий интерпретации исходного кода. Это, очевидно, плохо. А то, что теперь программисту не обязательно становится схемотехником (обязательно при разработке железа на HDL), это здорово. Это я и имел ввиду под bridging the gap. Коммерческие тулы C-2-GDS пытаются написать уже более 20 лет, они бы хорошо продавались. Да только, ничего приличного до сих пор не сделали. А Chisel — вот он, вполне доступен, бери да пользуйся, бесплатно причем.
Насчет «не выстрелить в ногу» — не факт. Может это так, а может и нет: очень мало людей пишет на Chisel, нет статистики. Транслятор в верилог могут годами доводить до ума, а может, он уже сейчас близок к идеалу.

Категорически не согласен. Chisel это просто как бы очень высокоуровневый верилог. Не более. Да, очень облегчает тестирование. Да, очень помогает в параметризации, настройке, повторном использовании кода и т.п. Но становиться схемотехником придется ОБЯЗАТЕЛЬНО. Думать всё равно придется на уровне параллельных и одновременных регистровых передач. Избавляет от этого не chisel, а такая штука как HLS, которая действительно (насколько я знаю) пока в пеленках.

Я писал про разработку микросхем, это несколько другой уровень нежели ПЛИС (с которым Вы скорее всего и имеете дело). Две большие, огромные разницы.

Это, скажем, как сравнить радиолюбителя и главного инженера: один лабает себе на коленке в свое удовольствие, а другой собаку съел в своем деле и гонит качественный продукт четко по графику. Если посмотреть вакансии крупнейших мировых дизайн центров, то в 99% случаев будут требования верилог/сверилог и для скриптинга тикль+питон/перл. Но не чизел. И совсем другое дело хайповая университетская или любительская среда, где микросхему могут разве что для диссера разработать, а в 99% случаев дальше ПЛИС дело не идет.

Ну там уже да, абсолютно согласен. Вещи совершенно несопоставимые. Но мне кажется дело скорее в том, что tcl в индустрии уже лет 30, а chisel штука совершенно новая. Индустрия всегда консервативна. Пройдёт ещё 5-10 лет, и возможно положение начнет меняться в пользу chisel. Хотя кто знает конечно... Рынок увы не всегда отбирает лучшее. Сам я хочу сейчас чисто для прикола (а так же потому что имею правовые ограничения) реимплементировать и опубликовать здесь один свой проект. Делал его на трех языках - verilog для железа, java для средств разработки, typescript для web-GUI. Сейчас хочу обойтись только одним языком для всего - scala. По-моему это само по себе уже крайне интересно...

> Поискав, я нашёл, что в PAL используется частота несущей 4.43 МГц. «Дело в шляпе» — подумал я. «Хрен тебе» — ответил тюнер.
Тут есть проблема, что частота несущей должна быть очень точной, да еще и привязанной к частоте строк. Иначе PLL в декодере телевизора её просто не захватит.
The QAM subcarrier frequency is 4 433 618.75 ±5Hz
www.radios-tv.co.uk/Pembers/World-TV-Standards/Colour-Standards.html
На самом деле задача формирования полноценного PAL сигнала очень непроста и вряд ли решится вот так «на коленке». Если хочется быстро и надёжно, то проще купить модуль PAL encoder и отдавать на него стандартный параллельный CCIR 601/656, который без проблем формируется FPGA.
По таймингам очень хорошо всё расписано здесь:
martin.hinner.info/vga/pal.html

Спасибо! Первая ссылка вообще шикарна! (А вторую я как раз тоже использовал при подготовке статьи.) Но всё равно с ходу не помогло. :) Кстати, автор одной из статей говорил, что на микроконтроллере он PAL так и не завёл, но завёл NTSC.

Спасибо, отличная статья! Жаль кармы мало плюсик поставить. Давно хочу попробовать написать что-нибудь на Chisel. Сейчас вот доделаю текущий проект (он у меня на верилоге) закуплю для отладочной платки такой вот дисплейчик iarduino.ru/shop/Displei/cvetnoy-graficheskiy-displey-3-2-tft-480x320.html и хочу поиграться вот с этой книжкой docplayer.ru/30932815-Mashiny-kletochnyh-avtomatov.html. Купил её в древнем 91-м году и дико завидовал мужикам, сделавшим такое чудо и с ним игравшимся. А сейчас надо же до чего нашел прогресс (!!!), я смогу всё это увидеть на своей маленькой de0-nano.
Я правильно понимаю, что Chisel ближе к Verilog, чем Clash (HDL встроенный в Haskell), и позволяет описывать не только синхронную логику, но и логику не использующую общий тактовый генератор?

Честно говоря, не берусь сказать, но, может, эта страница чем-то подскажет. Сам я, технически тоже использовал два clock domain (один "умный" и один "высокочастотный"), но связывал их снаружи на диаграмме.

Sign up to leave a comment.

Articles