ΠΠ°ΡΡ ΠΎΠΌΠ΅Π½ΠΊΠΎ ΠΠΈΡΠΈΠ»Π» ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠΎΠ²ΠΈΡ P3212
asm | risc | harv | mc | instr | binary | stream | mem | cstr | prob2
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
Π₯ΠΎΡΡ Π² Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π° ΡΠΎΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ instr
, Π±ΡΠ»Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° tick
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ΅Π±Ρ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ
ΠΠΎ Π²Π°ΡΠΈΠ°Π½ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄Π»Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ RISC
<program> ::= { <section> }
<section> ::= "." "text" { <instruction> }
| "." "data" { <data_definition> }
<instruction> ::=
| "halt"
| "nop"
| "jmp" <label>
| "beq" <register> "," <register> "," <label>
| "bne" <register> "," <register> "," <label>
| "bgt" <register> "," <register> "," <label>
| "blt" <register> "," <register> "," <label>
| "add" <register> "," <register> "," { <label> | <number> | <register> }
| "sub" <register> "," <register> "," { <label> | <number> | <register> }
| "and" <register> "," <register> "," { <label> | <number> | <register> }
| "mul" <register> "," <register> "," { <label> | <number> | <register> }
| "lw" <register> "," <register>
| "sw" <register> "," <register>
| <label> ":"
<data_definition> ::= <identifier> ":" <data_value>
| <comment>
<data_value> ::= <string>
| <number>
| <comment>
<register> ::= "r" <number>
<operand> ::= <register>
| "#" <number>
| <identifier>
<label> ::= "." <identifier>
<identifier> ::= <letter> { <letter> | <digit> }
| <identifier> "." <identifier>
<number> ::= <digit> { <digit> }
<string> ::= "\"" { <character> } "\""
<letter> ::= "a" | "b" | "c" | ... | "z"
| "A" | "B" | "C" | ... | "Z"
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<character> ::= <any printable ASCII character except quotation mark>
<comment> ::= "//" { <any printable ASCII character> }
lw a, b
- Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΠ° Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅b
Π² ΡΠ΅Π³ΠΈΡΡΡa
.sw a, b
- ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°a
ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅b
.add a, b, c
- ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²b
,Ρ
, ΠΈ Π·Π°ΠΏΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π² ΡΠ΅Π³ΠΈΡΡΡa
.sub a, b, c
- Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°b
ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ
, ΠΈ Π·Π°ΠΏΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π² ΡΠ΅Π³ΠΈΡΡΡa
.and a, b, c
- Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²b
,Ρ
, ΠΈ Π·Π°ΠΏΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π² ΡΠ΅Π³ΠΈΡΡΡa
.mul a b c
- ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²b
,Ρ
, ΠΈ Π·Π°ΠΏΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π² ΡΠ΅Π³ΠΈΡΡΡa
.beq a b c
- ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²a
,b
ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΌΠ΅ΡΠΊΠΈc
, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΡΠ°Π²Π½Ρbne a b c
- ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²a
,b
ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΌΠ΅ΡΠΊΠΈc
, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π½Π΅ ΡΠ°Π²Π½Ρblt a b c
- ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²a
,b
ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΌΠ΅ΡΠΊΠΈc
, Π΅ΡΠ»ΠΈa
<b
bgt a b c
- ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²a
,b
ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΌΠ΅ΡΠΊΠΈc
, Π΅ΡΠ»ΠΈa
>b
jmp a
- ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΌΠ΅ΡΠΊΠΈa
- ΠΠΎΠ΄Π΅Π»Ρ ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΠ΅Ρ ΠΠ°ΡΠ²Π°ΡΠ΄ΡΠΊΠΎΠΉ Π°Ρ ΠΈΡΠ΅ΠΊΡΡΡΠ΅
- ΠΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ
Register File
- ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· ΡΠ΅Π³ΠΈΡΡΡΡ (Π»Π΅Π²ΡΠΉ Π²ΡΡ
ΠΎΠ΄ ΠΈΠ·
Register file
- ΡΡΠΎ Π°Π΄ΡΠ΅Ρ, Π° ΠΏΡΠ°Π²ΡΠΉ - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ)) - ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π»ΠΈΠ½Ρ - 32 Π±ΠΈΡΠ°
- ΠΠΎΠ΄Π΅Π»Ρ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ 16 ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²
ALU
Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΠΌΡΡΠΈ- Π Π΅Π³ΠΈΡΡΡ 0 -
Zero register
(Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ 0) - Π Π΅Π³ΠΈΡΡΡ 15 - Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ )
- ΠΠ΄ΡΠ΅ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ· ΡΠ΅Π±Ρ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΡΠ΅ 16 Π±ΠΈΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°
- ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ
- ΠΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ 3 Π²ΠΈΠ΄Π° ΠΏΠ°ΠΌΡΡΠΈ: ΠΠ°ΠΌΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΠ°ΠΌΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΠ°ΠΌΡΡΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄
- Π Π°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΠΈΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° - 32 Π±ΠΈΡΠ°
Instruction memory
+-----------------------------+
| 00 binary instr |
| 01 binary instr |
| ... |
+-----------------------------+
Data Memory
+-----------------------------+ +-------+
| 00 value | <--|IN_BUF |
| 01 value | <--|OUT_BUF|
| ... | +-------+
| 10 value |
| 11 value |
| ... |
+-----------------------------+
Microprogram memory
+------------------------------+
| 00 Signals |
| 01 Signals |
| ... |
+------------------------------+
Opcode | RB | R1 | Address/Number | Flag | Operation |
---|---|---|---|---|---|
7 bits | 4 bits | 4 bits | 16 bits | 1 bit | = 32 bit |
Opcode | RB | R1 | 16 * [0] | 1 | Write word operation |
Opcode | RB | R1 | 16 * [0] | 0 | Load word operation |
Opcode | RB | R1 | R2 | 0 | Math operations (reg-reg) |
Opcode | RB | R1 | Number | 1 | Math operations (reg-imm) |
Opcode | RB | R1 | Address | 0 | Branch operations |
Opcode | 0000 | 0000 | Address | 1 | Branch (Jump) operation |
Opcode | 0000 | 0000 | 16 * [0] | 0 | HALT/NOP operation |
- Instruction fetch (3 ΡΠ°ΠΊΡΠ°)
- Insruction excution (N ΡΠ°ΠΊΡΠΎΠ²)
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ | ΠΠΎΠ»-Π²ΠΎ ΡΠ°ΠΊΡΠΎΠ² | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|
add |
1-2 | rb[0] = r[1] + r[2] ΠΠΠ OP[2] -> r15, rb[0] = r1[1] + r15 |
mul |
1-2 | rb[0] = r[1] * r[2] ΠΠΠ OP[2] -> r15, rb[0] = r1[1] * r15 |
and |
1-2 | rb[0] = r[1] & r[2] ΠΠΠ OP[2] -> r15, rb[0] = r1[1] & r15 |
sub |
1-2 | rb[0] = r[1] - r[2] ΠΠΠ OP[2] -> r15, rb[0] = r1[1] - r15 |
halt |
1 | ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ |
nop |
1 | No operation |
jmp [addr] |
1 | PC = OP[2] |
beq [addr] |
2 | r[0] - r[1] -> NZ, IF Z -> PC = OP[2] |
bne [addr] |
2 | r[0] - r[1] -> NZ, IF Z -> PC++ |
blt |
2 | r[0] - r[1] -> NZ, IF N -> PC = OP[2] |
bgt |
2 | r[0] - r[1] -> NZ, IF N -> PC++ |
lw |
2 | DATA_LINE = MEM[r[1]], rb[0] = DATA_LINE |
sw |
1 | MEM[RF[LEFT]] = RF[RIGHT] |
* rb[N] - ΡΠ΅Π³ΠΈΡΡΡ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ
* r[N] - ΡΠ΅Π³ΠΈΡΡΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ
* OP[2] - ΠΏΡΡΠΌΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΈΠ· Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ
* RF[LEFT | RIGHT] - ΠΏΡΠ°Π²ΡΠΉ Π»Π΅Π²ΡΠΉ Π²ΡΡ
ΠΎΠ΄ Register File
* DATA_LINE - ΡΠΈΠ½Π° Π΄Π°Π½Π½ΡΡ
, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Control Unit
, ALU
ΠΈ Data Memory
- HALT (ΡΠΈΠ³Π½Π°Π» ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ)
- LATCH_REG (Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°
RD
) - LATCH_REG0 (ΡΠΈΠ³Π½Π°Π» Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°
r0
) - LATCH_REG1 (ΡΠΈΠ³Π½Π°Π» Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°
r1
)
...
-
LATCH_REG14 (ΡΠΈΠ³Π½Π°Π» Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°
r14
) -
LATCH_REG15 (ΡΠΈΠ³Π½Π°Π» Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°
r15
) -
ALU_ADD (ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²
ALU
) -
ALU_SUB (ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ Π²ΡΡΠ΅ΡΠ°Π½ΠΈΡ Π²
ALU
) -
ALU_AND (ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π Π²
ALU
) -
ALU_MUL(ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ Π²
ALU
) -
LATCH_PC (ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
PC
) -
LATCH_MPC (ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
MCP
) -
LATCH_IR (ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
IR
) -
LATCH_OPERANDS (ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° Ρ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ)
-
LATCH_READ_MEM (ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° (Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΡ) Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π½Π° ΡΠΈΡΡ Π΄Π°Π½Π½ΡΡ )
-
LATCH_WRITE_MEM (ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΉΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ)
-
SEL_PC_ADDR (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ Π²ΡΠ±ΠΎΡ ΡΠΈΠ½Ρ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ Π΄Π»Ρ
PC
) -
SEL_PC_INC (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ ΠΈΠ½ΠΊΡΠΌΠ΅Π½ΡΠ° (+1) Π·Π½Π°ΡΠ΅Π½ΠΈΡ
PC
) -
SEL_MPC_ZERO (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
0
Π²MPC
) -
SEL_MPC_INC (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ
MPC
(+1 ΠΈΠ»ΠΈ +2)) -
SEL_MPC_IR (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
MPC
ΠΈΠ·IR
) -
SEL_TWICE_INC_IF_Z (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π», ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ°Π³ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°
MPC
Π²+2
, Π΅ΡΠ»ΠΈ ΡΠΈΠ³Π½Π°Π»Z = 1
) -
SEL_TWICE_INC_IF_N (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π», ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ°Π³ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°
MPC
Π²+2
, Π΅ΡΠ»ΠΈ ΡΠΈΠ³Π½Π°Π»N = 1
) -
SEL_ONE_INC (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π» Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π³Π° ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°
MPC
Π²+1
) -
SEL_SRC_MEM (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π», ΡΡΠΎΠ±Ρ
Register File
ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ Π΄Π°Π½Π½ΡΡ ) -
SEL_SRC_ALU (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π», ΡΡΠΎΠ±Ρ
Register File
ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ALU
) -
SEL_SRC_CU (ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π», ΡΡΠΎΠ±Ρ
Register File
ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·Control Unit
(ΠΏΡΡΠΌΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°)) -
SEL_REG_L (Π²ΡΠ±ΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΠ° Π½Π° Π»Π΅Π²ΡΠΉ Π²ΡΡ ΠΎΠ΄
Register File
Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°r1
) -
SEL_REG_R (Π²ΡΠ±ΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΠ° Π½Π° Π»Π΅Π²ΡΠΉ Π²ΡΡ ΠΎΠ΄
Register File
Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°r2
)
ΠΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ Π² microcode.py
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ: translator.py <input_file> <target_code_file> <target_data_file> Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² ΠΌΠΎΠ΄ΡΠ»Π΅: translator.py
ΠΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ°Π³ΠΎΠ²:
-
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π²: Π€ΡΠ½ΠΊΡΠΈΡ
remove_comments
ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΡΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ. -
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΡΠΎΠΊΠ΅Π½Ρ: Π€ΡΠ½ΠΊΡΠΈΡ
tokenize
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. -
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π½Ρ: Π€ΡΠ½ΠΊΡΠΈΡ
convert_tokens_to_binary
ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π° ΡΡΠ½ΠΊΡΠΈΡconvert_data_tokens_to_binary
- Π΄Π°Π½Π½ΡΠ΅ -
ΠΠ°ΠΏΡΡΠΊ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ: ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ
main
ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ», Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠ΅Π»Π΅Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ mem-mapped IO
- ΠΠ²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΠ΅ΠΉΠΊΠ°ΠΌ
0
ΠΈ1
Data Memory
- ΠΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΡΠ΅ΠΉΠΊΠ°ΠΌ
0
ΠΈ1
ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ Π² Π±ΡΡΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ - ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π²Π²ΠΎΠ΄ΠΎΠΌ-Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ΅ ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΡΠΎ ΠΈ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ:
lw
,sw
- ΠΡΠ»ΠΈ Π²
in
Π±ΡΡΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ°ΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ - ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ
ΠΡΡ ΡΡ Π΅ΠΌΡ ΡΠ΅Π»Π΅ΠΊΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π΄Π΅ΡΡ
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΊΠ»Π°ΡΡΠ΅ DataPath
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ:
- ALU
- Register File
- Data Memory
- Instruction Memory
- IO Controller
Π‘ΠΈΠ³Π½Π°Π»Ρ:
- latch_register - Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
N
ΡΠ΅Π³ΠΈΡΡΡΠ° - operation - ΡΠΈΠ³Π½Π°Π» ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
ALU
- latch_pc - Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅
PC
- write_sig - Π·Π°ΡΠ΅Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ
- read_sig - Π²ΡΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π½Π° ΡΠΈΠ½Ρ Π΄Π°Π½Π½ΡΡ
Π€Π»Π°Π³ΠΈ:
- NZ - 2 Π±ΠΈΡΠΎΠ²ΡΠΉ ΡΠ»Π°Π³. 1 Π±ΠΈΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π°
N
, 2 Π±ΠΈΡ Π·Π°Z
Π Π΅Π³ΠΈΡΡΡ R0 ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ΄ΡΡΠΆΠΊΡ Π½Π° "0", ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ Π½Π΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ
Control Unit
ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΊΠ»Π°ΡΡΠ΅ ControlUnit
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠΊΡΠΎΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠΎΡΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ execute_signal
Π¦ΠΈΠΊΠ» ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ run_simulation. Π Π½Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ
Π‘ΠΈΠ³Π½Π°Π»Ρ sel_twice_inc_if_n
ΠΈ sel_twice_inc_if_z
ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠ½ΠΊΡΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠ»Π°Π³ΠΎΠ² N
, Z
Π‘ΠΈΠ³Π½Π°Π» sel_one_inc
ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ°Π³ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ° ΡΠ°Π²Π½ΡΠΉ 1
ΠΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ 24-Π±ΠΈΡΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌΠΈ
Decoder
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ opcode
Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ
ΠΠ»Ρ ΠΆΡΡΠ½Π°Π»Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ logging
.
ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΏΡΠΈ:
- ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠΈ Π»ΠΈΠΌΠΈΡΠ° ΡΠΈΠΊΠΎΠ²
- ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ
StopIteration
- Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡHALT
- ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΠΏΡΡΡΠΎΠΌΡ Π±ΡΡΠ΅ΡΡ
in
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ golden test-ΠΎΠ²
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° golden ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² golden_test.py
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ golden test-ΠΎΠ² Π»Π΅ΠΆΠΈΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ golden
ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΡ - poetry run pytest . -v
ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ golden test-ΠΎΠ² - poetry run pytest . -v --update-goldens
CI ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Github Actions:
name: Check Python
on:
push:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
pip3 install poetry
poetry install
- name: Run tests and collect coverage
run: |
poetry run coverage run -m pytest .
poetry run coverage report -m
env:
CI: true
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
pip3 install poetry
poetry install
- name: Check code formatting with Ruff
run: poetry run ruff format --check .
- name: Run Ruff linters
run: poetry run ruff check .
Π³Π΄Π΅:
poetry
- ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° Pyuthoncoverage
- ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΡΡΡΠ° ΠΎΠ± ΡΡΠΎΠ²Π½Π΅ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°pytest
- ΡΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ²ruff
- ΡΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠΈΠ»Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΡΠΈΠΌΠ΅Ρ ΠΆΡΡΠ½Π°Π»Π° ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ add
Instruction fetch ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠΊΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ 6: ADD
(2 ΡΠΈΠΊΠ°)
DEBUG machine:run_simulation Machine state: IR(0), MPC(1), PC(1), REGISTERS([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), NZ(0), TICKS(1), MC_COUNTER(5)
DEBUG machine:run_simulation Machine state: IR(6), MPC(2), PC(1), REGISTERS([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), NZ(0), TICKS(2), MC_COUNTER(9)
DEBUG machine:run_simulation Machine state: IR(6), MPC(6), PC(1), REGISTERS([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), NZ(0), TICKS(3), MC_COUNTER(11)
DEBUG machine:run_simulation Machine state: IR(6), MPC(7), PC(1), REGISTERS([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]), NZ(0), TICKS(4), MC_COUNTER(15)
...
ΠΡΡΠ½Π°Π» ΡΠ°Π±ΠΎΡΡ:
StopIteration reason: HALT
LOC: 6
Ticks: 26
Instructions executed: 6
Microprogram executed: 111
Output(int): [4]
Output(str): ['\x04']
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
poetry run pytest . -vv
============================================================================================ test session starts =============================================================================================
platform linux -- Python 3.12.3, pytest-7.4.4, pluggy-1.5.0 -- /home/kxrxh/Dev/ITMO/CA-Experiment/.venv/bin/python
cachedir: .pytest_cache
rootdir: /home/kxrxh/Dev/ITMO/ca-lab3
configfile: pyproject.toml
plugins: golden-0.2.2
collected 6 items
golden_test.py::test_translator_and_machine[golden/prob2.yml] PASSED [ 16%]
golden_test.py::test_translator_and_machine[golden/helloworld.yml] PASSED [ 33%]
golden_test.py::test_translator_and_machine[golden/hello_user.yml] PASSED [ 50%]
golden_test.py::test_translator_and_machine[golden/cat.yml] PASSED [ 66%]
golden_test.py::test_translator_and_machine[golden/add.yml] PASSED [ 83%]
golden_test.py::test_translator_and_machine[golden/all_instr.yml] PASSED [100%]
============================================================================================= 6 passed in 0.27s ==============================================================================================
| Π€ΠΠ | Π°Π»Π³ | LoC | code ΠΈΠ½ΡΡΡ. | ΡΠ°ΠΊΡ. | ΠΌΠΈΠΊΡΠΏ. |
| ΠΠ°ΡΡ
ΠΎΠΌΠ΅Π½ΠΊΠΎ ΠΠΈΡΠΈΠ»Π» ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠΎΠ²ΠΈΡ | add | 6 | 6 | 26 | 111 |
| ΠΠ°ΡΡ
ΠΎΠΌΠ΅Π½ΠΊΠΎ ΠΠΈΡΠΈΠ»Π» ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠΎΠ²ΠΈΡ | all_instr | 29 | 19 | 19 | 357 |
| ΠΠ°ΡΡ
ΠΎΠΌΠ΅Π½ΠΊΠΎ ΠΠΈΡΠΈΠ»Π» ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠΎΠ²ΠΈΡ | cat | 6 | 71 | 353 | 1451 |
| ΠΠ°ΡΡ
ΠΎΠΌΠ΅Π½ΠΊΠΎ ΠΠΈΡΠΈΠ»Π» ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠΎΠ²ΠΈΡ | hello_user | 13 | 63 | 303 | 1181 |
| ΠΠ°ΡΡ
ΠΎΠΌΠ΅Π½ΠΊΠΎ ΠΠΈΡΠΈΠ»Π» ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠΎΠ²ΠΈΡ | helloworld | 8 | 70 | 336 | 1320 |
| ΠΠ°ΡΡ
ΠΎΠΌΠ΅Π½ΠΊΠΎ ΠΠΈΡΠΈΠ»Π» ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠΎΠ²ΠΈΡ | prob2 | 16 | 244 | 1143 | 4676 |