ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1155949
Evgeny_CD, Архитектор (17.12.2021 23:50, просмотров: 1708)
[Последовательный суперскаляр]. Ключевая идея для embedded CPU 

Пусть у нас будет ядро, 200....1000 МГц. И пусть будет шина периферии, 30-50-100 МГц.


Вот процессор пишет в регистр периферии. Буфера для записи (даже в ARM926 их штук 8 было) или кеш отработают это, не тормозя процессор. Но нужна блокировка, если кто вдруг сразу прочитает по этом адресу - программная или аппаратная.


Вот процессор читает регистр периферии. И наступает жопа. Процессор замирает, пока не отработается чтение из регистра.


Пусть у нас будет "буфер чтения", несколько шт. В том такте, где у нас была команда "прочитать по адресу в регистре и положить в другой регистр", это пишется в буфер чтения. Регистр блокируется битом неготовности. Если кто полезет в регистр, все тормозится, прерывания и вызов, возврат из подпрограмм запрещены.


Если у нас нет обращения к регистру, то ничего не тормозится.


Когда периферийная шина отработала, и прочитанное попало в буфер чтения, то процессор на 1 такт тормозит все остальное, данные попадают в регистр, бит неготовности снимается.


Структура процессора несколько усложнится, но слабо, и сложных перекрестных зависимостей в этой структуре нет. Тактовая не упадет сильно.


Суперскаляр - это когда поток команд разбивается на несколько параллельных потоков, которые патаются исполнить независимо. И там есть такой механизм - если что-то не готово для исполнения, поток курит бамбук, другие работают. Но это намного более сложная структура. Это откуда такое название.


Идею можно расширить. Пусть у нас тактовая ядра в несколько раз выше тактовой внешней памяти. SAM9X60 - 600 Мгц ядро, 200 - SDRAM. Если мы хотим прочитать из памяти, а она не закеширована, но страница открыта - нужно отложить чтение на 5 тактов, скажем, делая что-то другое (например, записывая, или читая из закешированной области) мы сэкономим бесценные тактики. В среднем можно прилично съкономить. Можно также сократить размер кеша без потери скорости, что всегда полезно.


Если у нас ZBT, синхронная статическая память, то при грамотном проектировании можно вообще микроскопическим кешом обойтись.