Где проходит граница между RISC и CISC?

Другие микроконтроллеры и микропроцессоры, не попавшие в предыдущие разделы

Moderator: Shaos

vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

HardWareMan wrote:Т.е. если команд мало и они "одноклеточные" то это RISC. И наоборот.
По моему немного не так. У ARM-а команды:

mcr 15, 0, r0, cr2, cr0, {0}
add r0, r1, r1, lsl #3
ldr r0, [r1, r2, lsl #2]

голову сломаешь, как будто ты не программу пишешь, а трогаешь руками внутренности процессора.

Одноклеточные команды у X86

mov ax, bx
mul cx
lodsw
stosd
push 12
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

mul далеко не одноклеточная.
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Я слово "одноклеточная" понял как "без аргументов".
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

vinxru wrote:голову сломаешь, как будто ты не программу пишешь, а трогаешь руками внутренности процессора.
Вот это ты в самую точку попал! Но зато это так упрощает схемотехнику! :o

И я в принципе говорю о самодельном процессоре, хотя Шаос несколько неверно
обозначил тему как RISC vs CISC.

Вот я делал прикидку работы с АЛУ в 4-битном варианте...

Image

Здесь я прикидывал систему команд, как более привычную нам и похожую на 8080.

То есть, для выполнения операции, скажем, сложения это работает так, (в мнемониках 8080):

Code: Select all

MVI A,55H
MVI B,33H; - один из регистров РОН
ADD B
Так вот, чтобы реализовать все эти ADD, ADC, и т.д. приходится заюзать много кодов
операции из 16 возможных и вводить префиксы...

И я вот думаю - а если сделать чисто по RISC - принципам?

На входы S0-S3 прицепить ещё один регистр - регистр операции - S.

Тогда все возможные операции АЛУ выполняются аппаратно типовой операцией записи в регистр.

И рассмотренный выше код будет выглядеть как:

Code: Select all

MVI A,55H
MVI B,33H; - один из регистров РОН
MVI S,KOP; - код операции сложения
iLavr
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Я делал такой код команды:

2 бита. Аргумент 1 (регистр A, регистр ADDR, регистр DATA, константа)
2 бита. Аргумент 2 (регистр A, регистр ADDR, регистр DATA, регистр IP)
2 бита. Код АЛУ (сложение, NAND, OR, ROR)
2 бита. Результат (регистр A, регистр ADDR, регистр DATA, регистр IP)
2 бита. Условие (без условий, С, NC, Z)
Остальные биты - константа.

Причем, из этих команд можно отобрать нужные и записать в ПЗУ. Тогда код команды сократится.

И команда выполняется за два такта. Первый такт собственно сама команда, второй такт вычисляется IP = IP + 1.

Только если в первом такте был изменен IP, второй такт не выполняется

А если условие не соответствует флагам, не выполняется первый такт.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

У меня обращение в память не вырисовывается за одинаковое число тактов со всеми командами... :(

Для этого нужен один здоровый 12-битный регистр...
А с ним приходиться общаться через 4-битную внутреннюю магистраль.

Поэтому я и предложил Шаосу архитектуру 16х16 или 32х32.
Когда размер регистра и размер шины адреса совпадают, то RISC архитектуру
сделать довольно просто.


PS. Это, кстати, и есть, на мой взгляд, причина того, что 4-битники все делают в основном на 256 байт памяти.
Last edited by Lavr on 30 Apr 2013 13:43, edited 1 time in total.
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote: И я в принципе говорю о самодельном процессоре, хотя Шаос несколько неверно
обозначил тему как RISC vs CISC.
Переименовал...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

В оригинале фраза, на которую я ссылаюсь, звучала вот в таком контексте:
Главными требованиями архитектуры RISC являются:
1. Любая операция должна выполняться за один такт.
2. Система команд должна содержать минимальное количество наиболее часто используемых команд одинаковой длины.
3. Операции обработки данных реализуются только в формате регистр-регистр. Обмен между регистрами и памятью выполняется только командами загрузки-записи.
В дальнейшем эти требования были несколько смягчены. Выполнение команды за один такт стало трактоваться, как загрузка конвейера команд в темпе "команда за такт". Набор команд современных RISC-процессоров возрос.
Незыблемым для архитектуры RISC остается только требование: обработка данных ведется только командами в формате регистр-регистр.
Среди других особенностей RISC архитектур следует отметить:
- наличие достаточно большого файла РОН–ов (32 и более регистров),
- для обработки используются трехадресные регистровые команды,
- команды регистр/память используются только для загрузки (Ld) РОН из памяти и сохранения (ST) содержимого РОН в памяти,
- как следствие упрощения команд, использование аппаратной, а не микропрограммной логики выполнения команд.
...
Позднее было отмечено, что наиболее значимая характеристика RISC в разделении инструкций для обработки данных и обращения к памяти — обращение к памяти идёт только через инструкции load и store, а все прочие инструкции ограничены внутренними регистрами. Это упростило архитектуру процессоров: позволило инструкциям иметь фиксированную длину, упростило конвейеры и изолировало логику, имеющую дело с задержками при доступе к памяти, только в двух инструкциях. В результате RISC-архитектуры стали называть также архитектурами load/store.
iLavr
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Сейчас у X86 процессоров (их 64-битных потомков) то же куча регистров

RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15

и они почти равнозначны (почти POH). Кстати они 64 бита, т.е. их объем в байтах такой же как у ARM

И трехадресные команды то же проскакивают.

IMUL EAX, EBX, 10 ; EAX = EBX*10
LEA EAX, [EBX+ECX*8] ; EAX = EBX+ECX*8
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

vinxru wrote:Я слово "одноклеточная" понял как "без аргументов".
под "одноклеточностью" я подразумевал их элементарность. Т.е. пересылка из регистр в регистр - одноклеточная. Сложение 2 регистров, разрядность которых совпадает с разрядностью АЛУ - тоже. А вот относительный переход, который требует вычисления адреса уже нет. Ну а у умножения там вообще целая вереница микрокода.
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

HardWareMan wrote:Сложение 2 регистров, разрядность которых совпадает с разрядностью АЛУ - тоже. А вот относительный переход, который требует вычисления адреса уже нет.
Относительный переход, это же сложение IP с константой. Если IP совпадает с разрядностью АЛУ, то тоже должно быть просто.
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Я тут подумал, что Pentium 4 1.4 ГГц с конвеером длиной 20 стадий, выполняет одиночную команду со скоростью 70 Мгц. То есть время от загрузки из памяти до выполнения.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

vinxru wrote:Я тут подумал, что Pentium 4 1.4 ГГц с конвеером длиной 20 стадий, выполняет одиночную команду со скоростью 70 Мгц. То есть время от загрузки из памяти до выполнения.
это почему?
Я тут за главного - если что шлите мыло на me собака shaos точка net