Comments 8
Интересный материал, но не могли бы Вы переформатировать текст с использованием тега CODE , в качестве языка можно выбрать Typecript, он нормально читается.
За список литературы отдельное спасибо!
ЗЫ Встеаки не Sensivity_list а Sensitivity_list
always @ (*)
begin
h_out <= rom[h_addr];
end
endmoduleПочему вы не используете SystemVerilog конструкции? Позволило бы избежать ошибки выше.
Весьма интересное решение. Сначала мне подумалось, что такой способ реализации многопоточности сильно ущербен, так как делает невозможным одновременное исполнение нескольких hart-ов (иначе это приведет к коллизиям). Но потом подумалось еще, и мне кажется это весьма простым способом сделать многопоточность незаморачиваясь с разграничением доступа к общим ресурсам (память, csr).
Теперь жду описание того, как реализовать в такой схеме контроллер прерываний и обработчик исключений. Напомню, что в спецификации RISC-V прерывания и исключения это одна и та же сущность. Как это должно работать не нарушая спецификацию.
Напоминает многоядерную систему с общей памятью, в которой арбитр доступа к памяти перенесен в ядро процессора :) Интересно было бы сравнить 8-миядерный однопоточный с одноядерным 8-мипоточным по площади и частоте. Судя по реализации XCORE одному потоку гарантируется 1/8 времени минимум. Хотя при этом нужно еще уметь исполнять первый поток когда второй остановился. Итого чтобы один поток имел 100 МГц , вся система должна работать на 800 МГц. Решение прикольное.
у XMOS в зависимости от ядра(или от микроархитектуры ) 4х или 5ти стадийный конвейер, соответственно одиночный поток (единственный активный когда) получает 1/4 или 1/5 тактовой частоты.
Многопоточный софт-процессор с архитектурой RISC-V… немного размышлений