My dream CPU

V. Примерни програми

Част 1. Hello world програми.


Тези програми демонстрират работата на основни инструкции. Обясняват какво се случва в конвейерите за инструкции и модулите за изчисления.

1. Hello world 1

Тази програма демонстрира сборът на две числа и записът на резултата в паметта.

0 I:rA <-- #2

2 I:rB <-- #3

4 I:AplsB --> M300


Ред 0 регистър rA на целочисленият конвейер се зарежда с 2. Това е непосредствена адресация.
Ред 2 регистър rB на целочисленият конвейер се зарежда с 3. Също непосредствена адресация.
Ред 4 извършва се операцията rA + rB и се записва резултата на адрес 300.

Ще проследим изпълнението на програмата такт по такт и ще наблюдаваме какво се случва във всяка степен на конвейера, както и в другите модули. Състоянието на конвейерите е видимо в ExLog секцията на дебъгера/емулатора.

Такт 1
На първият такт степен 1 прочита кода на операцията на първата инструкция
M100 I: rA <-- #. Втора и трета степен бездействат, те са в състояние empty.

Такт 2
Първа степен прочита и операнда на първата инструкция. Тя вижда че втора степен бездейства и запълва направо входящите регистри на 2-ра степен. 3- та степен бездейства. Шината за данни е освободена от 1-ва степен.

Такт 3
Първа степен прочита кодът на операцията на втората инструкция M102 I: rB <-- #. Трета степен е изпълнила операцията си и rA на целочисленият конвейер има стойност 2. Трета степен бездейста. Шината е заета от 1-ва степен на конвейера.

Такт 4
Първа степен прочита операнда на втората инструкция. Втора степен бездейства, затова инструкцията и операнда за записани направо в нейните входящи регистри. Трета степен бездейства. Шината е освободена от 1-ва степен.

Такт 5
Първа степен прочита кодът на операцията на 3-тата инструкция M104 I: AplsB --> M. Втора степен е изпълнила операцията и rB има стойност 3. Шината е заета от 1-ва степен. Трета степен бездейства.

Такт 6
Първа степен прочита и операнда на инструкцията и е записала цялата инструкция с операнда във входните регистри на 2-ра степен. Трета бездейства. Шината за данни е освободена.

Такт 7
Първа степен вече е прочела директивата ENDPRG, тя означава край на програма. Втора степен е предала команда на конвейера за целочислени изчисления да извърши събиране. Вижда се Int Calc Conveyer за opcode е получил AplsB. Init t показва за колко тактови импулса се извършва това пресмятане, в случаят 2. Time показва колко тактови импулса остават до края на изчислението. IdCache показва на кой адрес в кеш паметта за целочислени резултати ще се получи резултата, в случаят 0. Трета степен бездейства.

Такт 8
Конвейерът за целочислени опрации работи, всички други бездействат.

Такт 9
Изчислението е готово. Резултатът 5 е записан в кеш паметта.

Такт 10
Втора степен на конвейера предава на 3-та I: AplsB --> M; adr:300, 5. Трета степен трябва на адрес 300 да запише 5.

Такт 11
Трета степен записва на адрес 300 числото 5

Край

Да при традиционното обръщение към паметта за писане или четене, на единият тактов сигнал се предава адресът с който ще се работи и съответните управляващи сигнали и на следващият такт се прехвърлят данните. Тук на положителният фронт се предава адресът, на отрицателният фронт на тактовият импулс се извършва преносът на данни, четене или писане.



2. Hello world 2

Тази програма демонстрира сборът на две числа с плаваща запетая. Разполагането им започва от адрес 1000. Резултата се поставя в адрес 1004.

0 A: rBs1 <-- #1000

2 D: rA <-- M[rBs1, ]0

4 D: rB <-- M[rBs1, ]2

6 D: AplsB --> M[rBs1, ]4


Данни

1000 2.0

1001 0.4

1002 5.0

1003 0.7


В ред 0 rBs1 на адресният модул се зарежда с 1000. Непосредствена адресация. Ред2 rA на модулът за изчисления с плаваща запетая ще се зареди от адрес 1000. Имаме индексна адресация по rBs1 който в момента има стоност 1000.

Ред 4 rB на модулът за изчисления с плаваща запетая ще се зареди от адрес 1002. Имаме индексна адресация по rBs1 който в момента има стоност 1000, но имаме и операнд 2, който се прибавя към индекса за да се получи ефективен адрес.

Ред 6 извършва се събиране на rA и rB от модула за изчисления с плаваща запетая. Резултатът се записва в адрес 1004. Индексна адресация по rBs1 и операнд 4.

Край

Като резултат от тази програма на адрес 1004 е записано числото 8.1.