
Комментарии 22
Программируемые микросхемы, процессор RISC - текст тоже ИИ писала?
А что не так с RISC?
Я его использовал в больших технических фрагментах (слишком большой объем и слишком плотная занятость, а эксперимент интересный, хотелось поделиться), но сам все равно полностью вычитывал потом и редактировал много. По микросхемам -- ну в детстве в радиокружок ходил и мы их там так называли. RISC-процессор и правда проглядел, просто не обратил внимания.
Upd.: RISC-процессор поправил, спасибо!
Мне не понятно как Вы заставили весь софтовый стек использовать новую инструкцию процессора CHK ? Вы написали свой компилятор и пересобрали с помощью него Oberon ?
И что за процессор RISC5 от Вирта, чем он отличается/схож с RISC-V ?
Процессоры сильно разные, просто оба используют RISC-архитектуру. RISC-V разработан в Беркли (и это пятая модель их архитектуры), вокруг него огромное комьюнити, рыночная экосистема и т.п. RISC5 (без дефиса), пятая модель в линейке разработанных Виртом учебных процессоров. Это уже минималистичный процессор, вся суть которого состоит в том, чтобы один человек мог у себя в голове все детали его реализации и инструкций держать. Такое неудачное созвучие у проектов получилось
Ну RV32I тоже очень минималистичный и умещается на пару страниц Verilog-а, он очень даже понятен, его студенты реализуют в качестве лабораторной работы. Гугл говорит, что Виртовский RISC5 появился в 2013, в это время Берклийски RISC-V уже был известен. ИМХО, Вирт, в свойственной ему манере, придумал очередной велосипед.
Про Oberon хотелось бы побольше инрформации. Совершенно не потяно как этим пользоваться.
Там в живой лабе есть разные задачки, которые немного показывают, что это и как пользоваться. Но идея у Вирта действительно странноватая.
По поводу изобретения велосипеда — я не думаю, что это прям так, потому что сама RISC-архитектура давно известна и описана. Но Вирт действительно вдохновлялся работами ребят из Беркли (того же Паттерсона, собственно, изобретателя термина). Ему нравилась концепция простоты. Но у процессоров на деле мало общего — в том плане, что конкретно эти модели не порождены друг другом.
Кстати, Component Pascal или Oberon-07 до сих пор используют там, где нужна абсолютная предсказуемость кода — всякая авиация и т.п. Но сам проект разрабатывался скорее как чисто учебный, для удобства изучения программирования, работы процессора, компилятора, операционной системы. Код довольно компактный и это позволяло одному человеку, грубо говоря, держать всё в голове от физики до ЯПа.
В своё время ходил по рукам Оберон на одной дискете с самой системой, GUI и компилятором (не путать с похожей демкой от QNX, где был браузер, но компилятора не было). Есть здесь, по идее можно потрогать под QEMU. Насчёт современного развития не в курсе.
Теперь по инструкции CHK. Действительно пришлось поправить компилятор и пересобрать Оберон, но с нюансами. Я не писал компилятор заново, а пропатчил кодогенератор компилятора Вирта + добавил инструкцию в CPU (RTL и эмулятор), а также провел самопересборку системы. При этом открытые массивы, длина которых не является константой, мой CHK не покрывает и не умеет с ними работать, там все так же нужна программная проверка.
Еще важно, что CHK переиспользует уже существующий механизм ловушек Оберона — аппаратно эта инструкция делает то же самое, что BLR (R15 := PC+4; PC := R12, номер ловушки в тех же битах IR[7:4]), поэтому Kernel.Trap декодирует ее без изменений в ОС.
По умолчанию ORG.Index на каждую индексацию массива делает проверку границ как SUB + BLR/CMP — 2 инструкции / 2 такта. Я изменил это так, чтобы для массивов известной на этапе компиляции длины выдавалась одна новая инструкция CHK, изменений там на пару строк.
Понятно. В сторону Fil-C не смотрели ? Там умные указатели заложены в компилятор языка С/С++. Чел его создавший пересобрал своим компилятором весь User Space, начиная от libc (musl) и заканчивая LibreOffice. Полностью рабочая система с программной защитой памяти. И никакого Rust и прочей изотерики типа Ada или Oberon. ;)
В оригинальной системе (89-93 г) проверку индексов массива отключить можно. Ключ /x (OBE.inxchk := FALSE).
Я сейчас "готовлюсь" к повторению на ПЛИС процессора RISC5 (с косметическими изменениями). Изначально был проект компилятора Оберон для x86_64 с собственной мини ОС. А потом мне "надоело" разгадывать всякие ребусы, например, почему это в железе реализовано так. Вот подумал "создать" свою вычислительную машину. Компилятор "свой" исправил для RISC5. Сейчас тренируюсь работать с SDRAM. Кстати у меня её 8МБ :-). И да, к сожалению у Никлауса Вирта (или у меня) беда с документацией. Есть "куча" ревизий, там так, здесь этак. А так же присутствуют всякие "приколы" (хаки), например реализация вещественных операций.
Хорошая статья! Спасибо.
спасибо вам за теплые слова! надеюсь у вас все получится с реализацией процессора. я думал до него в декабре добраться после длинных поездок, когда время появится) но теперь буду просто ждать ващей статьи -- если у вас все получится, могу помочь заказать в какой-нибудь европейской компании готовый кристал по провереннной вами схеме
Палеокомпьютинг, часть 1: процессор Вирта, проект Оберон, новая архитектура в Qemu и KubeVirt и запуск в Cozystack и K8s