[an error occurred while processing this directive]
|
Ну зачем же так сразу - при кратности 1 бит читать сначала 1 бит, его анализировать... Беру минимальный размер например 8 бит, и в этих восьми битах кодирую фиксированные длины всех инструкций. Исходя из этого байта (показывающего класс команды) предекодер анализирует методы адресации (и их наличие вообще), и, если надо, к фиксированной длине вычисленной в части 1 прибавляет длину операндов. Естественно все это комбинаторно. Результатом работы предекодера является длина в битах, код операции, методы адресации и прочее. То есть команда, "разделанная" на запчасти, удобные для дальнейшего декодирования, и она отправляется в первую стадию конвейера, декодирование. Ну а длина команды поступает в FIFO инструкций, у которого вход 32-битный (например), выход 64-битный (допустим нет инструкций длиннее 64 бит), причем с побитным продвижением данных по этому FIFO. Данные продвигаются по FIFO так, чтобы на 64-битном выходе в старших битах всегда были те самые минимальные 8 бит инструкции. Ну а FETCH производится тогда, когда в FIFO свободно >=32 бит. Итого при среднем размере команды <=32 бит имеем однотактное исполнение. При этом я не вижу какой либо разницы для сложности ДЕКОДЕРА, какую кратность размера имеют инструкции. Кратность оказывает влияние на сложность построения FIFO инструкций (IBQ по-техасски).
P.S. А учетверялка удвоенной тактовой была в ADSP. Как помнится их маркировка типа NBST-320 показывала как раз внутреннюю тактовую, поделив которую на 4, можно было узнать ту, на которой исполнялись инструкции, и которая есть удвоенная кварцевая. Ну а при тех технологиях залезть выше 300 мгц это было очень непросто.
E-mail: info@telesys.ru