Обновить
27
0
Виктор @byman

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

Отправить сообщение

С векторным расширением это уже совсем другая модель и она проигрывает по коремаркам модели автора :)

Кстати, автору нужно как-то назвать ядро. А то без имени уже третью часть.

Вы можете и в сети найти такой модуль, но лучше самому добавить. Там простые команды. Когда-то в этом расширении были сложные команды, но в окончательной редакции их повыбрасывали. Обратите внимание на деление В расширения на группы. Можете добавлять по частям zba+zbb+zbs и смотреть влияние каждой подгруппы на результат.

В этой версии работает даже векторизация. Я был удивлен , когда увидел, что при выполнении коремарка шевелятся векторные регистры. Прибавка от векторного расширения составила аж 0.006 :)

Оказывается, там только оглавление и мусор. Ну да ладно. Все равно спасибо :)

Провел интересные эксперименты с моделью автора и коремарком. Как уже автор писал, у него показатель см/мгц равен 3.2 при однотактном исполнении всех команд. Вчера я добавил в его модель В-расширение . Получил 3.292 за счет набора zba_zbb_zbs. Сегодня я скачал с сайта Syntacore свежий инструмент с версией компилятора 14.2 . Прежняя версия была 13.2 . На новой версии компилятора показатель 3.3556. Видно, что прогресс у RISC-V не стоит на месте.

Спасибо. Особенно , что на русском. А то я со своим испанским ни беса, ни муччо

Возможно Вы правы. Я так вообще никогда не читал этого автора и в правильных названиях могу ошибаться. Слово "выполнение" мне непонятно. Получается, что если умножение не за 1 такт, то уже многотактовая архитектура? А если выполнение умножения поделено на две части: одна на одной стадии конвейера, а вторая на другой. Это однотактовая? Нужно как-то определиться с правильными названиями, чтобы любой мог понять о чем здесь разговор.

Вы описали конвейерную архитектуру и в ней действительно все команды могут исполняться за один такт. Но от момента начала чтения команды Х , до момента записи результата этой команды в GPR, пройдет несколько тактов. Длина (глубина) конвейера. Сейчас у нас эта длина равна 1. И лично я вижу в такой модели интересность :)

нужно смотреть не умножитель , а критический путь. Он начинается сейчас от регистра РС, далее память, чтение команды, дешифрация команды, чтение операндов из РОН, выполнение операции умножения, запись результата в РОН.

на pc[i] = pc_result[i-1] вы меня не разведёте. 

Вы меня развеселили. Очень уж торопитесь. Прочитайте еще раз что я посоветовал. В РС пишется то, что и ранее. А вот наружу выдается  pc_result и там защелкивается в буфере синхронной памяти. Так работает память. Для данных вы читаемые данные не получите в текущем такте, только в следующем. И нужен будет дополнительный порт записи в РОНы. Еще нужен будет bypass для загружаемых данных чтобы следующая команда не тормозила, если эти данные нужны ей.

И у Вас будет и синхронная стандартная память, и однотактная модель.

это фикция, а не частота :)

Да. Поддерживаю :)

Выражение always_ff @(posedge clk) if(we) mem[addr]<=din; означает, что Вы имеете дело с синхронной памятью, т.к. в выражении присутствует clk. В этом случае вся информация для записи защелкивается по фронту клока в буфере памяти, а сама запись делается в следующем такте. Выражение assign dout= mem[addr]; означает асинхронное чтение памяти. Может ли быть память одновременно синхронной и асинхронной? Вот что по этому поводу мне написал ИИ:

Нет, SRAM не может быть одновременно синхронной и асинхронной. SRAM, или статическая память с произвольным доступом, существует в двух основных типах: асинхронная и синхронная. Асинхронная SRAM не имеет тактового сигнала, а ее операции чтения/записи управляются непосредственно сигналами адреса, данных и управления. Синхронная SRAM, в свою очередь, использует тактовый сигнал для синхронизации операций чтения/записи, что обеспечивает более высокую скорость работы.

Чтобы добавить внешнюю память требуется

можно добавить 2-хпортовую синхронную память. при этом вместо instruction_address = pc; нужно instruction_address = pc_result; Это для чтения команд. Чтение данных будет отложенное и нужно будет сделать bypass. Тогда будет реально синхронная 2-хпортовая SRAM и однотактная модель.

Тактовую увеличит, но сейчас разговор про коремарк на МГц. Мы обгоняем всех по этому показателю :)

но ведь это удлиняет путь сигнала

У Вас сейчас, например, для команды LD тактой путь сигнала: РС адрес из регистра в память, чтение памяти, декодирование команды, определение что команда LD, вычисление адреса чтения, отправка адреса в память, чтение памяти, прием и преобразование данных , запись в РОН. И все это ОДИН такт :) "тяжело" (с)

А смысл подключать синхронную память если мы про SRAM.

И я про синхронную SRAM, Этот тип памяти обычно подключается к ядру (ТСМ память называется) чтобы получить наибольшее число коремарков на МГц :)

Так ведь синхронная память адрес получает на одном такте, а значение выдаёт на другом,

Верно! Но сделать однотактовую модель можно.

Вы привели пример памяти у которой запись синхронная, а чтение асинхронное. Уже для меня непонятно что :) Синхронная запись означает, что реальная запись будет не до фронта клока, а после него, т.е. в следующем такте. Но в следующем такте у Вас по этому же адресу возможно уже асинхронное чтение.

Далее, оставаясь с однотактной моделью, можно попробовать реализовать fusion для комбинаций команд. Это тоже улучшит коремарк на МГц. Конвейеры только добавят проблем и загубят хорошие показатели :)

Информация

В рейтинге
Не участвует
Откуда
Беларусь
Зарегистрирован
Активность