Pull to refresh
22
0
Alex Surkov @Khort

Пользователь

Send message
Коллега, вы хоть представляете, что такое VME? У Вас в статье нет и десятой части сигналов этого интерфейса. Нет шины адреса, модификатора, шины данных, вообще опущена система выставления и обработки прерываний, географическая адресация. По сути, Вы взяли малююсенький кусок автомата записи, ответственного за хендшейк передачи, да и то — только в одном из нескольких режимов. А как же блочные передачи, чтение, как же Read-Modify-Write, как же снятие прерываний? Это у Вас вообще ни разу не bus controller.

Не говоря уже о том, что интерфейс старый как г-но мамонта; когда я защищал свой диплом по теме моста PCI-VME в 2001 году, уже тогда этот интерфейс был чудовищно устаревшим.

p.s. эту книгу можно найти целиком в интернете — ищите. Ну или по почте скину, если не найдете.
Замечание есть, очень простое: главную проблему Вы не решили, это ограничение на число переменных. А косметическое улучшение тула 20-ти летней давности… не актуально.
После ввода текста ссылки надо еще что то написать между тегами — текст, который будет виден вместо адреса ссылки. Если этого не сделать, ссылка просто пропадает.
ссылка
Почему бы Вашу критику не перенаправить авторам Petrify. Вы с ними связывались?
Пропустил Ваш вопрос, сорри.
Вероятность сбоя мультипликативна. К примеру, если вероятность сбоя с одним триггером равна 0.1, то системы из двух триггеров уже 0.1*0.1 = 0.01, и т.д. — перемножая дроби меньше единицы, мы получаем значения все ближе и ближе к нулю. Из т̶е̶о̶р̶и̶и̶ ̶в̶е̶р̶о̶я̶т̶н̶о̶с̶т̶е̶й̶ этой простой математики и следует решение в виде наращивания числа триггеров.
Кроме космических частиц есть еще такая банальная ведь как метастабильность триггеров на границах асинхронных клоковых доменов. Вероятность сбоя почти нулевая, но в масштабах планеты, да и даже просто сервера, такие сбои происходят регулярно. Не всегда они приводят к сбоям более высокого уровня, но чисто гипотетически могут вывести из строя всю схему.
Если посмотреть на предпоследний рисунок (Фазовый портрет), то при некоторой энергии управляющего импульса, состояние выходов триггера (изображающая точка на фазовом портрете) окажется в зоне метастабильности.
Далее, если исключить все абсолютно шумы (идеальный случай), то триггер будет выходить из этого состояния по Пуассону — от бесконечно долго до каких то вменяемых временных интервалов. Если же имеет место шум, то изображающая точка начинает хаотично перемещаться в зоне метастабильности (а-ля броуновское движение), пока случайно не выпадет из этой зоны. В какую сторону выпадет -в сторону лог. 1 или лог. 0 — заранее неизвестно, но зато — состояние метастабильности закончится досрочно, не по Пуассону.
Что касается именно теплового шума — это может быть электрон, оторвавшийся от кристаллической решетки (wiki). Важно то, что это некий случайный процесс, влияющий на замкнутую систему.
Действительно, для синхронизации шины не обязательно синхронизировать каждый разряд. Есть более простое решение — синхронизировать только сигнал валидности данных на этой шине.

Использование FIFO на двупортовой памяти хорошо только в случае блочных (burst) передач, поскольку занимает много площади на кристалле. В остальных случаях достаточно синхронизировать только интерфейсный хендшейк (сигналы запроса и ответа передачи). И, к слову, управление двупортовой памятью все равно придется синхронизировать в обе стороны.
Вот ссылка на модели транзисторов, а вот ссылка на спайс модели библиотеки стандартных элементов из FreePDK 45нм. Все остальное найдете там же. Сам не проверял, но должно работать — на этом FreePDK учат студентов в универе Северной Каролины (США).
При создании констрейнтов все клоки (clock) в схеме разделяются на асинхронные группы так, чтобы внутри каждой группы клоки были строго синхронны друг другу. Сбои будут случайно возникать в синхронизаторах на границе доменов (clock domains), относящихся к разным группам.
Пример:
Клоки из группы А: С внешнего генератора через вывод микросхемы внутрь поступает опорная частота 25МГц, из которой с помощью PLL получается частота 50 МГц для APB, 100 МГц для AHB и 500 для AXI.
Клоки из группы Б: у контроллера UART приемопередатчик PHY работает на частоте 24 МГц, работающей от другого внешнего генератора.
Все клоки внутри группы А синхронны друг другу, но асинхронны клокам из группы Б. Поэтому в приемопередающей части контроллера UART должна производиться синхронизация из домена 50 МГц (APB) в 24 МГц (UART-PHY) и обратно. Сбои (ввиду метастабильности) будут наиболее часто возникать в первом триггере каждого синхронизатора, и на порядки реже — во втором, но исключительно редко могут возникать и дальше по схеме — в 4м, 5м и т.д. триггерах. Регулярность этих сбоев можно рассчитать, но для таких низких частот как в этом примере она будет маленькая — раз в несколько лет для первого триггера каждого синхронизатора. Если бы контроллер UART работал не на APB, а на AXI, то периодичность сбоев была бы на порядки выше.
У меня есть только 16 лет опыта кодинга на верилоге (из HDL языков), но сложилось следующее мнение: чтобы писать качественный, синтезируемый код на верилоге, используется всего несколько унифицированных конструкций. При этом возможности (и косяки) языка раскрываются только при написании тестбенчей. Из чего следует, что имея хороший транслятор в верилог, можно действительно писать на чем угодно. Но! транслятор должен быть действительно хороший, поскольку есть нюансы, связанные с F-End тулами: должна определенным образом транслироваться стейт машина, определенным образом транслироваться описание триггера, защелки, и т.д. Так же возникают вопросы по поводу автоматической трансляции параметризованных верилог-модулей. Итого, вопрос только в совершенстве транслятора языка.
Своего мнения у меня не сложилось пока, к сожалению. Но вот ответ на Ваш вопрос от разработчика RISC-V https://www.quora.com/What-exactly-is-the-point-of-developing-RISC-V-based-CPUs-in-Chisel-rather-than-Verilog-or-VHDL-What-are-the-pros-and-cons
Если говорить о тенденциях, то на мой взгляд сейчас куда перспективнее изучать Chisel/Scala, поскольку на нем написан новый опен-сорс процессор RISC-V. Беркли достаточно авторитетны, чтобы продвинуть этот новый HDL в массы. Впрочем, пока коммерческие тулы Synopsys и Cadence не начнут новый язык поддерживать, все это не серьезно.
Ошибся, прошу прощения, даже на википедии написано про эмуляцию 1000 нейронов. И ядро ARM там другое — 968.
Любопытно, что они полностью самосинхронный NoC сделали. Видимо очень быстрый интерфейс получился, поскольку накладные расходы у такого решения — 2 такта на пересинхронизацию на каждой стороне. Надо будет почитать еще про этот чип, много интересных решений. Спасибо за наводку!
Разработку возглавлял человек, стоящий у истоков ARM — Steve Furber, так что вопросов с лицензией, думаю, не стояло. Ядро очень древнее, и без FPU, но зато частоту 200 МГц вытянули (130нм тех. процесс).
Шина использовалась двупроводная — асинхронный последовательный канал. Таким образом они эмулировали связи между нейронами. В результате, эти шкафы иначе как в качестве нейросети использовать нельзя. Видимо, сэкономили на корпусе — меньше выводов делать надо было.

Что проще делать — аналоговый вычислитель, или цифру, не скажу, не знаю. Процессоры проектировал, а вот нейросети не приходилось. Но чисто из общих соображений: в аналоговом вычислителе один кондесатор заменяет целый сегмент памяти, а куча логики логики заменяется RC-цепочками. Учитывая, что проектируют такие вещи с использованием шаблонов — должно по идее быть и быстро, и не сложно, и итоговое количество транзисторов снижается на несколько порядков по сравнению с цифрой.
О математике, использующейся в нейросетях? Это и есть корень проблемы. Нет теории — нет математики, и каждый в результате творит что хочет, в меру своей фантазии.
По большому счету, нейросеть — это всего лишь обучаемый фаззи контроллер, задачи его понятны и с помощью нечеткой логики решаемы. Проблема только только в обучении.
В этом и проблема, что «подбирается». Напридумано множество реализаций казалось бы одного и того же — аналога живого нейрона, причем эти реализации настолько разные, что просто диву даешься. В аналоговых реализациях все притянуто за уши к схематехнике, в цифровых — к возможностям аппаратуры, топология сети — разнится от задачи к задаче, а в основе что, теория? Но теории ведь нет, все рекомендации получены экспериментально, методом проб и ошибок. Я вовсе не против нейросетей, но с очень большим подозрением отношусь к разработкам со столь сырым бэкграундом. Будет готова теория, тогда другое дело.
Рождение отнюдь не второе, первый раз я столкнулся с нейросетями больше 20 лет назад, и тогда волна их популярности была уже далеко не первая. Насколько я знаю, нейросетями занимались и в СССР, и в РФ в 90е даже что то на ПЛИС делали. Но поскольку военные не ведутся на популизм — им подавай факты и доказательства, то так все и заглохло.
Есть еще другая недавняя разработка — в Манчестере сделали чип SPINNAKER, на базе которого собрали 6 шкафов двухметровой высоты с 500тыс цифровых нейронов. Каждый нейрон — ядро ARM996, на кристалле их уместилось 16 или 18, не помню.
Интересно, что все эти нейросети как известный М-драйв — вроде бы работают, но никто не понимает как :) нет законченной теории нейросетей, все строится на экспериментах.
Вот к примеру, этот аналоговый нейровычислитель явно экономнее и быстрее шкафа на ядрах АРМ, на много-много порядков. Тогда почему в Манчестере построили шкаф, а китацы сделали аналоговую схему??
Нейросетями занимаются уже лет 50, и до сих пор четко не доказана ни их эффективность, ни способ реализации. Все это очень занимательно, но околонаучно, имхо.
Если делать микросхему (ASIC), то так и произойдет — бэк-енд тул вставляет буферы во все assign в схеме. Учитывая, что это клоковская цепь, а не сигнальная, могут быть и другие последствия — к примеру, криво построенное клоковое дерево, поскольку для разрыва assign используются одни буфера, а для клокового дерева — другие. В общем, на ПЛИС это может и прокатывает, но вот для ASIC я бы не советовал использовать подобные конструкции без лишней надобности — лишний риск словить ошибку на ровном месте.
В приват задали вопрос: не совсем понятно, как проводится расчет времени.
Прежде всего надо помнить, что STA всегда делает расчет на два крайних случая: самый быстрый вариант (расчет hold), и самый медленный (расчет setup).

Как производится расчет АТ для левого верхнего элемента И:
1й входной сигнал придет не раньше 0нс, и не позже 1нс (0-1). Если элемент И сработает по этому сигналу, то получим разброс задержек 2-4
2й входной сигнал придет не раньше 1нс, и не позже 2нс (1-2). Если элемент И сработает по этому сигналу, то получим разброс задержек 3-5

Что мы с этого имеем: Для расчета hold — самое ранее, это срабатывание через 2нс (по первому сигналу). Для расчета setup — самое позднее срабатывание через 5нс (по второму сигналу). Итого, получаем 2-5.
Всегда надо помнить о Hold — это критично для работы синхронных схем. Setup можно нарушать, а hold ни в коем случае. Об этом написано во второй публикации https://habrahabr.ru/post/302806/

Information

Rating
Does not participate
Location
Россия
Registered
Activity