Comments 29
Странные чувства от Вашей публикации...
Лучшее, что я видел по Risc-V на FPGA для начинающих, это
https://github.com/BrunoLevy/learn-fpga/tree/master/FemtoRV
или очень подробно
https://github.com/BrunoLevy/learn-fpga/blob/master/FemtoRV/TUTORIALS/FROM_BLINKER_TO_RISCV/README.md
Возможно вам будет интересно посмотреть на лабораторный практикум из МИЭТ, где как раз последовательно и с нуля пишется процессор RV32IZicsr. Он сопровождается очень подробными методическими материалами где как раз рассказывается вроде нюансов про использование младших битов операнда B при сдвигах. Кроме того, тестбенчи там даются уже готовые, потому что написать тестбенч для модулей — это тоже целая наука и у вас они довольно простые, можно не все отловить.
Совершенно не интересно смотреть за тем, как кто-то уже всё сделал и решил за тебя все проблемы. Автора всецело поддерживаю в его велосипедостроении. Считаю, что всякий программист обязан за свою карьеру хоть раз выделить время и реализовать какой-то вычислитель, пусть даже самый простой. После этого на природу сморишь совсем другими глазами. Глазами Создателя чтоли. :-)
Классный путь от ALU до мигающего диода. Это тот самый щелчок когда RTL оживает
Мне вот интересно.. такой чип стоит 12 тысяч рублей или такого порядка. Имеет ли смысл в него встраивать хоть что то микропроцессорное, если даже существенно более производительные процессоры и контроллеры стоят намного дешевле?)
В целом, это начинает приобретать какой-то смысл если Ваш синтезируемый вычислитель умеет делать что-то специфическое, например быстро перемножать матрицы, вычислять Фурье или имеет какие-то редкие интерфейсы. Автор же взял в руки первую попавшуюся плату и начал эксперименты.
PS: Существуют ПЛИС и платы с ними за цену в менее 1500 руб (Tangnano-9K), на которых можно сделать всё то же самое, и даже в большем обьеме.
Именно. Но встраивание микропроцессоров жрёт очень много недешёвых ресурсов и не упрощает никак конечную разработку, поэтому мне всегда были непонятны разного рода nios-ы при наличии аналогичных по характеристикам dsp и контроллеров по цене на порядок или около того ниже.
Как же не упрощает?
Для процессора вы пишите код на языке высокого уровня в привычной среде, реализовать тоже самое на verilog в RTL будет намного сложнее и дольше.
А почему бы рядом с fpga не поставить обычный процессор на котором всё легко? Вот для sdr процессор непосредственно нужен? Не нужен. Почему же в который раз за историю его снова пытаются запихать в плис со всеми очевидными последствиями? Чтобы интерфейс не придумывать? Так он займёт чуть меньше, чем ничего по сравнению с таким же процессором в fpga.
Мне правда непонятен текущий подход к архитектуре подобных устройств. 20 лет назад тоже говорили что fpga заменит всё, однако рынок всё расставил по местам - fpga это дорого, долго и трудно поддерживаемо в массовых устройствах. А сейчас, такое ощущение, что что то в этих обстоятельствах изменилось
fpga это дорого, долго и трудно поддерживаемо в массовых устройствах
С этим тезисом никто и не спорит, но для небольших партий (относительно) или устройств специального назначения вполне логичной выглядит использование одной микросхемы fpga с софт-процессором.
Для любителей привычного подхода есть целый класс гибридных микросхем, где ядра cortex соседствуют с программируемой матрицей на одном кристалле. Но в современных, жирных fpga проще использовать софт risc-v например.
А почему бы рядом с fpga не поставить обычный процессор на котором всё легко
Ну вот понадобится вам производить 20 умножений ОДНОвременно - вы поставите 20 обычных процессоров? Или реализовать сложную логику, собирая сигналы с сотни ног и в реалтайме на частоте 50 МГц обрабатывать их. ПЛИС - вершина цифрового мира, когда процессора становится недостаточно - выход только один: ПЛИС и по результатам заказывать АСИК или пустить в серию ПЛИС, если тираж небольшой.
И как в такой задаче поможет программируемый процессор внутри плис?) Там же будет несколько умножителей и автомат, переключающий входы выходы - типичный препроцессор не требующий ничего похожего на программируемое устройство
Внутри ПЛИС можно разместить процессор, у которого будет 20 аппаратных умножителей.
И он будет программируемый, с системой команд, как описано в данной статье? Ему же тогда компилятор надо разработать, отладчик какой никакой.. и непонятно, зачем он нужен для 20 умножений на 50 МГц
и непонятно, зачем он нужен для 20 умножений на 50 МГц
Простейший пример - видеокарта, внутри которой процессор с тысячами вычислительных ядер. Можно ведь графику и на одноядерном процессоре обсчитывать, просто подняв его рабочую частоту в тысячи раз? Вот что-то такое и вынуждает создавать кастомные процессоры на ПЛИС.
a = 10; b = 5; op = 4'b0000; #10;
что означает последнее #10 в этой строке?
Есть подозрение, что статья не настоящая, а нейросетевая.
Задержку в 10 отсчётов моделирования. Без нее сигналы на входе алу менялись бы мгновенно и на временной диаграмме было бы видно только результат последнего тестового вектора.
это не по коду можно отловить. код то может и его, но реплики в тексте....человек так не разговаривает и не пишет
Вполне обычная задержка, которую используют в тестбенчах: объявляешь timeunit и используешь. Конструкция не синтезируема, но и используется только при моделировании. Довольно удобно, если есть какой-нибудь clocking block, смену фронта клока в котором, кстати, тоже можно задать через #, а потом сам клок можно использовать уже через двойную решетку ##.
Это нейросетевая статья потому что между ALU с регистровым файлом и выполнением ассемблерных команд в ней ничего нет. А там кое-что есть.
в качестве проекта под FPGA в унике я тоже сделал процессор. только 16 битный, основанный и собранный на процессоре с игры nandgame. и пока сама имплементация логических гейтов шла неплохо, я очень много времени тратил на тестбенчи и отлов неопределенных состояний - потому что оказывается, если твой логический вентиль не имеет неопределенного состяния, то это вовсе не значит что тот же АЛУ собраный из этих элементов будет работать безукорызненно. благо в самой игре были аналоги тестбенчей и я знал конкретно чего ожидать.
В итоге на не совсем полностью моем процессоре удалось и диодом поморгать и числа фибоначчи посчитать
а саму игру nandgame вообще всем могу посоветовать, залипнуть можно надолго
А где всё остальное ? Где декодер команд ? Где шина и арбитраж ? :-)
Напомню как снизить количество мусорных бессодержательных ИИ-статей с рекламой
- минус статье
- минус в карму автора
- не оставлять комментарий для подогрева срача
Есть игра Turing Complete, советую тем кому интересно повторить путь автора без железа для начала. Там тоже шаг за шагом соберешь компьютер. 32 регистра кстати оверкил, так-то можно и всего парочку иметь в простом процессоре + арифметика + логика + условный переход и это уже можно программировать.
Там не дает при чем сразу готовые компоненты, а начинаешь с буквально отдельных гейтов.
Мой компьютер из игры

Собственный RISC-V процессор: от RTL до симуляции и синтеза под FPGA