Но на мой взгляд, нужно еще доделывать текущую однотактную модель. Сейчас к ней невозможно подключить обычную синхронную статическую память оставаясь в рамках однотактного исполнения. Также можно добавить В-расширение. Например zba,zbb,zbs команды. Это уже поддерживается компилятором, просто добавляется и улучшит немного коремарк :)
Но шибко лютый CoreMark получился, 2.7CM/MHz выглядит уж круто
Модель интересна тем, что она однотактовая. В ней напрочь отсутствует конвейер. Любая команда исполняется за 1 такт. Вы не теряете ничего на переходах, на загрузке данных. т.е. это какой-то идеал , к которому нужно стремиться. :)
Похвально, что Вы не бросили свою затею. Обычно обещающие здесь многотомную эпопею, первой публикацией и ограничиваются.
однотактное умножение не так уж и нужно
Да, если Вы посчитаете , сколько в коремарке выполнилось команд умножения и сколько на них потратилось тактов (для многотактной версии), то получится где-то менее 7 тактов на умножение. В тесте очень удобные числа для Вашей реализации.
То, что у Вас сейчас шина "подключена в одно место " не означает отсутствие конфликта. В Вашем тестовом окружении уже есть конфликт доступа к памяти между шиной команд и шиной данных.
Наконец-то понял. Конвейер это Вы про будущий конвейерный вариант процессорного ядра. "Сделать до конвейера" это добавить расширение "М" в текущий вариант процессорного ядра.
Сейчас из предложенного ядра можно сделать что-то типа гарварской схемы с раздельной памятью данных и команд, при этом память всегда должна отрабатывать за один так.
Если внешняя статическая ТСМ память просто как регистровый файл с 2 портами чтения и одним портом записи, то все отлично :)
Что делать с периферией которая за один такт отработать не может ?
Я полагал, что раз входа "подождать" нет, то все вышеописанные проблемы с необходимостью подождать будут решаться через блокировку прохождения синхросигнала.
Пока только непонятно мне как быть с записью данных, чтобы остаться в одном периоде клока. Память снаружи асинхронная. Нужен, в конце периода клока, короткий импульс записи, в момент когда выдаваемые адрес и данные достоверны.
Автор ядра DarkRiscV похвастался, что собрал ядро за один день. У меня за плечами опыта разработки микроэлектроники не было, поэтому когда ядро так же удалось собрать за один день, осталось только сказать: "Лол, и это работает".
По легенде, он сделал это за одну ночь. Но если Ваш день был короче чем его ночь, то Вы круче.
Как я понял, диаграмма здесь простая - один период клока. В этом периоде выдается адрес, читается из памяти команда, декодируется, исполняется и в конце такта защелкивается результат и новый адрес команды :) Уникальный процессор - в нем даже нет регистра инструкции.
Лучше точно не будет :)
Но на мой взгляд, нужно еще доделывать текущую однотактную модель. Сейчас к ней невозможно подключить обычную синхронную статическую память оставаясь в рамках однотактного исполнения. Также можно добавить В-расширение. Например zba,zbb,zbs команды. Это уже поддерживается компилятором, просто добавляется и улучшит немного коремарк :)
С удовольствием посмотрю и на такую Вашу модель.
со всеми однотактными командами у меня одна итерация 313 263 такта. Это 3.1922
добавьте в ядро счетчик тактов и хотя бы одну команду чтения этого счетчика из набора CSR регистров. А то непонятно как считать рекорды :)
Модель интересна тем, что она однотактовая. В ней напрочь отсутствует конвейер. Любая команда исполняется за 1 такт. Вы не теряете ничего на переходах, на загрузке данных. т.е. это какой-то идеал , к которому нужно стремиться. :)
Деление у Вас просто огонь. В тактах, конечно. Вот только не знаю какой бы тест подобрать чтобы надрать задницу флагманам :)
Похвально, что Вы не бросили свою затею. Обычно обещающие здесь многотомную эпопею, первой публикацией и ограничиваются.
Да, если Вы посчитаете , сколько в коремарке выполнилось команд умножения и сколько на них потратилось тактов (для многотактной версии), то получится где-то менее 7 тактов на умножение. В тесте очень удобные числа для Вашей реализации.
То, что у Вас сейчас шина "подключена в одно место " не означает отсутствие конфликта. В Вашем тестовом окружении уже есть конфликт доступа к памяти между шиной команд и шиной данных.
Наконец-то понял. Конвейер это Вы про будущий конвейерный вариант процессорного ядра. "Сделать до конвейера" это добавить расширение "М" в текущий вариант процессорного ядра.
Здесь скорее всего риск, спроектированный с помощью ИИ. :)
Не могли бы Вы как-то объяснить эту фразу?
Не могу понять что Вы называете конвейером.
Картинка с паровозиком отличная.
Если внешняя статическая ТСМ память просто как регистровый файл с 2 портами чтения и одним портом записи, то все отлично :)
Я полагал, что раз входа "подождать" нет, то все вышеописанные проблемы с необходимостью подождать будут решаться через блокировку прохождения синхросигнала.
Думаю, что с этими модулями у автора проблем не будет. Кроме контроллера прерываний, т.к. вход IRQ процессорного ядра висит в воздухе :)
Смело. По сути внешняя память у Вас аналогична описанному в процессорном ядре регистровому файлу.
Да. Про Ваше.
Проверил. Цифры аналогичные :)
Пока только непонятно мне как быть с записью данных, чтобы остаться в одном периоде клока. Память снаружи асинхронная. Нужен, в конце периода клока, короткий импульс записи, в момент когда выдаваемые адрес и данные достоверны.
По легенде, он сделал это за одну ночь. Но если Ваш день был короче чем его ночь, то Вы круче.
Как я понял, диаграмма здесь простая - один период клока. В этом периоде выдается адрес, читается из памяти команда, декодируется, исполняется и в конце такта защелкивается результат и новый адрес команды :) Уникальный процессор - в нем даже нет регистра инструкции.