From 3d9ea175cdc84a52db2ea587757c3d542318aefd Mon Sep 17 00:00:00 2001 From: Kacper Date: Sun, 7 Jun 2020 23:23:13 +0100 Subject: [PATCH] Working on debugging The multiplier uses a 2 port ROM. For some reason, I cannot generate one on my machine and so I cannot change the exusting LUT ROM to remove the register outputs. If someone else can do it (Ben), that would be great. --- CPUProject.bdf | 665 +++++++++++++++++++++++++++++++++++++++---------- CPUProject.qsf | 14 +- CPUProject.qws | Bin 4121 -> 3795 bytes DECODE.v | 38 +-- instr.mif | 132 +++++----- 5 files changed, 624 insertions(+), 225 deletions(-) diff --git a/CPUProject.bdf b/CPUProject.bdf index 6f5e7e6..91e3542 100644 --- a/CPUProject.bdf +++ b/CPUProject.bdf @@ -39,7 +39,7 @@ refer to the applicable agreement for further details. (input) (rect 176 704 344 720) (text "INPUT" (rect 125 0 153 10)(font "Arial" (font_size 6))) - (text "SM_rst" (rect 5 0 40 12)(font "Arial" )) + (text "SM_rst" (rect 5 0 39 12)(font "Arial" )) (pt 168 8) (drawing (line (pt 84 12)(pt 109 12)) @@ -355,95 +355,372 @@ refer to the applicable agreement for further details. (line (pt 78 12)(pt 82 8)) ) ) -(symbol - (rect 600 -8 816 136) - (text "ram_instr" (rect 81 0 144 16)(font "Arial" (font_size 10))) - (text "RAMi" (rect 8 128 33 140)(font "Arial" )) - (port - (pt 0 32) - (input) - (text "data[15..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) - (text "data[15..0]" (rect 4 18 64 32)(font "Arial" (font_size 8))) - (line (pt 0 32)(pt 88 32)(line_width 3)) - ) - (port - (pt 0 48) - (input) - (text "wren" (rect 0 0 30 14)(font "Arial" (font_size 8))) - (text "wren" (rect 4 34 34 48)(font "Arial" (font_size 8))) - (line (pt 0 48)(pt 88 48)) - ) - (port - (pt 0 64) - (input) - (text "address[10..0]" (rect 0 0 82 14)(font "Arial" (font_size 8))) - (text "address[10..0]" (rect 4 50 86 64)(font "Arial" (font_size 8))) - (line (pt 0 64)(pt 88 64)(line_width 3)) - ) - (port - (pt 0 112) - (input) - (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) - (text "clock" (rect 4 98 33 112)(font "Arial" (font_size 8))) - (line (pt 0 112)(pt 80 112)) - ) - (port - (pt 0 128) - (input) - (text "clken" (rect 0 0 29 14)(font "Arial" (font_size 8))) - (text "clken" (rect 4 114 33 128)(font "Arial" (font_size 8))) - (line (pt 0 128)(pt 16 128)) - ) - (port - (pt 216 32) - (output) - (text "q[15..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) - (text "q[15..0]" (rect 177 18 219 32)(font "Arial" (font_size 8))) - (line (pt 216 32)(pt 136 32)(line_width 3)) - ) +(pin + (output) + (rect 1424 -112 1600 -96) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "R0_count" (rect 90 0 137 12)(font "Arial" )) + (pt 0 8) (drawing - (text "16 bits" (rect 109 24 121 57)(font "Arial" )(vertical)) - (text "2048 words" (rect 120 12 132 67)(font "Arial" )(vertical)) - (text "Block type: AUTO" (rect 48 130 137 142)(font "Arial" )) - (line (pt 104 24)(pt 136 24)) - (line (pt 136 24)(pt 136 96)) - (line (pt 136 96)(pt 104 96)) - (line (pt 104 96)(pt 104 24)) - (line (pt 118 58)(pt 123 63)) - (line (pt 118 62)(pt 123 57)) - (line (pt 88 27)(pt 96 27)) - (line (pt 96 27)(pt 96 39)) - (line (pt 96 39)(pt 88 39)) - (line (pt 88 39)(pt 88 27)) - (line (pt 88 34)(pt 90 36)) - (line (pt 90 36)(pt 88 38)) - (line (pt 80 36)(pt 88 36)) - (line (pt 96 32)(pt 104 32)(line_width 3)) - (line (pt 88 43)(pt 96 43)) - (line (pt 96 43)(pt 96 55)) - (line (pt 96 55)(pt 88 55)) - (line (pt 88 55)(pt 88 43)) - (line (pt 88 50)(pt 90 52)) - (line (pt 90 52)(pt 88 54)) - (line (pt 80 52)(pt 88 52)) - (line (pt 96 48)(pt 104 48)) - (line (pt 88 59)(pt 96 59)) - (line (pt 96 59)(pt 96 71)) - (line (pt 96 71)(pt 88 71)) - (line (pt 88 71)(pt 88 59)) - (line (pt 88 66)(pt 90 68)) - (line (pt 90 68)(pt 88 70)) - (line (pt 80 68)(pt 88 68)) - (line (pt 96 64)(pt 104 64)(line_width 3)) - (line (pt 80 112)(pt 80 36)) - (line (pt 0 0)(pt 217 0)) - (line (pt 217 0)(pt 217 146)) - (line (pt 0 146)(pt 217 146)) - (line (pt 0 0)(pt 0 146)) - (line (pt 0 0)(pt 0 0)) - (line (pt 0 0)(pt 0 0)) - (line (pt 0 0)(pt 0 0)) - (line (pt 0 0)(pt 0 0)) + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 80 1600 96) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "s4[1..0]" (rect 90 0 127 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1512 272 1688 288) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "ALU_out[15..0]" (rect 90 0 160 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 -64 1600 -48) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "R2_en" (rect 90 0 120 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 -48 1600 -32) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "R3_en" (rect 90 0 120 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 -32 1600 -16) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "R4_en" (rect 90 0 120 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 -16 1600 0) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "R5_en" (rect 90 0 120 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 0 1600 16) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "R6_en" (rect 90 0 120 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 16 1600 32) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "R7_en" (rect 90 0 120 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 32 1600 48) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "s1[2..0]" (rect 90 0 124 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 48 1600 64) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "s2[2..0]" (rect 90 0 124 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 64 1600 80) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "s3[2..0]" (rect 90 0 124 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1440 96 1616 112) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "RAMd_wren" (rect 90 0 149 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 112 1600 128) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "RAMd_en" (rect 90 0 137 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 128 1600 144) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "RAMi_en" (rect 90 0 133 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 144 1600 160) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "ALU_en" (rect 90 0 128 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 160 1600 176) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "E2" (rect 90 0 101 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 176 1600 192) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "stack_en" (rect 90 0 132 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 192 1600 208) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "stack_rst" (rect 90 0 132 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1424 208 1600 224) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "stack_rw" (rect 90 0 132 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1512 320 1688 336) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "COND" (rect 90 0 119 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1512 288 1692 304) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "RAMD_out[15..0]" (rect 90 0 174 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) + ) +) +(pin + (output) + (rect 1512 304 1688 320) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "stack_out[15..0]" (rect 90 0 165 17)(font "Intel Clear" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)) + (line (pt 52 4)(pt 78 4)) + (line (pt 52 12)(pt 78 12)) + (line (pt 52 12)(pt 52 4)) + (line (pt 78 4)(pt 82 8)) + (line (pt 82 8)(pt 78 12)) + (line (pt 78 12)(pt 82 8)) ) ) (symbol @@ -517,7 +794,7 @@ refer to the applicable agreement for further details. (pt 184 32) (output) (text "result[15..0]" (rect 0 0 59 12)(font "Arial" )) - (text "result[15..0]" (rect 114 27 163 39)(font "Arial" )) + (text "result[15..0]" (rect 114 27 173 39)(font "Arial" )) (line (pt 184 32)(pt 168 32)(line_width 3)) ) (drawing @@ -595,7 +872,7 @@ refer to the applicable agreement for further details. (pt 184 32) (output) (text "result[15..0]" (rect 0 0 59 12)(font "Arial" )) - (text "result[15..0]" (rect 114 27 163 39)(font "Arial" )) + (text "result[15..0]" (rect 114 27 173 39)(font "Arial" )) (line (pt 184 32)(pt 168 32)(line_width 3)) ) (drawing @@ -673,7 +950,7 @@ refer to the applicable agreement for further details. (pt 184 32) (output) (text "result[15..0]" (rect 0 0 59 12)(font "Arial" )) - (text "result[15..0]" (rect 114 27 163 39)(font "Arial" )) + (text "result[15..0]" (rect 114 27 173 39)(font "Arial" )) (line (pt 184 32)(pt 168 32)(line_width 3)) ) (drawing @@ -716,7 +993,7 @@ refer to the applicable agreement for further details. (pt 184 32) (output) (text "result[15..0]" (rect 0 0 59 12)(font "Arial" )) - (text "result[15..0]" (rect 114 27 163 39)(font "Arial" )) + (text "result[15..0]" (rect 114 27 173 39)(font "Arial" )) (line (pt 184 32)(pt 168 32)(line_width 3)) ) (drawing @@ -1111,21 +1388,21 @@ refer to the applicable agreement for further details. (pt 152 32) (output) (text "FETCH" (rect 0 0 36 12)(font "Arial" )) - (text "FETCH" (rect 101 27 131 39)(font "Arial" )) + (text "FETCH" (rect 101 27 137 39)(font "Arial" )) (line (pt 152 32)(pt 136 32)) ) (port (pt 152 48) (output) (text "EXEC1" (rect 0 0 34 12)(font "Arial" )) - (text "EXEC1" (rect 103 43 131 55)(font "Arial" )) + (text "EXEC1" (rect 103 43 137 55)(font "Arial" )) (line (pt 152 48)(pt 136 48)) ) (port (pt 152 64) (output) (text "EXEC2" (rect 0 0 34 12)(font "Arial" )) - (text "EXEC2" (rect 103 59 131 71)(font "Arial" )) + (text "EXEC2" (rect 103 59 137 71)(font "Arial" )) (line (pt 152 64)(pt 136 64)) ) (drawing @@ -1175,21 +1452,21 @@ refer to the applicable agreement for further details. (pt 184 32) (output) (text "Dout[15..0]" (rect 0 0 55 12)(font "Arial" )) - (text "Dout[15..0]" (rect 117 27 163 39)(font "Arial" )) + (text "Dout[15..0]" (rect 117 27 172 39)(font "Arial" )) (line (pt 184 32)(pt 168 32)(line_width 3)) ) (port (pt 184 48) (output) (text "empty" (rect 0 0 31 12)(font "Arial" )) - (text "empty" (rect 137 43 163 55)(font "Arial" )) + (text "empty" (rect 137 43 168 55)(font "Arial" )) (line (pt 184 48)(pt 168 48)) ) (port (pt 184 64) (output) (text "full" (rect 0 0 15 12)(font "Arial" )) - (text "full" (rect 151 59 163 71)(font "Arial" )) + (text "full" (rect 151 59 166 71)(font "Arial" )) (line (pt 184 64)(pt 168 64)) ) (drawing @@ -1386,6 +1663,97 @@ refer to the applicable agreement for further details. (rectangle (rect 16 16 192 384)) ) ) +(symbol + (rect 600 -8 816 136) + (text "ram_instr" (rect 81 0 144 16)(font "Arial" (font_size 10))) + (text "RAMi" (rect 8 128 33 140)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[15..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 4 18 64 32)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 88 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "wren" (rect 0 0 30 14)(font "Arial" (font_size 8))) + (text "wren" (rect 4 34 34 48)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 88 48)) + ) + (port + (pt 0 64) + (input) + (text "address[10..0]" (rect 0 0 82 14)(font "Arial" (font_size 8))) + (text "address[10..0]" (rect 4 50 86 64)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 88 64)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 4 98 33 112)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 80 112)) + ) + (port + (pt 0 128) + (input) + (text "clken" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clken" (rect 4 114 33 128)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 16 128)) + ) + (port + (pt 216 32) + (output) + (text "q[15..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[15..0]" (rect 177 18 219 32)(font "Arial" (font_size 8))) + (line (pt 216 32)(pt 136 32)(line_width 3)) + ) + (drawing + (text "16 bits" (rect 109 24 121 57)(font "Arial" )(vertical)) + (text "2048 words" (rect 120 12 132 67)(font "Arial" )(vertical)) + (text "Block type: AUTO" (rect 48 130 137 142)(font "Arial" )) + (line (pt 104 24)(pt 136 24)) + (line (pt 136 24)(pt 136 96)) + (line (pt 136 96)(pt 104 96)) + (line (pt 104 96)(pt 104 24)) + (line (pt 118 58)(pt 123 63)) + (line (pt 118 62)(pt 123 57)) + (line (pt 88 27)(pt 96 27)) + (line (pt 96 27)(pt 96 39)) + (line (pt 96 39)(pt 88 39)) + (line (pt 88 39)(pt 88 27)) + (line (pt 88 34)(pt 90 36)) + (line (pt 90 36)(pt 88 38)) + (line (pt 80 36)(pt 88 36)) + (line (pt 96 32)(pt 104 32)(line_width 3)) + (line (pt 88 43)(pt 96 43)) + (line (pt 96 43)(pt 96 55)) + (line (pt 96 55)(pt 88 55)) + (line (pt 88 55)(pt 88 43)) + (line (pt 88 50)(pt 90 52)) + (line (pt 90 52)(pt 88 54)) + (line (pt 80 52)(pt 88 52)) + (line (pt 96 48)(pt 104 48)) + (line (pt 88 59)(pt 96 59)) + (line (pt 96 59)(pt 96 71)) + (line (pt 96 71)(pt 88 71)) + (line (pt 88 71)(pt 88 59)) + (line (pt 88 66)(pt 90 68)) + (line (pt 90 68)(pt 88 70)) + (line (pt 80 68)(pt 88 68)) + (line (pt 96 64)(pt 104 64)(line_width 3)) + (line (pt 80 112)(pt 80 36)) + (line (pt 0 0)(pt 217 0)) + (line (pt 217 0)(pt 217 146)) + (line (pt 0 146)(pt 217 146)) + (line (pt 0 0)(pt 0 146)) + (line (pt 0 0)(pt 0 0)) + (line (pt 0 0)(pt 0 0)) + (line (pt 0 0)(pt 0 0)) + (line (pt 0 0)(pt 0 0)) + ) +) (connector (pt 856 192) (pt 936 192) @@ -1478,12 +1846,6 @@ refer to the applicable agreement for further details. (pt 936 416) (pt 880 416) ) -(connector - (text "instr[15..10]" (rect 890 384 945 401)(font "Intel Clear" )) - (pt 936 400) - (pt 880 400) - (bus) -) (connector (text "CARRY" (rect 1122 352 1157 369)(font "Intel Clear" )) (pt 1120 368) @@ -1865,22 +2227,12 @@ refer to the applicable agreement for further details. (pt 592 592) (bus) ) -(connector - (pt 1120 336) - (pt 1216 336) - (bus) -) (connector (text "s4[1..0]" (rect 1186 288 1220 305)(font "Intel Clear" )) (pt 1216 304) (pt 1176 304) (bus) ) -(connector - (pt 1400 304) - (pt 1416 304) - (bus) -) (connector (pt 136 792) (pt 1416 792) @@ -1912,11 +2264,6 @@ refer to the applicable agreement for further details. (pt 936 576) (pt 880 576) ) -(connector - (pt 1120 512) - (pt 1184 512) - (bus) -) (connector (pt 1184 352) (pt 1184 512) @@ -1937,11 +2284,6 @@ refer to the applicable agreement for further details. (pt 1160 320) (bus) ) -(connector - (pt 1216 320) - (pt 1160 320) - (bus) -) (connector (text "R0_count" (rect 1386 -120 1430 -103)(font "Intel Clear" )) (pt 1376 -104) @@ -2157,16 +2499,6 @@ refer to the applicable agreement for further details. (pt 1176 616) (pt 1232 616) ) -(connector - (pt 1416 304) - (pt 1416 496) - (bus) -) -(connector - (pt 1416 496) - (pt 1416 792) - (bus) -) (connector (text "PC[15..0]" (rect 1186 648 1229 665)(font "Intel Clear" )) (pt 1232 664) @@ -2313,10 +2645,73 @@ refer to the applicable agreement for further details. (bus) ) (connector + (text "instr[15..0]" (rect 882 -120 931 -103)(font "Intel Clear" )) (pt 872 -104) (pt 1168 -104) (bus) ) +(connector + (text "ALU_out[15..0]" (rect 1130 320 1200 337)(font "Intel Clear" )) + (pt 1120 336) + (pt 1216 336) + (bus) +) +(connector + (pt 1400 304) + (pt 1416 304) + (bus) +) +(connector + (pt 1416 304) + (pt 1416 496) + (bus) +) +(connector + (pt 1416 496) + (pt 1416 792) + (bus) +) +(connector + (text "stack_out[15..0]" (rect 1122 496 1197 513)(font "Intel Clear" )) + (pt 1120 512) + (pt 1184 512) + (bus) +) +(connector + (text "RAMd_out[15..0]" (rect 1170 304 1250 321)(font "Intel Clear" )) + (pt 1216 320) + (pt 1160 320) + (bus) +) +(connector + (text "ALU_out[15..0]" (rect 1448 264 1518 281)(font "Intel Clear" )) + (pt 1440 280) + (pt 1512 280) + (bus) +) +(connector + (text "stack_out[15..0]" (rect 1450 296 1525 313)(font "Intel Clear" )) + (pt 1512 312) + (pt 1440 312) + (bus) +) +(connector + (text "RAMd_out[15..0]" (rect 1442 280 1522 297)(font "Intel Clear" )) + (pt 1512 296) + (pt 1432 296) + (bus) +) +(connector + (text "COND" (rect 1450 312 1479 329)(font "Intel Clear" )) + (pt 1512 328) + (pt 1440 328) +) +(connector + (text "instr[14..9]" (rect 890 384 939 401)(font "Intel Clear" )) + (pt 936 400) + (pt 880 400) + (bus) +) (junction (pt 856 192)) (junction (pt 136 320)) (junction (pt 136 352)) diff --git a/CPUProject.qsf b/CPUProject.qsf index 21608dd..8f13577 100644 --- a/CPUProject.qsf +++ b/CPUProject.qsf @@ -38,16 +38,13 @@ set_global_assignment -name FAMILY "Cyclone IV E" set_global_assignment -name DEVICE AUTO -set_global_assignment -name TOP_LEVEL_ENTITY CPUProject +set_global_assignment -name TOP_LEVEL_ENTITY test set_global_assignment -name ORIGINAL_QUARTUS_VERSION 18.1.0 set_global_assignment -name PROJECT_CREATION_TIME_DATE "12:38:11 MAY 20, 2020" set_global_assignment -name LAST_QUARTUS_VERSION "18.1.0 Standard Edition" set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS ON set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL -set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top -set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top -set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top set_global_assignment -name VERILOG_FILE LIFOstack.v set_global_assignment -name VERILOG_FILE alu.v set_global_assignment -name MIF_FILE LUTSquares.mif @@ -68,4 +65,11 @@ set_global_assignment -name BDF_FILE ALU_top.bdf set_global_assignment -name VERILOG_FILE mux_8x16.v set_global_assignment -name VERILOG_FILE mux_3x16.v set_global_assignment -name VECTOR_WAVEFORM_FILE Waveform.vwf -set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file +set_global_assignment -name BDF_FILE test.bdf +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top +set_global_assignment -name VECTOR_WAVEFORM_FILE Waveform1.vwf +set_global_assignment -name QIP_FILE LUT1.qip +set_global_assignment -name QIP_FILE LUT4.qip \ No newline at end of file diff --git a/CPUProject.qws b/CPUProject.qws index 5cfbbc20dfe5600dd97e1fc03872129475e1f03c..e25b56fe2bd379c8b75d190bb87eee0b2550f345 100644 GIT binary patch delta 595 zcmZ8eO-n*S6g@Ng6csDNO`jCCvk#x8K7)d&AVQF!U5ir7MFc@mn+hY`m&~d^&@vb9 z&28(pfwbsnl%4yYST>LI=A8RAGxt7Dy-hsCmA^JO6CJ`Pwy=S`?6vB2C5!@2ae)O~ z0tga0T+x<+4F@S4ksV{676(Nn$ZTZEQe-La%P5g0xhIfjOcqOoP3182ro#orstuw; z;7fkJW$M=Why-adxzSypaI+qcg(O?`l*D7v8rFYDAC}%8{3|MP`Z_zwk zuO^^B#;jG!?QT^$;#(kEo0rI53gTF0)c&&EfIaXaTc=msQ7io^UFcMx{(iRU6CAFQbV=98h^Fx^d^yHFJ%JKTgUBx zhTTrH$1(|<^RdYa^b}DhOYln*S!Ny4;<)oDbSJ^W>Hx9+QRs78dk>t|x88;Qe7ijG Izn07W0BYQVbpQYW delta 337 zcmcaCJ5ynTHY3|a9c5E71|J4b1~&$OhGK>ihD3&BhHM5shB5{Q1_1^a23H1WpbUtH zh;ac`*@j8Wv}UuN0)h8>n_y}V$dvguTS;o!E zEWa6*fmSduyklTsst4k;U>-VuvNTJ`W@+w~jB-p35XCJ2A&OD?o69*2ndFHuj1}x^ zpd%JBPF~KaJ=v2ji-~FT1HY70o{|~f*WdYEZ&6^q7BN$bHqF}(94HVl1 O;{lcZ17Q%Ki2(qLO-KR& diff --git a/DECODE.v b/DECODE.v index 00c7b30..0566ed0 100644 --- a/DECODE.v +++ b/DECODE.v @@ -41,7 +41,7 @@ module DECODE wire LOAD = msb & ~ls; wire STORE = msb & ls; wire UJMP = ~msb & ~op[5] & ~op[4] & ~op[3] & ~op[2]; - wire JMP = ~msb & (~op[5] & ~op[4] & ~op[3] & op[2]) | (~op[5] & ~op[4] & op[3] & ~op[2]); + wire JMP = ~msb & ((~op[5] & ~op[4] & ~op[3] & op[2]) | (~op[5] & ~op[4] & op[3] & ~op[2])); wire MUL = ~msb & ~op[5] & op[4] & op[3] & op[2] & ~op[1] & ~op[0]; wire MLA = ~msb & ~op[5] & op[4] & op[3] & op[2] & ~op[1] & op[0]; wire MLS = ~msb & ~op[5] & op[4] & op[3] & op[2] & op[1] & ~op[0]; @@ -50,24 +50,24 @@ module DECODE wire NOP = ~msb & op[5] & op[4] & op[3] & op[2] & op[1] & ~op[0]; wire STP = ~msb & op[5] & op[4] & op[3] & op[2] & op[1] & op[0]; - assign R0_count = EXEC1 & (~(UJMP | JMP & ~COND_result | STP)); - assign R0_en = EXEC1 & (~(STORE | NOP | STP | LOAD) & ~Rd[2] & ~Rd[1] & ~Rd[0] | UJMP | JMP & COND_result) | EXEC2 & LOAD & ~Rls[2] & ~Rls[1] & ~Rls[0] | EXEC2 & (MUL | MLA | MLS | POP) & ~Rd[2] & ~Rd[1] & ~Rd[0]; - assign R1_en = ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & ~Rd[2] & ~Rd[1] & Rd[0] | EXEC2 & LOAD & ~Rls[2] & ~Rls[1] & Rls[0] | EXEC2 & (MUL | MLA | MLS | POP) & ~Rd[2] & ~Rd[1] & Rd[0]; - assign R2_en = ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & ~Rd[2] & Rd[1] & ~Rd[0] | EXEC2 & LOAD & ~Rls[2] & Rls[1] & ~Rls[0] | EXEC2 & (MUL | MLA | MLS | POP) & ~Rd[2] & Rd[1] & ~Rd[0]; - assign R3_en = ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & ~Rd[2] & Rd[1] & Rd[0] | EXEC2 & LOAD & ~Rls[2] & Rls[1] & Rls[0] | EXEC2 & (MUL | MLA | MLS | POP) & ~Rd[2] & Rd[1] & Rd[0]; - assign R4_en = ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & Rd[2] & ~Rd[1] & ~Rd[0] | EXEC2 & LOAD & Rls[2] & ~Rls[1] & ~Rls[0] | EXEC2 & (MUL | MLA | MLS | POP) & Rd[2] & ~Rd[1] & ~Rd[0]; - assign R5_en = ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & Rd[2] & ~Rd[1] & Rd[0] | EXEC2 & LOAD & Rls[2] & ~Rls[1] & Rls[0] | EXEC2 & (MUL | MLA | MLS | POP) & Rd[2] & ~Rd[1] & Rd[0]; - assign R6_en = ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & Rd[2] & Rd[1] & ~Rd[0] | EXEC2 & LOAD & Rls[2] & Rls[1] & ~Rls[0] | EXEC2 & (MUL | MLA | MLS | POP) & Rd[2] & Rd[1] & ~Rd[0]; - assign R7_en = ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & Rd[2] & Rd[1] & Rd[0] | EXEC2 & LOAD & Rls[2] & Rls[1] & Rls[0] | EXEC2 & (MUL | MLA | MLS | POP) & Rd[2] & Rd[1] & Rd[0]; - assign s1[2] = EXEC1 & ((~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rs1[2]) | (STORE & Rls[2]) | (PSH & Rs1[2])); - assign s1[1] = EXEC1 & ((~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rs1[1]) | (STORE & Rls[1]) | (PSH & Rs1[1])); - assign s1[0] = EXEC1 & ((~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rs1[0]) | (STORE & Rls[0]) | (PSH & Rs1[0])); - assign s2[2] = EXEC1 & ((~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP)) & Rs2[2]); - assign s2[1] = EXEC1 & ((~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP)) & Rs2[1]); - assign s2[0] = EXEC1 & ((~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP)) & Rs2[0]); - assign s3[2] = EXEC1 & ((~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP)) & Rd[2]); - assign s3[1] = EXEC1 & ((~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP)) & Rd[1]); - assign s3[0] = EXEC1 & ((~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP)) & Rd[0]); + assign R0_count = EXEC1 & (~(UJMP | (JMP & ~COND_result) | STP)); + assign R0_en = (EXEC1 & (~(STORE | NOP | STP | LOAD) & ~Rd[2] & ~Rd[1] & ~Rd[0] | UJMP | JMP & COND_result)) | (EXEC2 & LOAD & ~Rls[2] & ~Rls[1] & ~Rls[0]) | (EXEC2 & (MUL | MLA | MLS | POP) & ~Rd[2] & ~Rd[1] & ~Rd[0]); + assign R1_en = (EXEC1 & ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & ~Rd[2] & ~Rd[1] & Rd[0]) | (EXEC2 & LOAD & ~Rls[2] & ~Rls[1] & Rls[0]) | (EXEC2 & (MUL | MLA | MLS | POP) & ~Rd[2] & ~Rd[1] & Rd[0]); + assign R2_en = (EXEC1 & ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & ~Rd[2] & Rd[1] & ~Rd[0]) | (EXEC2 & LOAD & ~Rls[2] & Rls[1] & ~Rls[0]) | (EXEC2 & (MUL | MLA | MLS | POP) & ~Rd[2] & Rd[1] & ~Rd[0]); + assign R3_en = (EXEC1 & ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & ~Rd[2] & Rd[1] & Rd[0]) | (EXEC2 & LOAD & ~Rls[2] & Rls[1] & Rls[0]) | (EXEC2 & (MUL | MLA | MLS | POP) & ~Rd[2] & Rd[1] & Rd[0]); + assign R4_en = (EXEC1 & ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & Rd[2] & ~Rd[1] & ~Rd[0]) | (EXEC2 & LOAD & Rls[2] & ~Rls[1] & ~Rls[0]) | (EXEC2 & (MUL | MLA | MLS | POP) & Rd[2] & ~Rd[1] & ~Rd[0]); + assign R5_en = (EXEC1 & ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & Rd[2] & ~Rd[1] & Rd[0]) | (EXEC2 & LOAD & Rls[2] & ~Rls[1] & Rls[0]) | (EXEC2 & (MUL | MLA | MLS | POP) & Rd[2] & ~Rd[1] & Rd[0]); + assign R6_en = (EXEC1 & ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & Rd[2] & Rd[1] & ~Rd[0]) | (EXEC2 & LOAD & Rls[2] & Rls[1] & ~Rls[0]) | (EXEC2 & (MUL | MLA | MLS | POP) & Rd[2] & Rd[1] & ~Rd[0]); + assign R7_en = (EXEC1 & ~(UJMP | JMP | STORE | LOAD | MUL | MLA | MLS | NOP | STP | POP) & Rd[2] & Rd[1] & Rd[0]) | (EXEC2 & LOAD & Rls[2] & Rls[1] & Rls[0]) | (EXEC2 & (MUL | MLA | MLS | POP) & Rd[2] & Rd[1] & Rd[0]); + assign s1[2] = (~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rs1[2]) | (STORE & Rls[2]) | (PSH & Rs1[2]); + assign s1[1] = (~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rs1[1]) | (STORE & Rls[1]) | (PSH & Rs1[1]); + assign s1[0] = (~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rs1[0]) | (STORE & Rls[0]) | (PSH & Rs1[0]); + assign s2[2] = (~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rs2[2]); + assign s2[1] = (~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rs2[1]); + assign s2[0] = (~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rs2[0]); + assign s3[2] = (~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rd[2]); + assign s3[1] = (~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rd[1]); + assign s3[0] = (~(UJMP | JMP | STORE | LOAD | NOP | STP | PSH | POP) & Rd[0]); assign s4[1] = POP | PSH; assign s4[0] = ~(LOAD | POP | PSH); assign RAMd_wren = EXEC1 & STORE; diff --git a/instr.mif b/instr.mif index 86abeb0..d4f2f08 100644 --- a/instr.mif +++ b/instr.mif @@ -17,73 +17,73 @@ WIDTH=16; DEPTH=2048; -ADDRESS_RADIX=HEX; +ADDRESS_RADIX=UNS; DATA_RADIX=HEX; CONTENT BEGIN - 000 : 8800; - 001 : 9001; - 002 : 26D0; - 003 : 291A; - 004 : 2D00; - 005 : 3161; - 006 : 3440; - 007 : 3993; - 008 : 3AA5; - 009 : D003; - 00A : 3CE2; - 00B : A003; - 00C : 9804; - 00D : 38A5; - 00E : 3FC0; - 00F : 419F; - 010 : 304F; - 011 : 5008; - 012 : 5028; - 013 : 284F; - 014 : 43F7; - 015 : 3540; - 016 : 47F5; - 017 : 484D; - 018 : 8806; - 019 : 0040; - 01A : B800; - 01B : 8807; - 01C : 085A; - 01D : B800; - 01E : 8808; - 01F : 0A7D; - 020 : B800; - 021 : 8809; - 022 : 0C53; - 023 : B801; - 024 : 880A; - 025 : B00B; - 026 : 0E70; - 027 : B800; - 028 : 880C; - 029 : 1063; - 02A : B800; - 02B : 880D; - 02C : 126D; - 02D : B800; - 02E : 880E; - 02F : 147A; - 030 : B800; - 031 : 880F; - 032 : 5340; - 033 : 53C0; - 034 : 1678; - 035 : B800; - 036 : 1863; - 037 : 1A5A; - 038 : 1FB8; - 039 : 7C00; - 03A : 1C77; - 03B : 204C; - 03C : A810; - 03D : 226D; - 03E : 246D; - 03F : 7E00; - [040..7FF] : 0000; + 0 : 8800; + 1 : 9001; + 2 : 26D0; + 3 : 291A; + 4 : 2D20; + 5 : 3161; + 6 : 3448; + 7 : 3993; + 8 : 3AA5; + 9 : D003; + 10 : 3CE2; + 11 : A003; + 12 : 9804; + 13 : 38A5; + 14 : 3FC0; + 15 : 419F; + 16 : 304F; + 17 : 5008; + 18 : 5028; + 19 : 284F; + 20 : 43F7; + 21 : 3568; + 22 : 47F5; + 23 : 484D; + 24 : 8806; + 25 : 0040; + 26 : B800; + 27 : 8807; + 28 : 085A; + 29 : B800; + 30 : 8808; + 31 : 0A7D; + 32 : B800; + 33 : 8809; + 34 : 0C53; + 35 : B801; + 36 : 880A; + 37 : B00B; + 38 : 0E70; + 39 : B800; + 40 : 880C; + 41 : 1063; + 42 : B800; + 43 : 880D; + 44 : 126D; + 45 : B800; + 46 : 880E; + 47 : 147A; + 48 : B800; + 49 : 880F; + 50 : 5340; + 51 : 53C0; + 52 : 1678; + 53 : B800; + 54 : 1863; + 55 : 1A5A; + 56 : 1FB8; + 57 : 7C00; + 58 : 1C77; + 59 : 204C; + 60 : A810; + 61 : 226D; + 62 : 246D; + 63 : 7E00; + [64..2047] : 0000; END;