OpenCores
URL https://opencores.org/ocsvn/neorv32/neorv32/trunk

Subversion Repositories neorv32

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /neorv32/trunk/rtl/core
    from Rev 35 to Rev 36
    Reverse comparison

Rev 35 → Rev 36

/neorv32_application_image.vhd
1,5 → 1,5
-- The NEORV32 Processor by Stephan Nolting, https://github.com/stnolting/neorv32
-- Auto-generated memory init file (for APPLICATION) from source file <blink_led/main.bin>
-- Auto-generated memory init file (for APPLICATION) from source file <cpu_test/main.bin>
 
library ieee;
use ieee.std_logic_1164.all;
6,7 → 6,7
 
package neorv32_application_image is
 
type application_init_image_t is array (0 to 669) of std_ulogic_vector(31 downto 0);
type application_init_image_t is array (0 to 3656) of std_ulogic_vector(31 downto 0);
constant application_init_image : application_init_image_t := (
00000000 => x"00000093",
00000001 => x"00000113",
35,648 → 35,3635
00000024 => x"00000e93",
00000025 => x"00000f13",
00000026 => x"00000f93",
00000027 => x"00002537",
00000028 => x"80050513",
00000029 => x"30051073",
00000030 => x"30401073",
00000031 => x"80002117",
00000032 => x"f8010113",
00000033 => x"ffc17113",
00000034 => x"00010413",
00000035 => x"80000197",
00000036 => x"77418193",
00000037 => x"00000597",
00000038 => x"08058593",
00000039 => x"30559073",
00000040 => x"f8000593",
00000041 => x"0005a023",
00000042 => x"00458593",
00000043 => x"feb01ce3",
00000044 => x"80000597",
00000045 => x"f5058593",
00000046 => x"84018613",
00000047 => x"00c5d863",
00000048 => x"00058023",
00000049 => x"00158593",
00000050 => x"ff5ff06f",
00000051 => x"00001597",
00000052 => x"9a858593",
00000053 => x"80000617",
00000054 => x"f2c60613",
00000055 => x"80000697",
00000056 => x"f2468693",
00000057 => x"00d65c63",
00000058 => x"00058703",
00000059 => x"00e60023",
00000060 => x"00158593",
00000061 => x"00160613",
00000062 => x"fedff06f",
00000063 => x"00000513",
00000064 => x"00000593",
00000065 => x"05c000ef",
00000066 => x"30047073",
00000067 => x"10500073",
00000068 => x"0000006f",
00000069 => x"ff810113",
00000070 => x"00812023",
00000071 => x"00912223",
00000072 => x"34202473",
00000073 => x"02044663",
00000074 => x"34102473",
00000075 => x"00041483",
00000076 => x"0034f493",
00000077 => x"00240413",
00000078 => x"34141073",
00000079 => x"00300413",
00000080 => x"00941863",
00000081 => x"34102473",
00000082 => x"00240413",
00000083 => x"34141073",
00000084 => x"00012483",
00000085 => x"00412403",
00000086 => x"00810113",
00000087 => x"30200073",
00000088 => x"00005537",
00000089 => x"ff010113",
00000090 => x"00000613",
00000091 => x"00000593",
00000092 => x"b0050513",
00000093 => x"00112623",
00000094 => x"00812423",
00000095 => x"478000ef",
00000096 => x"568000ef",
00000097 => x"02050a63",
00000098 => x"410000ef",
00000099 => x"78800513",
00000100 => x"500000ef",
00000101 => x"00000513",
00000102 => x"560000ef",
00000103 => x"00000413",
00000104 => x"0ff47513",
00000105 => x"554000ef",
00000106 => x"0c800513",
00000107 => x"554000ef",
00000108 => x"00140413",
00000109 => x"fedff06f",
00000110 => x"76400513",
00000111 => x"4d4000ef",
00000112 => x"00c12083",
00000113 => x"00812403",
00000114 => x"00000513",
00000115 => x"01010113",
00000116 => x"00008067",
00000117 => x"00000000",
00000118 => x"00000000",
00000119 => x"00000000",
00000120 => x"fc010113",
00000121 => x"02112e23",
00000122 => x"02512c23",
00000123 => x"02612a23",
00000124 => x"02712823",
00000125 => x"02a12623",
00000126 => x"02b12423",
00000127 => x"02c12223",
00000128 => x"02d12023",
00000129 => x"00e12e23",
00000130 => x"00f12c23",
00000131 => x"01012a23",
00000132 => x"01112823",
00000133 => x"01c12623",
00000134 => x"01d12423",
00000135 => x"01e12223",
00000136 => x"01f12023",
00000137 => x"34102773",
00000138 => x"34071073",
00000139 => x"342027f3",
00000140 => x"0807c663",
00000141 => x"00071683",
00000142 => x"00300593",
00000143 => x"0036f693",
00000144 => x"00270613",
00000145 => x"00b69463",
00000146 => x"00470613",
00000147 => x"34161073",
00000148 => x"00b00713",
00000149 => x"04f77a63",
00000150 => x"3e800793",
00000151 => x"000780e7",
00000152 => x"03c12083",
00000153 => x"03812283",
00000154 => x"03412303",
00000155 => x"03012383",
00000156 => x"02c12503",
00000157 => x"02812583",
00000158 => x"02412603",
00000159 => x"02012683",
00000160 => x"01c12703",
00000161 => x"01812783",
00000162 => x"01412803",
00000163 => x"01012883",
00000164 => x"00c12e03",
00000165 => x"00812e83",
00000166 => x"00412f03",
00000167 => x"00012f83",
00000168 => x"04010113",
00000169 => x"30200073",
00000170 => x"00279793",
00000171 => x"7a400713",
00000172 => x"00e787b3",
00000173 => x"0007a783",
00000174 => x"00078067",
00000175 => x"80000737",
00000176 => x"ffd74713",
00000177 => x"00e787b3",
00000178 => x"01000713",
00000179 => x"f8f766e3",
00000180 => x"00279793",
00000181 => x"7d400713",
00000182 => x"00e787b3",
00000183 => x"0007a783",
00000184 => x"00078067",
00000185 => x"800007b7",
00000186 => x"0007a783",
00000187 => x"f71ff06f",
00000188 => x"800007b7",
00000189 => x"0047a783",
00000190 => x"f65ff06f",
00000191 => x"800007b7",
00000192 => x"0087a783",
00000193 => x"f59ff06f",
00000194 => x"800007b7",
00000195 => x"00c7a783",
00000196 => x"f4dff06f",
00000197 => x"8101a783",
00000198 => x"f45ff06f",
00000199 => x"8141a783",
00000200 => x"f3dff06f",
00000201 => x"8181a783",
00000202 => x"f35ff06f",
00000203 => x"81c1a783",
00000204 => x"f2dff06f",
00000205 => x"8201a783",
00000206 => x"f25ff06f",
00000207 => x"8241a783",
00000208 => x"f1dff06f",
00000209 => x"8281a783",
00000210 => x"f15ff06f",
00000211 => x"82c1a783",
00000212 => x"f0dff06f",
00000213 => x"8301a783",
00000214 => x"f05ff06f",
00000215 => x"8341a783",
00000216 => x"efdff06f",
00000217 => x"8381a783",
00000218 => x"ef5ff06f",
00000219 => x"83c1a783",
00000220 => x"eedff06f",
00000221 => x"00000000",
00000222 => x"fe010113",
00000223 => x"01212823",
00000224 => x"00050913",
00000225 => x"00001537",
00000226 => x"00912a23",
00000227 => x"81850513",
00000228 => x"000014b7",
00000229 => x"00812c23",
00000230 => x"01312623",
00000231 => x"00112e23",
00000232 => x"01c00413",
00000233 => x"2ec000ef",
00000234 => x"a6448493",
00000235 => x"ffc00993",
00000236 => x"008957b3",
00000237 => x"00f7f793",
00000238 => x"00f487b3",
00000239 => x"0007c503",
00000240 => x"ffc40413",
00000241 => x"2bc000ef",
00000242 => x"ff3414e3",
00000243 => x"01c12083",
00000244 => x"01812403",
00000245 => x"01412483",
00000246 => x"01012903",
00000247 => x"00c12983",
00000248 => x"02010113",
00000249 => x"00008067",
00000250 => x"00001537",
00000251 => x"ff010113",
00000252 => x"81c50513",
00000253 => x"00112623",
00000254 => x"00812423",
00000255 => x"294000ef",
00000256 => x"34202473",
00000257 => x"00b00793",
00000258 => x"0487f463",
00000259 => x"800007b7",
00000260 => x"ffd7c793",
00000261 => x"00f407b3",
00000262 => x"01000713",
00000263 => x"00f77e63",
00000264 => x"00001537",
00000265 => x"99050513",
00000266 => x"268000ef",
00000267 => x"00040513",
00000268 => x"f49ff0ef",
00000269 => x"0400006f",
00000270 => x"00001737",
00000271 => x"00279793",
00000272 => x"9bc70713",
00000273 => x"00e787b3",
00000274 => x"0007a783",
00000275 => x"00078067",
00000276 => x"00001737",
00000277 => x"00241793",
00000278 => x"a0070713",
00000279 => x"00e787b3",
00000280 => x"0007a783",
00000281 => x"00078067",
00000282 => x"00001537",
00000283 => x"82450513",
00000284 => x"220000ef",
00000285 => x"00001537",
00000286 => x"9a850513",
00000287 => x"214000ef",
00000288 => x"34002573",
00000289 => x"ef5ff0ef",
00000290 => x"00001537",
00000291 => x"9b050513",
00000292 => x"200000ef",
00000293 => x"34302573",
00000294 => x"ee1ff0ef",
00000295 => x"00812403",
00000296 => x"00c12083",
00000297 => x"00001537",
00000298 => x"a5c50513",
00000299 => x"01010113",
00000300 => x"1e00006f",
00000301 => x"00001537",
00000302 => x"84450513",
00000303 => x"fb5ff06f",
00000304 => x"00001537",
00000305 => x"86050513",
00000306 => x"fa9ff06f",
00000307 => x"00001537",
00000308 => x"87450513",
00000309 => x"f9dff06f",
00000310 => x"00001537",
00000311 => x"88050513",
00000312 => x"f91ff06f",
00000313 => x"00001537",
00000314 => x"89850513",
00000315 => x"f85ff06f",
00000316 => x"00001537",
00000317 => x"8ac50513",
00000318 => x"f79ff06f",
00000319 => x"00001537",
00000320 => x"8c850513",
00000321 => x"f6dff06f",
00000322 => x"00001537",
00000323 => x"8dc50513",
00000324 => x"f61ff06f",
00000325 => x"00001537",
00000326 => x"8f050513",
00000327 => x"f55ff06f",
00000328 => x"00001537",
00000329 => x"90c50513",
00000330 => x"f49ff06f",
00000331 => x"00001537",
00000332 => x"92450513",
00000333 => x"f3dff06f",
00000334 => x"00001537",
00000335 => x"94050513",
00000336 => x"f31ff06f",
00000337 => x"00001537",
00000338 => x"95450513",
00000339 => x"f25ff06f",
00000340 => x"00001537",
00000341 => x"96850513",
00000342 => x"f19ff06f",
00000343 => x"00001537",
00000344 => x"97c50513",
00000345 => x"f0dff06f",
00000346 => x"00f00793",
00000347 => x"02a7e263",
00000348 => x"800007b7",
00000349 => x"00078793",
00000350 => x"00251513",
00000351 => x"00a78533",
00000352 => x"3e800793",
00000353 => x"00f52023",
00000354 => x"00000513",
00000355 => x"00008067",
00000356 => x"00100513",
00000357 => x"00008067",
00000358 => x"ff010113",
00000359 => x"00112623",
00000360 => x"00812423",
00000361 => x"00912223",
00000362 => x"301027f3",
00000363 => x"00079863",
00000364 => x"00001537",
00000365 => x"a3050513",
00000366 => x"0d8000ef",
00000367 => x"1e000793",
00000368 => x"30579073",
00000369 => x"00000413",
00000370 => x"01000493",
00000371 => x"00040513",
00000372 => x"00140413",
00000373 => x"0ff47413",
00000374 => x"f91ff0ef",
00000375 => x"fe9418e3",
00000376 => x"00c12083",
00000377 => x"00812403",
00000378 => x"00412483",
00000379 => x"01010113",
00000380 => x"00008067",
00000381 => x"fa002023",
00000382 => x"fe002683",
00000383 => x"00151513",
00000384 => x"00000713",
00000385 => x"04a6f263",
00000386 => x"000016b7",
00000387 => x"00000793",
00000388 => x"ffe68693",
00000389 => x"04e6e463",
00000390 => x"00167613",
00000391 => x"0015f593",
00000392 => x"01879793",
00000393 => x"01e61613",
00000394 => x"00c7e7b3",
00000395 => x"01d59593",
00000396 => x"00b7e7b3",
00000397 => x"00e7e7b3",
00000398 => x"10000737",
00000399 => x"00e7e7b3",
00000400 => x"faf02023",
00000401 => x"00008067",
00000402 => x"00170793",
00000403 => x"01079713",
00000404 => x"40a686b3",
00000405 => x"01075713",
00000406 => x"fadff06f",
00000407 => x"ffe78513",
00000408 => x"0fd57513",
00000409 => x"00051a63",
00000410 => x"00375713",
00000411 => x"00178793",
00000412 => x"0ff7f793",
00000413 => x"fa1ff06f",
00000414 => x"00175713",
00000415 => x"ff1ff06f",
00000416 => x"fa002783",
00000417 => x"fe07cee3",
00000418 => x"faa02223",
00000419 => x"00008067",
00000420 => x"ff010113",
00000421 => x"00812423",
00000422 => x"01212023",
00000423 => x"00112623",
00000424 => x"00912223",
00000425 => x"00050413",
00000426 => x"00a00913",
00000427 => x"00044483",
00000428 => x"00140413",
00000429 => x"00049e63",
00000430 => x"00c12083",
00000431 => x"00812403",
00000432 => x"00412483",
00000433 => x"00012903",
00000434 => x"01010113",
00000435 => x"00008067",
00000436 => x"01249663",
00000437 => x"00d00513",
00000438 => x"fa9ff0ef",
00000439 => x"00048513",
00000440 => x"fa1ff0ef",
00000441 => x"fc9ff06f",
00000442 => x"fe802503",
00000443 => x"01055513",
00000444 => x"00157513",
00000445 => x"00008067",
00000446 => x"f8a02223",
00000447 => x"00008067",
00000448 => x"00050593",
00000449 => x"fe002503",
00000450 => x"ff010113",
00000451 => x"00112623",
00000452 => x"00f55513",
00000453 => x"02c000ef",
00000454 => x"00051863",
00000455 => x"00c12083",
00000456 => x"01010113",
00000457 => x"00008067",
00000458 => x"00000013",
00000459 => x"00000013",
00000460 => x"00000013",
00000461 => x"00000013",
00000462 => x"fff50513",
00000463 => x"fddff06f",
00000464 => x"00050613",
00000465 => x"00000513",
00000466 => x"0015f693",
00000467 => x"00068463",
00000468 => x"00c50533",
00000469 => x"0015d593",
00000470 => x"00161613",
00000471 => x"fe0596e3",
00000472 => x"00008067",
00000473 => x"6f727245",
00000474 => x"4e202172",
00000475 => x"5047206f",
00000476 => x"75204f49",
00000477 => x"2074696e",
00000478 => x"746e7973",
00000479 => x"69736568",
00000480 => x"2164657a",
00000481 => x"0000000a",
00000482 => x"6e696c42",
00000483 => x"676e696b",
00000484 => x"44454c20",
00000485 => x"6d656420",
00000486 => x"7270206f",
00000487 => x"6172676f",
00000488 => x"00000a6d",
00000489 => x"000002e4",
00000490 => x"000002f0",
00000491 => x"000002fc",
00000492 => x"00000308",
00000493 => x"00000314",
00000494 => x"0000031c",
00000495 => x"00000324",
00000496 => x"0000032c",
00000497 => x"00000258",
00000498 => x"00000258",
00000499 => x"00000258",
00000500 => x"00000334",
00000501 => x"0000033c",
00000502 => x"00000258",
00000503 => x"00000258",
00000504 => x"00000258",
00000505 => x"00000344",
00000506 => x"00000258",
00000507 => x"00000258",
00000508 => x"00000258",
00000509 => x"0000034c",
00000510 => x"00000258",
00000511 => x"00000258",
00000512 => x"00000258",
00000513 => x"00000258",
00000514 => x"00000354",
00000515 => x"0000035c",
00000516 => x"00000364",
00000517 => x"0000036c",
00000518 => x"00007830",
00000519 => x"4554523c",
00000520 => x"0000203e",
00000521 => x"74736e49",
00000522 => x"74637572",
00000523 => x"206e6f69",
00000524 => x"72646461",
00000525 => x"20737365",
00000526 => x"6173696d",
00000527 => x"6e67696c",
00000528 => x"00006465",
00000529 => x"74736e49",
00000530 => x"74637572",
00000531 => x"206e6f69",
00000532 => x"65636361",
00000533 => x"66207373",
00000534 => x"746c7561",
00000535 => x"00000000",
00000536 => x"656c6c49",
00000537 => x"206c6167",
00000538 => x"74736e69",
00000539 => x"74637572",
00000540 => x"006e6f69",
00000541 => x"61657242",
00000542 => x"696f706b",
00000543 => x"0000746e",
00000544 => x"64616f4c",
00000545 => x"64646120",
00000546 => x"73736572",
00000547 => x"73696d20",
00000548 => x"67696c61",
00000549 => x"0064656e",
00000550 => x"64616f4c",
00000551 => x"63636120",
00000552 => x"20737365",
00000553 => x"6c756166",
00000554 => x"00000074",
00000555 => x"726f7453",
00000556 => x"64612065",
00000557 => x"73657264",
00000558 => x"696d2073",
00000559 => x"696c6173",
00000560 => x"64656e67",
00000561 => x"00000000",
00000562 => x"726f7453",
00000563 => x"63612065",
00000564 => x"73736563",
00000565 => x"75616620",
00000566 => x"0000746c",
00000567 => x"69766e45",
00000568 => x"6d6e6f72",
00000569 => x"20746e65",
00000570 => x"6c6c6163",
00000571 => x"00000000",
00000572 => x"6863614d",
00000573 => x"20656e69",
00000574 => x"74666f73",
00000575 => x"65726177",
00000576 => x"746e6920",
00000577 => x"75727265",
00000578 => x"00007470",
00000579 => x"6863614d",
00000580 => x"20656e69",
00000581 => x"656d6974",
00000582 => x"6e692072",
00000583 => x"72726574",
00000584 => x"00747075",
00000585 => x"6863614d",
00000586 => x"20656e69",
00000587 => x"65747865",
00000588 => x"6c616e72",
00000589 => x"746e6920",
00000590 => x"75727265",
00000591 => x"00007470",
00000592 => x"74736146",
00000593 => x"746e6920",
00000594 => x"75727265",
00000595 => x"30207470",
00000596 => x"00000000",
00000597 => x"74736146",
00000598 => x"746e6920",
00000599 => x"75727265",
00000600 => x"31207470",
00000601 => x"00000000",
00000602 => x"74736146",
00000603 => x"746e6920",
00000604 => x"75727265",
00000605 => x"32207470",
00000606 => x"00000000",
00000607 => x"74736146",
00000608 => x"746e6920",
00000609 => x"75727265",
00000610 => x"33207470",
00000611 => x"00000000",
00000612 => x"6e6b6e55",
00000613 => x"206e776f",
00000614 => x"70617274",
00000615 => x"75616320",
00000616 => x"203a6573",
00000617 => x"00000000",
00000618 => x"50204020",
00000619 => x"00003d43",
00000620 => x"544d202c",
00000621 => x"3d4c4156",
00000622 => x"00000000",
00000623 => x"00000514",
00000624 => x"00000420",
00000625 => x"00000420",
00000626 => x"00000420",
00000627 => x"00000520",
00000628 => x"00000420",
00000629 => x"00000420",
00000630 => x"00000420",
00000631 => x"0000052c",
00000632 => x"00000420",
00000633 => x"00000420",
00000634 => x"00000420",
00000635 => x"00000420",
00000636 => x"00000538",
00000637 => x"00000544",
00000638 => x"00000550",
00000639 => x"0000055c",
00000640 => x"00000468",
00000641 => x"000004b4",
00000642 => x"000004c0",
00000643 => x"000004cc",
00000644 => x"000004d8",
00000645 => x"000004e4",
00000646 => x"000004f0",
00000647 => x"000004fc",
00000648 => x"00000420",
00000649 => x"00000420",
00000650 => x"00000420",
00000651 => x"00000508",
00000652 => x"4554523c",
00000653 => x"4157203e",
00000654 => x"4e494e52",
00000655 => x"43202147",
00000656 => x"43205550",
00000657 => x"73205253",
00000658 => x"65747379",
00000659 => x"6f6e206d",
00000660 => x"76612074",
00000661 => x"616c6961",
00000662 => x"21656c62",
00000663 => x"522f3c20",
00000664 => x"003e4554",
00000665 => x"33323130",
00000666 => x"37363534",
00000667 => x"42413938",
00000668 => x"46454443",
00000027 => x"05136509",
00000028 => x"10738005",
00000029 => x"10733005",
00000030 => x"21173040",
00000031 => x"01138000",
00000032 => x"7113f821",
00000033 => x"0413ffc1",
00000034 => x"01970001",
00000035 => x"81938000",
00000036 => x"05977761",
00000037 => x"85930000",
00000038 => x"907306a5",
00000039 => x"05933055",
00000040 => x"a023f800",
00000041 => x"05910005",
00000042 => x"feb01de3",
00000043 => x"81818593",
00000044 => x"86418613",
00000045 => x"00c5d663",
00000046 => x"00058023",
00000047 => x"bfdd0585",
00000048 => x"00004597",
00000049 => x"84858593",
00000050 => x"80000617",
00000051 => x"f3860613",
00000052 => x"81818693",
00000053 => x"00d65963",
00000054 => x"00058703",
00000055 => x"00e60023",
00000056 => x"06050585",
00000057 => x"0513bfc5",
00000058 => x"05930000",
00000059 => x"00ef0000",
00000060 => x"707304a0",
00000061 => x"00733004",
00000062 => x"a0011050",
00000063 => x"c0221161",
00000064 => x"2473c226",
00000065 => x"43633420",
00000066 => x"24730204",
00000067 => x"14833410",
00000068 => x"888d0004",
00000069 => x"10730409",
00000070 => x"04133414",
00000071 => x"17630030",
00000072 => x"24730094",
00000073 => x"04093410",
00000074 => x"34141073",
00000075 => x"44124482",
00000076 => x"00730121",
00000077 => x"00003020",
00000078 => x"45017139",
00000079 => x"de064581",
00000080 => x"d64edc22",
00000081 => x"d84ada26",
00000082 => x"d256d452",
00000083 => x"ce5ed05a",
00000084 => x"10efcc62",
00000085 => x"450153f0",
00000086 => x"10ef4581",
00000087 => x"65155230",
00000088 => x"45814601",
00000089 => x"b0050513",
00000090 => x"2ad010ef",
00000091 => x"45814501",
00000092 => x"1a9010ef",
00000093 => x"557d55fd",
00000094 => x"1e5010ef",
00000095 => x"05136509",
00000096 => x"10ef0205",
00000097 => x"65093330",
00000098 => x"04050513",
00000099 => x"329010ef",
00000100 => x"05136509",
00000101 => x"69850605",
00000102 => x"31d010ef",
00000103 => x"141010ef",
00000104 => x"149010ef",
00000105 => x"400010ef",
00000106 => x"2c8010ef",
00000107 => x"04498593",
00000108 => x"10ef4501",
00000109 => x"842a3220",
00000110 => x"04498593",
00000111 => x"10ef4505",
00000112 => x"87aa3160",
00000113 => x"04498593",
00000114 => x"943e4509",
00000115 => x"308010ef",
00000116 => x"859387aa",
00000117 => x"450d0449",
00000118 => x"10ef943e",
00000119 => x"87aa2fa0",
00000120 => x"04498593",
00000121 => x"943e4511",
00000122 => x"2ec010ef",
00000123 => x"859387aa",
00000124 => x"45150449",
00000125 => x"10ef943e",
00000126 => x"87aa2de0",
00000127 => x"04498593",
00000128 => x"943e4519",
00000129 => x"2d0010ef",
00000130 => x"859387aa",
00000131 => x"451d0449",
00000132 => x"10ef943e",
00000133 => x"87aa2c20",
00000134 => x"04498593",
00000135 => x"943e4521",
00000136 => x"2b4010ef",
00000137 => x"859387aa",
00000138 => x"45290449",
00000139 => x"10ef943e",
00000140 => x"87aa2a60",
00000141 => x"04498593",
00000142 => x"943e4525",
00000143 => x"298010ef",
00000144 => x"859387aa",
00000145 => x"45290449",
00000146 => x"10ef943e",
00000147 => x"87aa28a0",
00000148 => x"04498593",
00000149 => x"943e4531",
00000150 => x"27c010ef",
00000151 => x"859387aa",
00000152 => x"45350449",
00000153 => x"10ef943e",
00000154 => x"87aa26e0",
00000155 => x"04498593",
00000156 => x"943e4539",
00000157 => x"260010ef",
00000158 => x"859387aa",
00000159 => x"453d0449",
00000160 => x"10ef943e",
00000161 => x"05b32520",
00000162 => x"996300a4",
00000163 => x"450d1005",
00000164 => x"3bd010ef",
00000165 => x"451d842a",
00000166 => x"3b5010ef",
00000167 => x"452d87aa",
00000168 => x"10ef943e",
00000169 => x"87aa3ab0",
00000170 => x"943e4541",
00000171 => x"3a1010ef",
00000172 => x"454587aa",
00000173 => x"10ef943e",
00000174 => x"87aa3970",
00000175 => x"943e4549",
00000176 => x"38d010ef",
00000177 => x"454d85aa",
00000178 => x"10ef942e",
00000179 => x"942a3830",
00000180 => x"6509e055",
00000181 => x"10050513",
00000182 => x"1dd010ef",
00000183 => x"30046073",
00000184 => x"34241073",
00000185 => x"82018913",
00000186 => x"00092583",
00000187 => x"05136509",
00000188 => x"10ef1185",
00000189 => x"2b831c30",
00000190 => x"6785fa00",
00000191 => x"00fbfbb3",
00000192 => x"0a0b9463",
00000193 => x"00092783",
00000194 => x"05136509",
00000195 => x"07851145",
00000196 => x"800004b7",
00000197 => x"20236a19",
00000198 => x"849300f9",
00000199 => x"10ef0004",
00000200 => x"44011970",
00000201 => x"0a134b01",
00000202 => x"6c09073a",
00000203 => x"a0296a85",
00000204 => x"0b630405",
00000205 => x"00010354",
00000206 => x"342b1073",
00000207 => x"01441793",
00000208 => x"0147e7b3",
00000209 => x"100fc09c",
00000210 => x"80e70000",
00000211 => x"27f30004",
00000212 => x"fff93420",
00000213 => x"051385a2",
00000214 => x"0405138c",
00000215 => x"159010ef",
00000216 => x"1be30b85",
00000217 => x"0001fd54",
00000218 => x"280b88e3",
00000219 => x"4e9000ef",
00000220 => x"0001a091",
00000221 => x"85a26509",
00000222 => x"0e850513",
00000223 => x"139010ef",
00000224 => x"546250f2",
00000225 => x"594254d2",
00000226 => x"5a2259b2",
00000227 => x"5b025a92",
00000228 => x"4c624bf2",
00000229 => x"61214501",
00000230 => x"00018082",
00000231 => x"05136509",
00000232 => x"10ef0cc5",
00000233 => x"bfe91130",
00000234 => x"05136509",
00000235 => x"10ef1445",
00000236 => x"00011070",
00000237 => x"90734781",
00000238 => x"25833427",
00000239 => x"65090009",
00000240 => x"16850513",
00000241 => x"0f1010ef",
00000242 => x"72c010ef",
00000243 => x"380502e3",
00000244 => x"00092703",
00000245 => x"012347b7",
00000246 => x"56778793",
00000247 => x"20230705",
00000248 => x"373700e9",
00000249 => x"20237654",
00000250 => x"0713fcf0",
00000251 => x"b6b72107",
00000252 => x"2223abcd",
00000253 => x"8693fce0",
00000254 => x"0637bcd6",
00000255 => x"2423ffab",
00000256 => x"0613fcd0",
00000257 => x"2623faa6",
00000258 => x"2583fcc0",
00000259 => x"9b63fc00",
00000260 => x"278300f5",
00000261 => x"9763fc40",
00000262 => x"278300e7",
00000263 => x"89e3fc80",
00000264 => x"00013cd7",
00000265 => x"455000ef",
00000266 => x"90734781",
00000267 => x"25833427",
00000268 => x"65090009",
00000269 => x"1a850513",
00000270 => x"07d010ef",
00000271 => x"6c4010ef",
00000272 => x"320508e3",
00000273 => x"00092703",
00000274 => x"223347b7",
00000275 => x"45578793",
00000276 => x"20230705",
00000277 => x"373700e9",
00000278 => x"28234478",
00000279 => x"0713fcf0",
00000280 => x"c6b79317",
00000281 => x"2a23ddaa",
00000282 => x"8693fce0",
00000283 => x"d637bff6",
00000284 => x"2c23a0b0",
00000285 => x"0613fcd0",
00000286 => x"2e230c06",
00000287 => x"2583fcc0",
00000288 => x"9b63fd00",
00000289 => x"278300f5",
00000290 => x"9763fd40",
00000291 => x"278300e7",
00000292 => x"8be3fd80",
00000293 => x"000136d7",
00000294 => x"3e1000ef",
00000295 => x"90734781",
00000296 => x"25833427",
00000297 => x"65090009",
00000298 => x"1e850513",
00000299 => x"009010ef",
00000300 => x"c00027f3",
00000301 => x"f0002023",
00000302 => x"c00025f3",
00000303 => x"00018d9d",
00000304 => x"342027f3",
00000305 => x"6509dff5",
00000306 => x"05138189",
00000307 => x"10ef2105",
00000308 => x"47817e60",
00000309 => x"34279073",
00000310 => x"00092583",
00000311 => x"06376509",
00000312 => x"0513f000",
00000313 => x"10ef21c5",
00000314 => x"27837ce0",
00000315 => x"6705fa00",
00000316 => x"87e38ff9",
00000317 => x"27832607",
00000318 => x"8b89fe80",
00000319 => x"100782e3",
00000320 => x"00092703",
00000321 => x"800007b7",
00000322 => x"00878793",
00000323 => x"43d44390",
00000324 => x"00170793",
00000325 => x"00f92023",
00000326 => x"f00007b7",
00000327 => x"c3d4c390",
00000328 => x"000780e7",
00000329 => x"342027f3",
00000330 => x"2773e791",
00000331 => x"47bd3400",
00000332 => x"2ef70ce3",
00000333 => x"345000ef",
00000334 => x"00092583",
00000335 => x"05136509",
00000336 => x"10ef29c5",
00000337 => x"27837720",
00000338 => x"07850009",
00000339 => x"00f92023",
00000340 => x"155010ef",
00000341 => x"84ae842a",
00000342 => x"5e0010ef",
00000343 => x"408507b3",
00000344 => x"00f53533",
00000345 => x"95e38d85",
00000346 => x"67050ca5",
00000347 => x"0ce7f2e3",
00000348 => x"2e5000ef",
00000349 => x"90734781",
00000350 => x"25833427",
00000351 => x"65090009",
00000352 => x"2c850513",
00000353 => x"730010ef",
00000354 => x"00092783",
00000355 => x"20230785",
00000356 => x"000f00f9",
00000357 => x"27f30ff0",
00000358 => x"87e33420",
00000359 => x"00ef0807",
00000360 => x"00012db0",
00000361 => x"10734401",
00000362 => x"25833424",
00000363 => x"65090009",
00000364 => x"2e850513",
00000365 => x"700010ef",
00000366 => x"0000100f",
00000367 => x"34202773",
00000368 => x"05e34789",
00000369 => x"27831ef7",
00000370 => x"07850009",
00000371 => x"00f92023",
00000372 => x"34241073",
00000373 => x"0000100f",
00000374 => x"342027f3",
00000375 => x"0c0792e3",
00000376 => x"275000ef",
00000377 => x"90734781",
00000378 => x"25833427",
00000379 => x"65090009",
00000380 => x"32450513",
00000381 => x"6c0010ef",
00000382 => x"00092783",
00000383 => x"20230785",
00000384 => x"27f300f9",
00000385 => x"2773fff0",
00000386 => x"47893420",
00000387 => x"0af702e3",
00000388 => x"269000ef",
00000389 => x"10734401",
00000390 => x"25833424",
00000391 => x"65090009",
00000392 => x"34c50513",
00000393 => x"690010ef",
00000394 => x"00092783",
00000395 => x"20230785",
00000396 => x"107300f9",
00000397 => x"2773c014",
00000398 => x"47893420",
00000399 => x"06f70ee3",
00000400 => x"239000ef",
00000401 => x"90734781",
00000402 => x"25833427",
00000403 => x"65090009",
00000404 => x"37c50513",
00000405 => x"660010ef",
00000406 => x"00092783",
00000407 => x"20230785",
00000408 => x"207300f9",
00000409 => x"27f3c010",
00000410 => x"9b633420",
00000411 => x"00ef7a07",
00000412 => x"00011e70",
00000413 => x"90734781",
00000414 => x"25833427",
00000415 => x"65090009",
00000416 => x"3b850513",
00000417 => x"630010ef",
00000418 => x"301027f3",
00000419 => x"9fe38b91",
00000420 => x"27830807",
00000421 => x"07850009",
00000422 => x"00f92023",
00000423 => x"97824789",
00000424 => x"342027f3",
00000425 => x"040796e3",
00000426 => x"05136509",
00000427 => x"10ef3f05",
00000428 => x"8a136060",
00000429 => x"278381c1",
00000430 => x"8493000a",
00000431 => x"07858181",
00000432 => x"00fa2023",
00000433 => x"90734781",
00000434 => x"25833427",
00000435 => x"65090009",
00000436 => x"43050513",
00000437 => x"5e0010ef",
00000438 => x"00092783",
00000439 => x"20230785",
00000440 => x"079300f9",
00000441 => x"9782f000",
00000442 => x"34202773",
00000443 => x"0d634785",
00000444 => x"00ef7ef7",
00000445 => x"00011870",
00000446 => x"90734781",
00000447 => x"25833427",
00000448 => x"65090009",
00000449 => x"46850513",
00000450 => x"5ac010ef",
00000451 => x"00092783",
00000452 => x"20230785",
00000453 => x"107300f9",
00000454 => x"2773fff0",
00000455 => x"47893420",
00000456 => x"00f71a63",
00000457 => x"34302773",
00000458 => x"fff017b7",
00000459 => x"07378793",
00000460 => x"08f706e3",
00000461 => x"145000ef",
00000462 => x"90734781",
00000463 => x"25833427",
00000464 => x"65090009",
00000465 => x"49c50513",
00000466 => x"56c010ef",
00000467 => x"301027f3",
00000468 => x"85638b91",
00000469 => x"27837c07",
00000470 => x"07850009",
00000471 => x"00f92023",
00000472 => x"81018793",
00000473 => x"000780e7",
00000474 => x"34202773",
00000475 => x"05e34789",
00000476 => x"00ef02f7",
00000477 => x"00011070",
00000478 => x"90734781",
00000479 => x"25833427",
00000480 => x"65090009",
00000481 => x"50850513",
00000482 => x"52c010ef",
00000483 => x"00092783",
00000484 => x"20230785",
00000485 => x"900200f9",
00000486 => x"34202773",
00000487 => x"0163478d",
00000488 => x"00ef74f7",
00000489 => x"00010d70",
00000490 => x"90734781",
00000491 => x"25833427",
00000492 => x"65090009",
00000493 => x"53850513",
00000494 => x"4fc010ef",
00000495 => x"00092783",
00000496 => x"20230785",
00000497 => x"200300f9",
00000498 => x"27730020",
00000499 => x"47913420",
00000500 => x"70f70463",
00000501 => x"0a5000ef",
00000502 => x"90734781",
00000503 => x"25833427",
00000504 => x"65090009",
00000505 => x"57050513",
00000506 => x"4cc010ef",
00000507 => x"00092783",
00000508 => x"20230785",
00000509 => x"278300f9",
00000510 => x"c63ef000",
00000511 => x"34202773",
00000512 => x"07634795",
00000513 => x"00ef6cf7",
00000514 => x"00010730",
00000515 => x"90734781",
00000516 => x"25833427",
00000517 => x"65090009",
00000518 => x"5a050513",
00000519 => x"498010ef",
00000520 => x"00092783",
00000521 => x"20230785",
00000522 => x"212300f9",
00000523 => x"27730000",
00000524 => x"47993420",
00000525 => x"68f70a63",
00000526 => x"041000ef",
00000527 => x"90734781",
00000528 => x"25833427",
00000529 => x"65090009",
00000530 => x"5d850513",
00000531 => x"468010ef",
00000532 => x"00092783",
00000533 => x"20230785",
00000534 => x"202300f9",
00000535 => x"2773f000",
00000536 => x"479d3420",
00000537 => x"64f70e63",
00000538 => x"011000ef",
00000539 => x"90734781",
00000540 => x"25833427",
00000541 => x"65090009",
00000542 => x"60850513",
00000543 => x"438010ef",
00000544 => x"00092783",
00000545 => x"20230785",
00000546 => x"007300f9",
00000547 => x"27730000",
00000548 => x"47ad3420",
00000549 => x"60f70a63",
00000550 => x"7e0000ef",
00000551 => x"90734781",
00000552 => x"25833427",
00000553 => x"65090009",
00000554 => x"63c50513",
00000555 => x"408010ef",
00000556 => x"25c010ef",
00000557 => x"5e050063",
00000558 => x"00092783",
00000559 => x"45814501",
00000560 => x"20230785",
00000561 => x"10ef00f9",
00000562 => x"00012960",
00000563 => x"00010001",
00000564 => x"00010001",
00000565 => x"27730001",
00000566 => x"07b73420",
00000567 => x"079d8000",
00000568 => x"6ef70e63",
00000569 => x"794000ef",
00000570 => x"55fd557d",
00000571 => x"270010ef",
00000572 => x"90734781",
00000573 => x"25833427",
00000574 => x"65090009",
00000575 => x"68850513",
00000576 => x"3b4010ef",
00000577 => x"798000ef",
00000578 => x"58050063",
00000579 => x"00092783",
00000580 => x"45014581",
00000581 => x"20230785",
00000582 => x"00ef00f9",
00000583 => x"00ef78e0",
00000584 => x"00ef7b20",
00000585 => x"00017c20",
00000586 => x"00010001",
00000587 => x"00010001",
00000588 => x"27730001",
00000589 => x"07b73420",
00000590 => x"07c18000",
00000591 => x"68f70c63",
00000592 => x"738000ef",
00000593 => x"77c000ef",
00000594 => x"90734781",
00000595 => x"25833427",
00000596 => x"65090009",
00000597 => x"6bc50513",
00000598 => x"35c010ef",
00000599 => x"fa002783",
00000600 => x"8ff96705",
00000601 => x"50078c63",
00000602 => x"664010ef",
00000603 => x"62050063",
00000604 => x"00092783",
00000605 => x"07854501",
00000606 => x"00f92023",
00000607 => x"670010ef",
00000608 => x"80000537",
00000609 => x"670010ef",
00000610 => x"10ef457d",
00000611 => x"000164e0",
00000612 => x"00010001",
00000613 => x"00010001",
00000614 => x"27730001",
00000615 => x"07b73420",
00000616 => x"07c58000",
00000617 => x"68f70663",
00000618 => x"6d0000ef",
00000619 => x"10ef4501",
00000620 => x"45016460",
00000621 => x"638010ef",
00000622 => x"90734781",
00000623 => x"25833427",
00000624 => x"65090009",
00000625 => x"71050513",
00000626 => x"2ec010ef",
00000627 => x"23c010ef",
00000628 => x"5a050863",
00000629 => x"00092783",
00000630 => x"20230785",
00000631 => x"000100f9",
00000632 => x"2a0010ef",
00000633 => x"2403fd75",
00000634 => x"2783fa00",
00000635 => x"777dfa00",
00000636 => x"8ff9177d",
00000637 => x"faf02023",
00000638 => x"fa002783",
00000639 => x"40000737",
00000640 => x"20238fd9",
00000641 => x"2223faf0",
00000642 => x"0001fa00",
00000643 => x"274010ef",
00000644 => x"0001fd75",
00000645 => x"00010001",
00000646 => x"00010001",
00000647 => x"00010001",
00000648 => x"260010ef",
00000649 => x"2023fd75",
00000650 => x"2773fa80",
00000651 => x"07b73420",
00000652 => x"07c98000",
00000653 => x"56f70a63",
00000654 => x"640000ef",
00000655 => x"90734781",
00000656 => x"25833427",
00000657 => x"65090009",
00000658 => x"76450513",
00000659 => x"268010ef",
00000660 => x"518010ef",
00000661 => x"40050e63",
00000662 => x"00092783",
00000663 => x"46854501",
00000664 => x"46010785",
00000665 => x"20234581",
00000666 => x"10ef00f9",
00000667 => x"450150a0",
00000668 => x"53c010ef",
00000669 => x"54c010ef",
00000670 => x"0001fd75",
00000671 => x"00010001",
00000672 => x"00010001",
00000673 => x"27730001",
00000674 => x"07b73420",
00000675 => x"07cd8000",
00000676 => x"54f70063",
00000677 => x"5e4000ef",
00000678 => x"504010ef",
00000679 => x"90734781",
00000680 => x"25833427",
00000681 => x"65090009",
00000682 => x"7b850513",
00000683 => x"208010ef",
00000684 => x"42c010ef",
00000685 => x"3a050863",
00000686 => x"00092783",
00000687 => x"45854601",
00000688 => x"45010785",
00000689 => x"00f92023",
00000690 => x"420010ef",
00000691 => x"484010ef",
00000692 => x"10ef4501",
00000693 => x"10ef44a0",
00000694 => x"00014620",
00000695 => x"00010001",
00000696 => x"00010001",
00000697 => x"27730001",
00000698 => x"07b73420",
00000699 => x"07cd8000",
00000700 => x"4cf70e63",
00000701 => x"584000ef",
00000702 => x"414010ef",
00000703 => x"90734781",
00000704 => x"25833427",
00000705 => x"650d0009",
00000706 => x"80c50513",
00000707 => x"1a8010ef",
00000708 => x"7fd000ef",
00000709 => x"34050263",
00000710 => x"00092783",
00000711 => x"20230785",
00000712 => x"10ef00f9",
00000713 => x"87aa0160",
00000714 => x"3e850513",
00000715 => x"00f537b3",
00000716 => x"10ef95be",
00000717 => x"007302a0",
00000718 => x"27731050",
00000719 => x"07b73420",
00000720 => x"079d8000",
00000721 => x"48f70263",
00000722 => x"530000ef",
00000723 => x"55fd557d",
00000724 => x"00c010ef",
00000725 => x"90734781",
00000726 => x"25833427",
00000727 => x"650d0009",
00000728 => x"88050513",
00000729 => x"150010ef",
00000730 => x"301027f3",
00000731 => x"00100737",
00000732 => x"8d638ff9",
00000733 => x"27832c07",
00000734 => x"07850009",
00000735 => x"00f92023",
00000736 => x"348010ef",
00000737 => x"300027f3",
00000738 => x"34202773",
00000739 => x"0b634789",
00000740 => x"00ef42f7",
00000741 => x"00014e60",
00000742 => x"90734781",
00000743 => x"25833427",
00000744 => x"650d0009",
00000745 => x"8e450513",
00000746 => x"10c010ef",
00000747 => x"00092783",
00000748 => x"07854509",
00000749 => x"00f92023",
00000750 => x"139000ef",
00000751 => x"fff027f3",
00000752 => x"05136509",
00000753 => x"10ef7945",
00000754 => x"27f30ee0",
00000755 => x"85633420",
00000756 => x"00ef2607",
00000757 => x"00014820",
00000758 => x"04498593",
00000759 => x"00ef4509",
00000760 => x"25830f70",
00000761 => x"650d0009",
00000762 => x"93050513",
00000763 => x"0c8010ef",
00000764 => x"fc0027f3",
00000765 => x"87638b91",
00000766 => x"47013407",
00000767 => x"34271073",
00000768 => x"00092783",
00000769 => x"20230785",
00000770 => x"107300f9",
00000771 => x"57fd3a07",
00000772 => x"3b079073",
00000773 => x"3b0026f3",
00000774 => x"a029477d",
00000775 => x"0d63177d",
00000776 => x"00014007",
00000777 => x"00e6d7b3",
00000778 => x"fbed8b85",
00000779 => x"ff402983",
00000780 => x"000186ba",
00000781 => x"16fd0786",
00000782 => x"0017e793",
00000783 => x"0001fee5",
00000784 => x"00f9e433",
00000785 => x"4585070d",
00000786 => x"86a2650d",
00000787 => x"95b3864e",
00000788 => x"051300e5",
00000789 => x"10ef9585",
00000790 => x"107305e0",
00000791 => x"47e53b04",
00000792 => x"3a079073",
00000793 => x"3b002773",
00000794 => x"00e41663",
00000795 => x"3a002773",
00000796 => x"36f70a63",
00000797 => x"404000ef",
00000798 => x"00092583",
00000799 => x"0513650d",
00000800 => x"10ef9a85",
00000801 => x"27830320",
00000802 => x"07850009",
00000803 => x"00f92023",
00000804 => x"90734781",
00000805 => x"10ef3427",
00000806 => x"80e72320",
00000807 => x"27f30009",
00000808 => x"99633420",
00000809 => x"00732607",
00000810 => x"00ef0000",
00000811 => x"00013ce0",
00000812 => x"00092583",
00000813 => x"0513650d",
00000814 => x"00ef9d85",
00000815 => x"27837fb0",
00000816 => x"07850009",
00000817 => x"00f92023",
00000818 => x"90734781",
00000819 => x"10ef3427",
00000820 => x"a0031fa0",
00000821 => x"27f30009",
00000822 => x"99633420",
00000823 => x"00732207",
00000824 => x"00ef0000",
00000825 => x"00013720",
00000826 => x"00092583",
00000827 => x"0513650d",
00000828 => x"00efa085",
00000829 => x"27837c30",
00000830 => x"07850009",
00000831 => x"00f92023",
00000832 => x"90734781",
00000833 => x"10ef3427",
00000834 => x"a0231c20",
00000835 => x"27730009",
00000836 => x"479d3420",
00000837 => x"28f70663",
00000838 => x"00000073",
00000839 => x"35c000ef",
00000840 => x"00092583",
00000841 => x"0513650d",
00000842 => x"00efa385",
00000843 => x"278378b0",
00000844 => x"07850009",
00000845 => x"00f92023",
00000846 => x"90734781",
00000847 => x"07933427",
00000848 => x"90730810",
00000849 => x"27f33a07",
00000850 => x"47653a00",
00000851 => x"3a071073",
00000852 => x"3a002773",
00000853 => x"00f71663",
00000854 => x"342027f3",
00000855 => x"2c078463",
00000856 => x"00012e21",
00000857 => x"00092583",
00000858 => x"0513650d",
00000859 => x"00efa685",
00000860 => x"27837470",
00000861 => x"07850009",
00000862 => x"00f92023",
00000863 => x"90734781",
00000864 => x"07933427",
00000865 => x"90730810",
00000866 => x"27733a07",
00000867 => x"d7b73b00",
00000868 => x"8793abab",
00000869 => x"9073dcd7",
00000870 => x"27f33b07",
00000871 => x"97633b00",
00000872 => x"27f300e7",
00000873 => x"8d633420",
00000874 => x"00012607",
00000875 => x"000124f1",
00000876 => x"c02025f3",
00000877 => x"0513650d",
00000878 => x"00efaac5",
00000879 => x"25f36fb0",
00000880 => x"650dc000",
00000881 => x"ac850513",
00000882 => x"6ed000ef",
00000883 => x"00092703",
00000884 => x"000a2583",
00000885 => x"650d4094",
00000886 => x"0513863a",
00000887 => x"00efae45",
00000888 => x"409c6d70",
00000889 => x"45ed466d",
00000890 => x"650de785",
00000891 => x"b1450513",
00000892 => x"6c5000ef",
00000893 => x"d8cff06f",
00000894 => x"f06f2441",
00000895 => x"0001dbaf",
00000896 => x"05136509",
00000897 => x"00ef2485",
00000898 => x"f06f6af0",
00000899 => x"0001f2ef",
00000900 => x"0513650d",
00000901 => x"00efb445",
00000902 => x"f06f69f0",
00000903 => x"0001d66f",
00000904 => x"f06f2ca1",
00000905 => x"0001853f",
00000906 => x"f06f2435",
00000907 => x"0001f7af",
00000908 => x"f06f24a1",
00000909 => x"0001f42f",
00000910 => x"25f32481",
00000911 => x"650d3420",
00000912 => x"92050513",
00000913 => x"671000ef",
00000914 => x"0001bb41",
00000915 => x"0513650d",
00000916 => x"00ef8b85",
00000917 => x"b3896630",
00000918 => x"0513650d",
00000919 => x"00ef85c5",
00000920 => x"b9cd6570",
00000921 => x"05136509",
00000922 => x"00ef7ec5",
00000923 => x"b17964b0",
00000924 => x"05136509",
00000925 => x"00ef7985",
00000926 => x"b10d63f0",
00000927 => x"05136509",
00000928 => x"00ef2805",
00000929 => x"be0d6330",
00000930 => x"05136509",
00000931 => x"00ef6685",
00000932 => x"bc5d6270",
00000933 => x"05136509",
00000934 => x"00ef6685",
00000935 => x"bc8961b0",
00000936 => x"f06f2ae1",
00000937 => x"0001f42f",
00000938 => x"f06f2275",
00000939 => x"00019f3f",
00000940 => x"f06f2255",
00000941 => x"0001f62f",
00000942 => x"f06f2a71",
00000943 => x"0001f8af",
00000944 => x"f06f2a51",
00000945 => x"00019abf",
00000946 => x"f06f2271",
00000947 => x"0001973f",
00000948 => x"f06f2251",
00000949 => x"000193bf",
00000950 => x"f06f2ab5",
00000951 => x"00018fff",
00000952 => x"f06f2a95",
00000953 => x"00018c7f",
00000954 => x"f06f22b5",
00000955 => x"000180ff",
00000956 => x"05136509",
00000957 => x"00ef3f45",
00000958 => x"84935bf0",
00000959 => x"409c8181",
00000960 => x"81c18a13",
00000961 => x"c09c0785",
00000962 => x"fbcff06f",
00000963 => x"00000073",
00000964 => x"bbd922a5",
00000965 => x"00000073",
00000966 => x"bb592a35",
00000967 => x"05136509",
00000968 => x"00ef4dc5",
00000969 => x"f06f5930",
00000970 => x"0001853f",
00000971 => x"05136509",
00000972 => x"00ef3fc5",
00000973 => x"8a135830",
00000974 => x"849381c1",
00000975 => x"f06f8181",
00000976 => x"0001f86f",
00000977 => x"0513650d",
00000978 => x"00efa985",
00000979 => x"b58d56b0",
00000980 => x"05136509",
00000981 => x"00ef1885",
00000982 => x"f06f55f0",
00000983 => x"0001ccef",
00000984 => x"05136509",
00000985 => x"00ef2805",
00000986 => x"f06f54f0",
00000987 => x"0001dcef",
00000988 => x"05136509",
00000989 => x"00ef1c85",
00000990 => x"f06f53f0",
00000991 => x"0001d22f",
00000992 => x"05136509",
00000993 => x"00ef7445",
00000994 => x"bc4d52f0",
00000995 => x"05136509",
00000996 => x"00ef6f05",
00000997 => x"b40d5230",
00000998 => x"f06f2875",
00000999 => x"0001fdef",
00001000 => x"00000073",
00001001 => x"bbad2845",
00001002 => x"bc492075",
00001003 => x"05136509",
00001004 => x"00ef3085",
00001005 => x"f06f5030",
00001006 => x"0001e2ef",
00001007 => x"f06f2861",
00001008 => x"0001f7af",
00001009 => x"bec92841",
00001010 => x"b6492071",
00001011 => x"b62d2061",
00001012 => x"b4d92051",
00001013 => x"f06f2041",
00001014 => x"000196ff",
00001015 => x"f06f28a5",
00001016 => x"000190bf",
00001017 => x"342027f3",
00001018 => x"c80796e3",
00001019 => x"b16920a5",
00001020 => x"fcc02783",
00001021 => x"c2c79863",
00001022 => x"342027f3",
00001023 => x"c2079463",
00001024 => x"f06f2891",
00001025 => x"0001c26f",
00001026 => x"fdc02783",
00001027 => x"c8c79663",
00001028 => x"342027f3",
00001029 => x"c8079263",
00001030 => x"f06f2835",
00001031 => x"0001c82f",
00001032 => x"b3792815",
00001033 => x"bb3d2805",
00001034 => x"f06f2035",
00001035 => x"0001d0ef",
00001036 => x"f06f2015",
00001037 => x"000197bf",
00001038 => x"ff402983",
00001039 => x"b1094781",
00001040 => x"00000000",
00001041 => x"87936789",
00001042 => x"a0738007",
00001043 => x"80823007",
00001044 => x"00000000",
00001045 => x"11416509",
00001046 => x"45ed466d",
00001047 => x"ffc50513",
00001048 => x"00efc606",
00001049 => x"87934530",
00001050 => x"439881c1",
00001051 => x"070540b2",
00001052 => x"0141c398",
00001053 => x"00008082",
00001054 => x"11416509",
00001055 => x"45ed466d",
00001056 => x"00c50513",
00001057 => x"00efc606",
00001058 => x"879342f0",
00001059 => x"43988181",
00001060 => x"070540b2",
00001061 => x"0141c398",
00001062 => x"00008082",
00001063 => x"fe802503",
00001064 => x"89058159",
00001065 => x"00008082",
00001066 => x"891d8985",
00001067 => x"67910592",
00001068 => x"87938d4d",
00001069 => x"8d5d7087",
00001070 => x"f8a02623",
00001071 => x"00008082",
00001072 => x"87936791",
00001073 => x"26237007",
00001074 => x"8082f8f0",
00001075 => x"00000000",
00001076 => x"f8c00693",
00001077 => x"6711429c",
00001078 => x"70070713",
00001079 => x"c29c8fd9",
00001080 => x"00008082",
00001081 => x"f8002623",
00001082 => x"00008082",
00001083 => x"00000000",
00001084 => x"de067139",
00001085 => x"da1adc16",
00001086 => x"d62ad81e",
00001087 => x"d232d42e",
00001088 => x"ce3ad036",
00001089 => x"ca42cc3e",
00001090 => x"c672c846",
00001091 => x"c27ac476",
00001092 => x"2773c07e",
00001093 => x"10733410",
00001094 => x"27f33407",
00001095 => x"cf633420",
00001096 => x"16830407",
00001097 => x"458d0007",
00001098 => x"06138a8d",
00001099 => x"87630027",
00001100 => x"000106b6",
00001101 => x"34161073",
00001102 => x"6963472d",
00001103 => x"670d00f7",
00001104 => x"0713078a",
00001105 => x"97bab647",
00001106 => x"8782439c",
00001107 => x"87936785",
00001108 => x"00012287",
00001109 => x"50f29782",
00001110 => x"535252e2",
00001111 => x"553253c2",
00001112 => x"561255a2",
00001113 => x"47725682",
00001114 => x"485247e2",
00001115 => x"4e3248c2",
00001116 => x"4f124ea2",
00001117 => x"61214f82",
00001118 => x"30200073",
00001119 => x"80000737",
00001120 => x"ffd74713",
00001121 => x"474197ba",
00001122 => x"fcf762e3",
00001123 => x"078a670d",
00001124 => x"b9470713",
00001125 => x"439c97ba",
00001126 => x"00018782",
00001127 => x"00470613",
00001128 => x"0001bf51",
00001129 => x"8441a783",
00001130 => x"0001b775",
00001131 => x"8241a783",
00001132 => x"0001b755",
00001133 => x"8281a783",
00001134 => x"0001bf71",
00001135 => x"82c1a783",
00001136 => x"0001bf51",
00001137 => x"8301a783",
00001138 => x"0001b771",
00001139 => x"8341a783",
00001140 => x"0001b751",
00001141 => x"8381a783",
00001142 => x"0001bfb5",
00001143 => x"83c1a783",
00001144 => x"0001bf95",
00001145 => x"8401a783",
00001146 => x"0001b7b5",
00001147 => x"8541a783",
00001148 => x"0001b795",
00001149 => x"8581a783",
00001150 => x"0001bfb1",
00001151 => x"85c1a783",
00001152 => x"0001bf91",
00001153 => x"8601a783",
00001154 => x"0001b7b1",
00001155 => x"84c1a783",
00001156 => x"0001b791",
00001157 => x"8501a783",
00001158 => x"0001bf35",
00001159 => x"8481a783",
00001160 => x"0000bf15",
00001161 => x"00000000",
00001162 => x"1101650d",
00001163 => x"bd850513",
00001164 => x"cc22ce06",
00001165 => x"c84aca26",
00001166 => x"c452c64e",
00001167 => x"251000ef",
00001168 => x"34202473",
00001169 => x"eb6347ad",
00001170 => x"670d0087",
00001171 => x"00241793",
00001172 => x"d7c70713",
00001173 => x"439c97ba",
00001174 => x"00018782",
00001175 => x"800007b7",
00001176 => x"ffd7c793",
00001177 => x"474197a2",
00001178 => x"00f76a63",
00001179 => x"078a670d",
00001180 => x"dac70713",
00001181 => x"439c97ba",
00001182 => x"00018782",
00001183 => x"0513650d",
00001184 => x"00efd4c5",
00001185 => x"6a0d20b0",
00001186 => x"d64a0513",
00001187 => x"00ef6491",
00001188 => x"49711ff0",
00001189 => x"88048493",
00001190 => x"000159f1",
00001191 => x"012457b3",
00001192 => x"97a68bbd",
00001193 => x"0007c503",
00001194 => x"00ef1971",
00001195 => x"17e31cf0",
00001196 => x"a819ff39",
00001197 => x"0513650d",
00001198 => x"6491be05",
00001199 => x"1d1000ef",
00001200 => x"84936a0d",
00001201 => x"00018804",
00001202 => x"0513650d",
00001203 => x"00efd685",
00001204 => x"29f31bf0",
00001205 => x"05133400",
00001206 => x"00efd64a",
00001207 => x"44711b30",
00001208 => x"00015971",
00001209 => x"0089d7b3",
00001210 => x"97a68bbd",
00001211 => x"0007c503",
00001212 => x"00ef1471",
00001213 => x"17e31870",
00001214 => x"650dff24",
00001215 => x"d7050513",
00001216 => x"18d000ef",
00001217 => x"343029f3",
00001218 => x"d64a0513",
00001219 => x"181000ef",
00001220 => x"59714471",
00001221 => x"0089d7b3",
00001222 => x"97a68bbd",
00001223 => x"0007c503",
00001224 => x"00ef1471",
00001225 => x"17e31570",
00001226 => x"4462ff24",
00001227 => x"44d240f2",
00001228 => x"49b24942",
00001229 => x"650d4a22",
00001230 => x"e1c50513",
00001231 => x"006f6105",
00001232 => x"000114f0",
00001233 => x"0513650d",
00001234 => x"6491c005",
00001235 => x"141000ef",
00001236 => x"84936a0d",
00001237 => x"bf8d8804",
00001238 => x"0513650d",
00001239 => x"6491c1c5",
00001240 => x"12d000ef",
00001241 => x"84936a0d",
00001242 => x"bfb98804",
00001243 => x"0513650d",
00001244 => x"6491c305",
00001245 => x"119000ef",
00001246 => x"84936a0d",
00001247 => x"b7a98804",
00001248 => x"0513650d",
00001249 => x"6491c3c5",
00001250 => x"105000ef",
00001251 => x"84936a0d",
00001252 => x"bf1d8804",
00001253 => x"0513650d",
00001254 => x"6491c545",
00001255 => x"0f1000ef",
00001256 => x"84936a0d",
00001257 => x"b70d8804",
00001258 => x"0513650d",
00001259 => x"6491c685",
00001260 => x"0dd000ef",
00001261 => x"84936a0d",
00001262 => x"b7398804",
00001263 => x"0513650d",
00001264 => x"6491c845",
00001265 => x"0c9000ef",
00001266 => x"84936a0d",
00001267 => x"bded8804",
00001268 => x"0513650d",
00001269 => x"6491c985",
00001270 => x"0b5000ef",
00001271 => x"84936a0d",
00001272 => x"b5dd8804",
00001273 => x"0513650d",
00001274 => x"6491cfc5",
00001275 => x"0a1000ef",
00001276 => x"84936a0d",
00001277 => x"bdc98804",
00001278 => x"0513650d",
00001279 => x"6491d105",
00001280 => x"08d000ef",
00001281 => x"84936a0d",
00001282 => x"bd7d8804",
00001283 => x"0513650d",
00001284 => x"6491d245",
00001285 => x"079000ef",
00001286 => x"84936a0d",
00001287 => x"b56d8804",
00001288 => x"0513650d",
00001289 => x"6491d385",
00001290 => x"065000ef",
00001291 => x"84936a0d",
00001292 => x"bd598804",
00001293 => x"0513650d",
00001294 => x"6491cc85",
00001295 => x"051000ef",
00001296 => x"84936a0d",
00001297 => x"b5498804",
00001298 => x"0513650d",
00001299 => x"6491cac5",
00001300 => x"03d000ef",
00001301 => x"84936a0d",
00001302 => x"b5bd8804",
00001303 => x"0513650d",
00001304 => x"6491ce05",
00001305 => x"029000ef",
00001306 => x"84936a0d",
00001307 => x"bda98804",
00001308 => x"301027f3",
00001309 => x"6785c785",
00001310 => x"0f078793",
00001311 => x"30579073",
00001312 => x"82418793",
00001313 => x"07136705",
00001314 => x"86932287",
00001315 => x"00010407",
00001316 => x"0791c398",
00001317 => x"fed79ee3",
00001318 => x"00018082",
00001319 => x"1141650d",
00001320 => x"df050513",
00001321 => x"00efc606",
00001322 => x"67857e60",
00001323 => x"0f078793",
00001324 => x"30579073",
00001325 => x"82418793",
00001326 => x"07136705",
00001327 => x"86932287",
00001328 => x"00010407",
00001329 => x"0791c398",
00001330 => x"fed79ee3",
00001331 => x"014140b2",
00001332 => x"00008082",
00001333 => x"f56347bd",
00001334 => x"450500a7",
00001335 => x"00018082",
00001336 => x"82418793",
00001337 => x"953e050a",
00001338 => x"4501c10c",
00001339 => x"00008082",
00001340 => x"f56347bd",
00001341 => x"450500a7",
00001342 => x"00018082",
00001343 => x"82418793",
00001344 => x"953e050a",
00001345 => x"87936785",
00001346 => x"c11c2287",
00001347 => x"80824501",
00001348 => x"c2261141",
00001349 => x"c606c04a",
00001350 => x"44e1c422",
00001351 => x"2473493d",
00001352 => x"5433f130",
00001353 => x"74130094",
00001354 => x"07930ff4",
00001355 => x"f793ff04",
00001356 => x"d5130ff7",
00001357 => x"05130047",
00001358 => x"77630315",
00001359 => x"00010089",
00001360 => x"00f7f413",
00001361 => x"734000ef",
00001362 => x"03040513",
00001363 => x"0ff57513",
00001364 => x"728000ef",
00001365 => x"02e00513",
00001366 => x"0001cc95",
00001367 => x"71c000ef",
00001368 => x"247314e1",
00001369 => x"5433f130",
00001370 => x"74130094",
00001371 => x"07930ff4",
00001372 => x"f793ff04",
00001373 => x"d5130ff7",
00001374 => x"05130047",
00001375 => x"61e30315",
00001376 => x"0513fc89",
00001377 => x"75130304",
00001378 => x"00ef0ff5",
00001379 => x"05136ee0",
00001380 => x"f4e902e0",
00001381 => x"442240b2",
00001382 => x"49024492",
00001383 => x"80820141",
00001384 => x"00000000",
00001385 => x"1101650d",
00001386 => x"e2450513",
00001387 => x"cc22ce06",
00001388 => x"c84aca26",
00001389 => x"00efc64e",
00001390 => x"650d6fe0",
00001391 => x"e5050513",
00001392 => x"6f4000ef",
00001393 => x"f14025f3",
00001394 => x"0513650d",
00001395 => x"00efe705",
00001396 => x"25f36e60",
00001397 => x"650df110",
00001398 => x"e8c50513",
00001399 => x"6d8000ef",
00001400 => x"f1202473",
00001401 => x"85a2650d",
00001402 => x"ea850513",
00001403 => x"6c8000ef",
00001404 => x"096347cd",
00001405 => x"00014cf4",
00001406 => x"f13025f3",
00001407 => x"0513650d",
00001408 => x"00efecc5",
00001409 => x"37296b20",
00001410 => x"05136509",
00001411 => x"00ef7b45",
00001412 => x"650d6a60",
00001413 => x"ee850513",
00001414 => x"69c000ef",
00001415 => x"301027f3",
00001416 => x"876383f9",
00001417 => x"47054407",
00001418 => x"34e78863",
00001419 => x"85634709",
00001420 => x"650d48e7",
00001421 => x"f0c50513",
00001422 => x"67c000ef",
00001423 => x"0513650d",
00001424 => x"00eff1c5",
00001425 => x"29f36720",
00001426 => x"44013010",
00001427 => x"44e94905",
00001428 => x"0001a031",
00001429 => x"05630405",
00001430 => x"00010294",
00001431 => x"008917b3",
00001432 => x"0137f7b3",
00001433 => x"0513dbe5",
00001434 => x"75130414",
00001435 => x"00ef0ff5",
00001436 => x"051360a0",
00001437 => x"04050200",
00001438 => x"600000ef",
00001439 => x"fe9410e3",
00001440 => x"fc002473",
00001441 => x"00147793",
00001442 => x"3c079e63",
00001443 => x"00247793",
00001444 => x"3c079463",
00001445 => x"1b638811",
00001446 => x"00013a04",
00001447 => x"0513650d",
00001448 => x"00eff505",
00001449 => x"27f36120",
00001450 => x"8b91fc00",
00001451 => x"38078a63",
00001452 => x"90734781",
00001453 => x"57fd3a07",
00001454 => x"3b079073",
00001455 => x"3b002773",
00001456 => x"a029447d",
00001457 => x"0b63147d",
00001458 => x"00013a04",
00001459 => x"008757b3",
00001460 => x"fbed8b85",
00001461 => x"0513650d",
00001462 => x"00eff705",
00001463 => x"47f15da0",
00001464 => x"00340593",
00001465 => x"3e87d663",
00001466 => x"0513650d",
00001467 => x"00effa05",
00001468 => x"00015c60",
00001469 => x"0513650d",
00001470 => x"00effb85",
00001471 => x"47215ba0",
00001472 => x"3a071073",
00001473 => x"3a0027f3",
00001474 => x"0ff7f793",
00001475 => x"38e78a63",
00001476 => x"0513650d",
00001477 => x"00efa985",
00001478 => x"000159e0",
00001479 => x"0513650d",
00001480 => x"00effd45",
00001481 => x"47415920",
00001482 => x"3a071073",
00001483 => x"3a0027f3",
00001484 => x"0ff7f793",
00001485 => x"36e78063",
00001486 => x"0513650d",
00001487 => x"00efa985",
00001488 => x"00015760",
00001489 => x"0513650d",
00001490 => x"00effe45",
00001491 => x"476156a0",
00001492 => x"3a071073",
00001493 => x"3a0027f3",
00001494 => x"0ff7f793",
00001495 => x"34e78863",
00001496 => x"0513650d",
00001497 => x"00efa985",
00001498 => x"000154e0",
00001499 => x"90734781",
00001500 => x"00013a07",
00001501 => x"0513650d",
00001502 => x"00efff45",
00001503 => x"258353a0",
00001504 => x"650dfe00",
00001505 => x"00850513",
00001506 => x"25832335",
00001507 => x"650dfe40",
00001508 => x"01850513",
00001509 => x"650d2305",
00001510 => x"02850513",
00001511 => x"25832b21",
00001512 => x"650dff00",
00001513 => x"05050513",
00001514 => x"650d2331",
00001515 => x"06c50513",
00001516 => x"27832311",
00001517 => x"8b91fe80",
00001518 => x"1c078663",
00001519 => x"0513650d",
00001520 => x"21e90845",
00001521 => x"ff802583",
00001522 => x"0513650d",
00001523 => x"21dd0945",
00001524 => x"0513650d",
00001525 => x"29f90b45",
00001526 => x"fe802783",
00001527 => x"8b638ba1",
00001528 => x"650d2407",
00001529 => x"08450513",
00001530 => x"00012155",
00001531 => x"ff402583",
00001532 => x"0513650d",
00001533 => x"297d0cc5",
00001534 => x"0513650d",
00001535 => x"295d0e85",
00001536 => x"fe802783",
00001537 => x"81638bc1",
00001538 => x"650d2207",
00001539 => x"08450513",
00001540 => x"000129b5",
00001541 => x"ffc02583",
00001542 => x"0513650d",
00001543 => x"29591005",
00001544 => x"0513650d",
00001545 => x"21791205",
00001546 => x"fe802783",
00001547 => x"87638b85",
00001548 => x"650d1e07",
00001549 => x"08450513",
00001550 => x"00012991",
00001551 => x"0513650d",
00001552 => x"298d1385",
00001553 => x"fe802783",
00001554 => x"83638b89",
00001555 => x"650d1c07",
00001556 => x"08450513",
00001557 => x"00012925",
00001558 => x"0513650d",
00001559 => x"29991505",
00001560 => x"2403650d",
00001561 => x"0513fe80",
00001562 => x"21a91705",
00001563 => x"8fe167c1",
00001564 => x"18078a63",
00001565 => x"0513650d",
00001566 => x"29090845",
00001567 => x"0513650d",
00001568 => x"290d1785",
00001569 => x"000207b7",
00001570 => x"87638fe1",
00001571 => x"650d1607",
00001572 => x"08450513",
00001573 => x"00012ee5",
00001574 => x"0513650d",
00001575 => x"29191805",
00001576 => x"000407b7",
00001577 => x"83638fe1",
00001578 => x"650d1407",
00001579 => x"08450513",
00001580 => x"00012ef1",
00001581 => x"0513650d",
00001582 => x"2eed1885",
00001583 => x"000807b7",
00001584 => x"8f638fe1",
00001585 => x"650d1007",
00001586 => x"08450513",
00001587 => x"000126c1",
00001588 => x"0513650d",
00001589 => x"2ef91905",
00001590 => x"001007b7",
00001591 => x"8b638fe1",
00001592 => x"650d0e07",
00001593 => x"08450513",
00001594 => x"00012655",
00001595 => x"0513650d",
00001596 => x"26c91985",
00001597 => x"002007b7",
00001598 => x"87638fe1",
00001599 => x"650d0c07",
00001600 => x"08450513",
00001601 => x"00012661",
00001602 => x"0513650d",
00001603 => x"265d1a05",
00001604 => x"004007b7",
00001605 => x"83638fe1",
00001606 => x"650d0a07",
00001607 => x"08450513",
00001608 => x"000126b5",
00001609 => x"0513650d",
00001610 => x"26691a85",
00001611 => x"010007b7",
00001612 => x"cfbd8fe1",
00001613 => x"0513650d",
00001614 => x"2e890845",
00001615 => x"0513650d",
00001616 => x"2e8d1b05",
00001617 => x"008007b7",
00001618 => x"cfa98fe1",
00001619 => x"0513650d",
00001620 => x"2e2d0845",
00001621 => x"0513650d",
00001622 => x"2ea91b85",
00001623 => x"020007b7",
00001624 => x"c41d8c7d",
00001625 => x"40f24462",
00001626 => x"494244d2",
00001627 => x"650d49b2",
00001628 => x"08450513",
00001629 => x"ae196105",
00001630 => x"0513650d",
00001631 => x"2e1df045",
00001632 => x"0001b975",
00001633 => x"0513650d",
00001634 => x"260908c5",
00001635 => x"0001bd25",
00001636 => x"40f24462",
00001637 => x"494244d2",
00001638 => x"650d49b2",
00001639 => x"08c50513",
00001640 => x"a4ed6105",
00001641 => x"0513650d",
00001642 => x"24cd08c5",
00001643 => x"0001b765",
00001644 => x"0513650d",
00001645 => x"2cd908c5",
00001646 => x"0001b751",
00001647 => x"0513650d",
00001648 => x"24e908c5",
00001649 => x"0001b785",
00001650 => x"0513650d",
00001651 => x"2c7d08c5",
00001652 => x"0001bf25",
00001653 => x"0513650d",
00001654 => x"2c4d08c5",
00001655 => x"0001bf01",
00001656 => x"0513650d",
00001657 => x"245d08c5",
00001658 => x"0001b5e5",
00001659 => x"0513650d",
00001660 => x"2c6908c5",
00001661 => x"0001b5c1",
00001662 => x"0513650d",
00001663 => x"247908c5",
00001664 => x"0001bd61",
00001665 => x"0513650d",
00001666 => x"244908c5",
00001667 => x"0001bd85",
00001668 => x"0513650d",
00001669 => x"2c9d08c5",
00001670 => x"0001b581",
00001671 => x"0513650d",
00001672 => x"24ad08c5",
00001673 => x"0001bd21",
00001674 => x"0513650d",
00001675 => x"2cb908c5",
00001676 => x"0001b3d5",
00001677 => x"0513650d",
00001678 => x"2c8908c5",
00001679 => x"0001bb45",
00001680 => x"0513650d",
00001681 => x"24bda985",
00001682 => x"0001b335",
00001683 => x"0513650d",
00001684 => x"248df485",
00001685 => x"0001b1a1",
00001686 => x"0513650d",
00001687 => x"2c99f3c5",
00001688 => x"0001b915",
00001689 => x"0513650d",
00001690 => x"24a9f345",
00001691 => x"0001b105",
00001692 => x"0513650d",
00001693 => x"2c3defc5",
00001694 => x"0001b6d1",
00001695 => x"0513650d",
00001696 => x"2c0df705",
00001697 => x"000145a1",
00001698 => x"0513650d",
00001699 => x"241df885",
00001700 => x"0001b195",
00001701 => x"0513650d",
00001702 => x"2c29fc85",
00001703 => x"0001b165",
00001704 => x"0513650d",
00001705 => x"2439fc85",
00001706 => x"0001b995",
00001707 => x"0513650d",
00001708 => x"2409fc85",
00001709 => x"0001b965",
00001710 => x"0513650d",
00001711 => x"2addf145",
00001712 => x"0001beb5",
00001713 => x"0513650d",
00001714 => x"22edec05",
00001715 => x"0001b635",
00001716 => x"95b34785",
00001717 => x"bf4d00b7",
00001718 => x"00000000",
00001719 => x"0513650d",
00001720 => x"a26d1c05",
00001721 => x"00000000",
00001722 => x"0513650d",
00001723 => x"aa792345",
00001724 => x"00000000",
00001725 => x"fe802503",
00001726 => x"8905815d",
00001727 => x"00008082",
00001728 => x"fe802503",
00001729 => x"89058165",
00001730 => x"00008082",
00001731 => x"fe802503",
00001732 => x"89058145",
00001733 => x"00008082",
00001734 => x"c02a1141",
00001735 => x"0793c22e",
00001736 => x"a023f900",
00001737 => x"47120007",
00001738 => x"f8e02a23",
00001739 => x"c3984702",
00001740 => x"80820141",
00001741 => x"00000000",
00001742 => x"00011141",
00001743 => x"f9402783",
00001744 => x"f9002683",
00001745 => x"f9402703",
00001746 => x"fee79ae3",
00001747 => x"c23ec036",
00001748 => x"45924502",
00001749 => x"80820141",
00001750 => x"00000000",
00001751 => x"f9800693",
00001752 => x"c290567d",
00001753 => x"c2ccc288",
00001754 => x"00008082",
00001755 => x"00541141",
00001756 => x"85236811",
00001757 => x"08930005",
00001758 => x"87b600e1",
00001759 => x"8e880813",
00001760 => x"00014629",
00001761 => x"02c57733",
00001762 => x"97420785",
00001763 => x"00074703",
00001764 => x"02c55533",
00001765 => x"fee78fa3",
00001766 => x"fef896e3",
00001767 => x"051347a5",
00001768 => x"00010300",
00001769 => x"0096c703",
00001770 => x"fff78613",
00001771 => x"1793883e",
00001772 => x"83c10106",
00001773 => x"04a71663",
00001774 => x"000684a3",
00001775 => x"f3fd16fd",
00001776 => x"00414703",
00001777 => x"46816841",
00001778 => x"187d88ae",
00001779 => x"07c217fd",
00001780 => x"081083c1",
00001781 => x"00168513",
00001782 => x"cb09963e",
00001783 => x"01051693",
00001784 => x"802382c1",
00001785 => x"88b300e8",
00001786 => x"000100d5",
00001787 => x"01078663",
00001788 => x"ff464703",
00001789 => x"0001bfe1",
00001790 => x"00088023",
00001791 => x"80820141",
00001792 => x"b7c987c2",
00001793 => x"00000000",
00001794 => x"fe802503",
00001795 => x"89058149",
00001796 => x"00008082",
00001797 => x"fa002023",
00001798 => x"fe002683",
00001799 => x"47810506",
00001800 => x"02a6d6b3",
00001801 => x"15796505",
00001802 => x"82c106c2",
00001803 => x"00d56a63",
00001804 => x"0001a035",
00001805 => x"82850785",
00001806 => x"0ff7f793",
00001807 => x"00d57e63",
00001808 => x"ffe78713",
00001809 => x"0fd77713",
00001810 => x"0785f775",
00001811 => x"f793828d",
00001812 => x"67e30ff7",
00001813 => x"0001fed5",
00001814 => x"000107e2",
00001815 => x"89858a05",
00001816 => x"8ed1067a",
00001817 => x"8ecd05f6",
00001818 => x"17378fd5",
00001819 => x"8fd91000",
00001820 => x"faf02023",
00001821 => x"00008082",
00001822 => x"faa02223",
00001823 => x"00008082",
00001824 => x"fa002503",
00001825 => x"8082817d",
00001826 => x"00000000",
00001827 => x"00054783",
00001828 => x"cf990505",
00001829 => x"46b54729",
00001830 => x"95630505",
00001831 => x"222300e7",
00001832 => x"0001fad0",
00001833 => x"faf02223",
00001834 => x"fff54783",
00001835 => x"0001f7f5",
00001836 => x"00008082",
00001837 => x"c0ba715d",
00001838 => x"d422d606",
00001839 => x"d04ad226",
00001840 => x"cc52ce4e",
00001841 => x"dc32da2e",
00001842 => x"c2bede36",
00001843 => x"c6c6c4c2",
00001844 => x"00054783",
00001845 => x"c03a1858",
00001846 => x"6a11cf95",
00001847 => x"07136991",
00001848 => x"04930015",
00001849 => x"49350250",
00001850 => x"890a0a13",
00001851 => x"8f498993",
00001852 => x"02978a63",
00001853 => x"956346a9",
00001854 => x"222300d7",
00001855 => x"0001fb20",
00001856 => x"faf02223",
00001857 => x"0001853a",
00001858 => x"00054783",
00001859 => x"00150713",
00001860 => x"0001f3e5",
00001861 => x"542250b2",
00001862 => x"59025492",
00001863 => x"4a6249f2",
00001864 => x"80826161",
00001865 => x"00154783",
00001866 => x"04134755",
00001867 => x"87930025",
00001868 => x"f793f9d7",
00001869 => x"6fe30ff7",
00001870 => x"078afcf7",
00001871 => x"439c97d2",
00001872 => x"00018782",
00001873 => x"00544782",
00001874 => x"438c4701",
00001875 => x"c03e0791",
00001876 => x"02000613",
00001877 => x"00e5d7b3",
00001878 => x"97ce8bbd",
00001879 => x"0007c783",
00001880 => x"16fd0711",
00001881 => x"00f68423",
00001882 => x"fec716e3",
00001883 => x"00414783",
00001884 => x"00010623",
00001885 => x"0713cf91",
00001886 => x"46a90051",
00001887 => x"00d79463",
00001888 => x"fb202223",
00001889 => x"faf02223",
00001890 => x"00074783",
00001891 => x"f7fd0705",
00001892 => x"bf9d8522",
00001893 => x"004c4782",
00001894 => x"07914388",
00001895 => x"f0efc03e",
00001896 => x"4783dcff",
00001897 => x"d7ed0041",
00001898 => x"00510713",
00001899 => x"000146a9",
00001900 => x"00d79463",
00001901 => x"fb202223",
00001902 => x"faf02223",
00001903 => x"00074783",
00001904 => x"f7fd0705",
00001905 => x"b7898522",
00001906 => x"43984782",
00001907 => x"c03e0791",
00001908 => x"00074783",
00001909 => x"dfcd0705",
00001910 => x"000146a9",
00001911 => x"00d79463",
00001912 => x"fb202223",
00001913 => x"faf02223",
00001914 => x"00074783",
00001915 => x"f7fd0705",
00001916 => x"bf198522",
00001917 => x"43884782",
00001918 => x"c03e0791",
00001919 => x"00055863",
00001920 => x"02d00793",
00001921 => x"40a00533",
00001922 => x"faf02223",
00001923 => x"f0ef004c",
00001924 => x"4783d5ff",
00001925 => x"dfad0041",
00001926 => x"00510713",
00001927 => x"000146a9",
00001928 => x"00d79463",
00001929 => x"fb202223",
00001930 => x"faf02223",
00001931 => x"00074783",
00001932 => x"f7fd0705",
00001933 => x"bdc98522",
00001934 => x"85224782",
00001935 => x"0007c703",
00001936 => x"c03e0791",
00001937 => x"fae02223",
00001938 => x"0000b5c1",
00001939 => x"87aa474d",
00001940 => x"02a76263",
00001941 => x"000f1737",
00001942 => x"88870713",
00001943 => x"00a75733",
00001944 => x"45058b05",
00001945 => x"1533cb11",
00001946 => x"207300f5",
00001947 => x"45013045",
00001948 => x"00018082",
00001949 => x"00014505",
00001950 => x"00008082",
00001951 => x"90734781",
00001952 => x"9073b007",
00001953 => x"1073b805",
00001954 => x"8082b005",
00001955 => x"00000000",
00001956 => x"90734781",
00001957 => x"9073b027",
00001958 => x"1073b825",
00001959 => x"8082b025",
00001960 => x"00000000",
00001961 => x"00011141",
00001962 => x"c8102773",
00001963 => x"c01026f3",
00001964 => x"c81027f3",
00001965 => x"fee79ae3",
00001966 => x"c23ec036",
00001967 => x"45924502",
00001968 => x"80820141",
00001969 => x"00000000",
00001970 => x"34109073",
00001971 => x"80936089",
00001972 => x"b0738000",
00001973 => x"00733000",
00001974 => x"00003020",
00001975 => x"fe802503",
00001976 => x"89058151",
00001977 => x"00008082",
00001978 => x"8a05891d",
00001979 => x"05128985",
00001980 => x"8d510622",
00001981 => x"0793058e",
00001982 => x"8d4dfb00",
00001983 => x"0007a023",
00001984 => x"00156513",
00001985 => x"8082c388",
00001986 => x"00000000",
00001987 => x"fb000713",
00001988 => x"9bdd431c",
00001989 => x"8082c31c",
00001990 => x"00000000",
00001991 => x"faa02a23",
00001992 => x"fb002783",
00001993 => x"fe07cee3",
00001994 => x"fb002503",
00001995 => x"45138179",
00001996 => x"89050015",
00001997 => x"00008082",
00001998 => x"fb002783",
00001999 => x"0047e793",
00002000 => x"faf02823",
00002001 => x"fb002783",
00002002 => x"fe07cee3",
00002003 => x"00008082",
00002004 => x"fb002783",
00002005 => x"0027e793",
00002006 => x"faf02823",
00002007 => x"fb002783",
00002008 => x"fe07cee3",
00002009 => x"00008082",
00002010 => x"fe802503",
00002011 => x"8905814d",
00002012 => x"00008082",
00002013 => x"8a85891d",
00002014 => x"052a8a0d",
00002015 => x"898506be",
00002016 => x"06368d55",
00002017 => x"05a68d51",
00002018 => x"fa800793",
00002019 => x"a0238d4d",
00002020 => x"65130007",
00002021 => x"c3881005",
00002022 => x"00008082",
00002023 => x"fa800713",
00002024 => x"f793431c",
00002025 => x"c31ceff7",
00002026 => x"00008082",
00002027 => x"faa02623",
00002028 => x"fa802783",
00002029 => x"fe07cee3",
00002030 => x"fac02503",
00002031 => x"00008082",
00002032 => x"fa802503",
00002033 => x"8082817d",
00002034 => x"00000000",
00002035 => x"fe802503",
00002036 => x"89058141",
00002037 => x"00008082",
00002038 => x"f8400713",
00002039 => x"47854314",
00002040 => x"00a797b3",
00002041 => x"c31c8fd5",
00002042 => x"00008082",
00002043 => x"f8a02223",
00002044 => x"00008082",
00002045 => x"f8a02023",
00002046 => x"00008082",
00002047 => x"315b6325",
00002048 => x"6b6f5b6d",
00002049 => x"5b63255d",
00002050 => x"000a6d30",
00002051 => x"315b6325",
00002052 => x"41465b6d",
00002053 => x"44454c49",
00002054 => x"5b63255d",
00002055 => x"000a6d30",
00002056 => x"2d2d0a0a",
00002057 => x"5250202d",
00002058 => x"5345434f",
00002059 => x"2f524f53",
00002060 => x"20555043",
00002061 => x"54534554",
00002062 => x"2d2d2d20",
00002063 => x"0000000a",
00002064 => x"6c697562",
00002065 => x"4e203a64",
00002066 => x"2020766f",
00002067 => x"30322033",
00002068 => x"31203032",
00002069 => x"38343a38",
00002070 => x"0a33303a",
00002071 => x"00000000",
00002072 => x"73696854",
00002073 => x"73657420",
00002074 => x"75732074",
00002075 => x"20657469",
00002076 => x"69207369",
00002077 => x"6e65746e",
00002078 => x"20646564",
00002079 => x"76206f74",
00002080 => x"66697265",
00002081 => x"68742079",
00002082 => x"65642065",
00002083 => x"6c756166",
00002084 => x"454e2074",
00002085 => x"3356524f",
00002086 => x"72702032",
00002087 => x"7365636f",
00002088 => x"20726f73",
00002089 => x"75746573",
00002090 => x"73752070",
00002091 => x"20676e69",
00002092 => x"20656874",
00002093 => x"61666564",
00002094 => x"20746c75",
00002095 => x"74736574",
00002096 => x"636e6562",
00002097 => x"0a0a2e68",
00002098 => x"00000000",
00002099 => x"20455452",
00002100 => x"74736e69",
00002101 => x"206c6c61",
00002102 => x"6f727265",
00002103 => x"25282072",
00002104 => x"0a212969",
00002105 => x"00000000",
00002106 => x"20515249",
00002107 => x"62616e65",
00002108 => x"6520656c",
00002109 => x"726f7272",
00002110 => x"69252820",
00002111 => x"000a2129",
00002112 => x"74530a0a",
00002113 => x"69747261",
00002114 => x"7420676e",
00002115 => x"73747365",
00002116 => x"0a2e2e2e",
00002117 => x"0000000a",
00002118 => x"5d69255b",
00002119 => x"73694c20",
00002120 => x"6c612074",
00002121 => x"6361206c",
00002122 => x"73736563",
00002123 => x"656c6269",
00002124 => x"52534320",
00002125 => x"00203a73",
00002126 => x"30202b20",
00002127 => x"0a782578",
00002128 => x"00000000",
00002129 => x"70696b73",
00002130 => x"20646570",
00002131 => x"73696428",
00002132 => x"656c6261",
00002133 => x"6f662064",
00002134 => x"69732072",
00002135 => x"616c756d",
00002136 => x"6e6f6974",
00002137 => x"00000a29",
00002138 => x"5d69255b",
00002139 => x"66654420",
00002140 => x"746c7561",
00002141 => x"55464320",
00002142 => x"63612030",
00002143 => x"73736563",
00002144 => x"73657420",
00002145 => x"00203a74",
00002146 => x"70696b73",
00002147 => x"20646570",
00002148 => x"55464328",
00002149 => x"6f6e2030",
00002150 => x"6d692074",
00002151 => x"6d656c70",
00002152 => x"65746e65",
00002153 => x"000a2964",
00002154 => x"5d69255b",
00002155 => x"66654420",
00002156 => x"746c7561",
00002157 => x"55464320",
00002158 => x"63612031",
00002159 => x"73736563",
00002160 => x"73657420",
00002161 => x"00203a74",
00002162 => x"70696b73",
00002163 => x"20646570",
00002164 => x"55464328",
00002165 => x"6f6e2031",
00002166 => x"6d692074",
00002167 => x"6d656c70",
00002168 => x"65746e65",
00002169 => x"000a2964",
00002170 => x"5d69255b",
00002171 => x"74734520",
00002172 => x"74616d69",
00002173 => x"75622065",
00002174 => x"69742073",
00002175 => x"6f2d656d",
00002176 => x"6c207475",
00002177 => x"6e657461",
00002178 => x"203a7963",
00002179 => x"00000000",
00002180 => x"2075257e",
00002181 => x"6c637963",
00002182 => x"000a7365",
00002183 => x"5d69255b",
00002184 => x"74784520",
00002185 => x"616e7265",
00002186 => x"656d206c",
00002187 => x"79726f6d",
00002188 => x"63636120",
00002189 => x"20737365",
00002190 => x"30204028",
00002191 => x"29782578",
00002192 => x"73657420",
00002193 => x"00203a74",
00002194 => x"70696b73",
00002195 => x"20646570",
00002196 => x"74786528",
00002197 => x"616e7265",
00002198 => x"656d206c",
00002199 => x"79726f6d",
00002200 => x"746e6920",
00002201 => x"61667265",
00002202 => x"6e206563",
00002203 => x"6920746f",
00002204 => x"656c706d",
00002205 => x"746e656d",
00002206 => x"0a296465",
00002207 => x"00000000",
00002208 => x"70696b73",
00002209 => x"20646570",
00002210 => x"206e6f28",
00002211 => x"6c616572",
00002212 => x"72616820",
00002213 => x"72617764",
00002214 => x"000a2965",
00002215 => x"5d69255b",
00002216 => x"6d695420",
00002217 => x"4d282065",
00002218 => x"454d4954",
00002219 => x"6d69742e",
00002220 => x"73762065",
00002221 => x"52534320",
00002222 => x"6d69742e",
00002223 => x"73202965",
00002224 => x"3a636e79",
00002225 => x"00000020",
00002226 => x"5d69255b",
00002227 => x"4e454620",
00002228 => x"69204543",
00002229 => x"7274736e",
00002230 => x"69746375",
00002231 => x"74206e6f",
00002232 => x"3a747365",
00002233 => x"00000020",
00002234 => x"5d69255b",
00002235 => x"4e454620",
00002236 => x"492e4543",
00002237 => x"736e6920",
00002238 => x"63757274",
00002239 => x"6e6f6974",
00002240 => x"73657420",
00002241 => x"00203a74",
00002242 => x"70696b73",
00002243 => x"20646570",
00002244 => x"746f6e28",
00002245 => x"706d6920",
00002246 => x"656d656c",
00002247 => x"6465746e",
00002248 => x"00000a29",
00002249 => x"5d69255b",
00002250 => x"6c6c4920",
00002251 => x"6c616765",
00002252 => x"52534320",
00002253 => x"78302820",
00002254 => x"29666666",
00002255 => x"63636120",
00002256 => x"20737365",
00002257 => x"74736574",
00002258 => x"0000203a",
00002259 => x"5d69255b",
00002260 => x"61655220",
00002261 => x"6e6f2d64",
00002262 => x"4320796c",
00002263 => x"28205253",
00002264 => x"656d6974",
00002265 => x"72772029",
00002266 => x"20657469",
00002267 => x"65636361",
00002268 => x"74207373",
00002269 => x"3a747365",
00002270 => x"00000020",
00002271 => x"5d69255b",
00002272 => x"61655220",
00002273 => x"6e6f2d64",
00002274 => x"4320796c",
00002275 => x"28205253",
00002276 => x"656d6974",
00002277 => x"6f6e2029",
00002278 => x"6972772d",
00002279 => x"28206574",
00002280 => x"3d317372",
00002281 => x"61202930",
00002282 => x"73656363",
00002283 => x"65742073",
00002284 => x"203a7473",
00002285 => x"00000000",
00002286 => x"5d69255b",
00002287 => x"415f4920",
00002288 => x"4e47494c",
00002289 => x"6e692820",
00002290 => x"75727473",
00002291 => x"6f697463",
00002292 => x"6c61206e",
00002293 => x"6d6e6769",
00002294 => x"29746e65",
00002295 => x"63786520",
00002296 => x"69747065",
00002297 => x"74206e6f",
00002298 => x"3a747365",
00002299 => x"00000020",
00002300 => x"000a6b6f",
00002301 => x"6c696166",
00002302 => x"0000000a",
00002303 => x"70696b73",
00002304 => x"20646570",
00002305 => x"746f6e28",
00002306 => x"736f7020",
00002307 => x"6c626973",
00002308 => x"68772065",
00002309 => x"43206e65",
00002310 => x"74786520",
00002311 => x"69736e65",
00002312 => x"69206e6f",
00002313 => x"6e652073",
00002314 => x"656c6261",
00002315 => x"000a2964",
00002316 => x"5d69255b",
00002317 => x"415f4920",
00002318 => x"28204343",
00002319 => x"74736e69",
00002320 => x"74637572",
00002321 => x"206e6f69",
00002322 => x"20737562",
00002323 => x"65636361",
00002324 => x"20297373",
00002325 => x"65637865",
00002326 => x"6f697470",
00002327 => x"6574206e",
00002328 => x"203a7473",
00002329 => x"00000000",
00002330 => x"5d69255b",
00002331 => x"495f4920",
00002332 => x"47454c4c",
00002333 => x"6c692820",
00002334 => x"6167656c",
00002335 => x"6e69206c",
00002336 => x"75727473",
00002337 => x"6f697463",
00002338 => x"6520296e",
00002339 => x"70656378",
00002340 => x"6e6f6974",
00002341 => x"73657420",
00002342 => x"00203a74",
00002343 => x"5d69255b",
00002344 => x"5f494320",
00002345 => x"454c4c49",
00002346 => x"69282047",
00002347 => x"67656c6c",
00002348 => x"63206c61",
00002349 => x"72706d6f",
00002350 => x"65737365",
00002351 => x"6e692064",
00002352 => x"75727473",
00002353 => x"6f697463",
00002354 => x"6520296e",
00002355 => x"70656378",
00002356 => x"6e6f6974",
00002357 => x"73657420",
00002358 => x"00203a74",
00002359 => x"70696b73",
00002360 => x"20646570",
00002361 => x"746f6e28",
00002362 => x"736f7020",
00002363 => x"6c626973",
00002364 => x"68772065",
00002365 => x"43206e65",
00002366 => x"5458452d",
00002367 => x"73696420",
00002368 => x"656c6261",
00002369 => x"000a2964",
00002370 => x"5d69255b",
00002371 => x"45524220",
00002372 => x"28204b41",
00002373 => x"61657262",
00002374 => x"6e69206b",
00002375 => x"75727473",
00002376 => x"6f697463",
00002377 => x"6520296e",
00002378 => x"70656378",
00002379 => x"6e6f6974",
00002380 => x"73657420",
00002381 => x"00203a74",
00002382 => x"5d69255b",
00002383 => x"415f4c20",
00002384 => x"4e47494c",
00002385 => x"6f6c2820",
00002386 => x"61206461",
00002387 => x"65726464",
00002388 => x"61207373",
00002389 => x"6e67696c",
00002390 => x"746e656d",
00002391 => x"78652029",
00002392 => x"74706563",
00002393 => x"206e6f69",
00002394 => x"74736574",
00002395 => x"0000203a",
00002396 => x"5d69255b",
00002397 => x"415f4c20",
00002398 => x"28204343",
00002399 => x"64616f6c",
00002400 => x"73756220",
00002401 => x"63636120",
00002402 => x"29737365",
00002403 => x"63786520",
00002404 => x"69747065",
00002405 => x"74206e6f",
00002406 => x"3a747365",
00002407 => x"00000020",
00002408 => x"5d69255b",
00002409 => x"415f5320",
00002410 => x"4e47494c",
00002411 => x"74732820",
00002412 => x"2065726f",
00002413 => x"72646461",
00002414 => x"20737365",
00002415 => x"67696c61",
00002416 => x"6e656d6e",
00002417 => x"65202974",
00002418 => x"70656378",
00002419 => x"6e6f6974",
00002420 => x"73657420",
00002421 => x"00203a74",
00002422 => x"5d69255b",
00002423 => x"415f5320",
00002424 => x"28204343",
00002425 => x"726f7473",
00002426 => x"75622065",
00002427 => x"63612073",
00002428 => x"73736563",
00002429 => x"78652029",
00002430 => x"74706563",
00002431 => x"206e6f69",
00002432 => x"74736574",
00002433 => x"0000203a",
00002434 => x"5d69255b",
00002435 => x"564e4520",
00002436 => x"4c4c4143",
00002437 => x"63652820",
00002438 => x"206c6c61",
00002439 => x"74736e69",
00002440 => x"74637572",
00002441 => x"296e6f69",
00002442 => x"63786520",
00002443 => x"69747065",
00002444 => x"74206e6f",
00002445 => x"3a747365",
00002446 => x"00000020",
00002447 => x"5d69255b",
00002448 => x"49544d20",
00002449 => x"616d2820",
00002450 => x"6e696863",
00002451 => x"69742065",
00002452 => x"2972656d",
00002453 => x"746e6920",
00002454 => x"75727265",
00002455 => x"74207470",
00002456 => x"3a747365",
00002457 => x"00000020",
00002458 => x"70696b73",
00002459 => x"20646570",
00002460 => x"54445728",
00002461 => x"746f6e20",
00002462 => x"706d6920",
00002463 => x"656d656c",
00002464 => x"6465746e",
00002465 => x"00000a29",
00002466 => x"5d69255b",
00002467 => x"52494620",
00002468 => x"28203051",
00002469 => x"74736166",
00002470 => x"51524920",
00002471 => x"69202930",
00002472 => x"7265746e",
00002473 => x"74707572",
00002474 => x"73657420",
00002475 => x"76282074",
00002476 => x"57206169",
00002477 => x"3a295444",
00002478 => x"00000020",
00002479 => x"5d69255b",
00002480 => x"52494620",
00002481 => x"28203151",
00002482 => x"74736166",
00002483 => x"51524920",
00002484 => x"69202931",
00002485 => x"7265746e",
00002486 => x"74707572",
00002487 => x"73657420",
00002488 => x"76282074",
00002489 => x"47206169",
00002490 => x"294f4950",
00002491 => x"0000203a",
00002492 => x"70696b73",
00002493 => x"20646570",
00002494 => x"49504728",
00002495 => x"6f6e204f",
00002496 => x"6d692074",
00002497 => x"6d656c70",
00002498 => x"65746e65",
00002499 => x"000a2964",
00002500 => x"5d69255b",
00002501 => x"52494620",
00002502 => x"28203251",
00002503 => x"74736166",
00002504 => x"51524920",
00002505 => x"69202932",
00002506 => x"7265746e",
00002507 => x"74707572",
00002508 => x"73657420",
00002509 => x"76282074",
00002510 => x"55206169",
00002511 => x"29545241",
00002512 => x"0000203a",
00002513 => x"70696b73",
00002514 => x"20646570",
00002515 => x"52415528",
00002516 => x"6f6e2054",
00002517 => x"6d692074",
00002518 => x"6d656c70",
00002519 => x"65746e65",
00002520 => x"000a2964",
00002521 => x"5d69255b",
00002522 => x"52494620",
00002523 => x"28203351",
00002524 => x"74736166",
00002525 => x"51524920",
00002526 => x"69202933",
00002527 => x"7265746e",
00002528 => x"74707572",
00002529 => x"73657420",
00002530 => x"76282074",
00002531 => x"53206169",
00002532 => x"3a294950",
00002533 => x"00000020",
00002534 => x"70696b73",
00002535 => x"20646570",
00002536 => x"49505328",
00002537 => x"746f6e20",
00002538 => x"706d6920",
00002539 => x"656d656c",
00002540 => x"6465746e",
00002541 => x"00000a29",
00002542 => x"5d69255b",
00002543 => x"52494620",
00002544 => x"28203351",
00002545 => x"74736166",
00002546 => x"51524920",
00002547 => x"69202933",
00002548 => x"7265746e",
00002549 => x"74707572",
00002550 => x"73657420",
00002551 => x"76282074",
00002552 => x"54206169",
00002553 => x"3a294957",
00002554 => x"00000020",
00002555 => x"70696b73",
00002556 => x"20646570",
00002557 => x"49575428",
00002558 => x"746f6e20",
00002559 => x"706d6920",
00002560 => x"656d656c",
00002561 => x"6465746e",
00002562 => x"00000a29",
00002563 => x"5d69255b",
00002564 => x"49465720",
00002565 => x"61772820",
00002566 => x"66207469",
00002567 => x"6920726f",
00002568 => x"7265746e",
00002569 => x"74707572",
00002570 => x"73202f20",
00002571 => x"7065656c",
00002572 => x"736e6920",
00002573 => x"63757274",
00002574 => x"6e6f6974",
00002575 => x"65742029",
00002576 => x"28207473",
00002577 => x"656b6177",
00002578 => x"2070752d",
00002579 => x"20616976",
00002580 => x"4d49544d",
00002581 => x"203a2945",
00002582 => x"00000000",
00002583 => x"70696b73",
00002584 => x"20646570",
00002585 => x"49544d28",
00002586 => x"6e20454d",
00002587 => x"6920746f",
00002588 => x"656c706d",
00002589 => x"746e656d",
00002590 => x"0a296465",
00002591 => x"00000000",
00002592 => x"5d69255b",
00002593 => x"766e4920",
00002594 => x"64696c61",
00002595 => x"52534320",
00002596 => x"63636120",
00002597 => x"20737365",
00002598 => x"74736d28",
00002599 => x"73757461",
00002600 => x"72662029",
00002601 => x"75206d6f",
00002602 => x"20726573",
00002603 => x"65646f6d",
00002604 => x"73657420",
00002605 => x"00203a74",
00002606 => x"70696b73",
00002607 => x"20646570",
00002608 => x"746f6e28",
00002609 => x"736f7020",
00002610 => x"6c626973",
00002611 => x"68772065",
00002612 => x"55206e65",
00002613 => x"5458452d",
00002614 => x"73696420",
00002615 => x"656c6261",
00002616 => x"000a2964",
00002617 => x"5d69255b",
00002618 => x"45545220",
00002619 => x"75722820",
00002620 => x"6d69746e",
00002621 => x"6e652065",
00002622 => x"6f726976",
00002623 => x"6e656d6e",
00002624 => x"64202974",
00002625 => x"67756265",
00002626 => x"61727420",
00002627 => x"61682070",
00002628 => x"656c646e",
00002629 => x"65742072",
00002630 => x"203a7473",
00002631 => x"00000000",
00002632 => x"77736e61",
00002633 => x"203a7265",
00002634 => x"78257830",
00002635 => x"00000000",
00002636 => x"5d69255b",
00002637 => x"79685020",
00002638 => x"61636973",
00002639 => x"656d206c",
00002640 => x"79726f6d",
00002641 => x"6f727020",
00002642 => x"74636574",
00002643 => x"206e6f69",
00002644 => x"504d5028",
00002645 => x"00203a29",
00002646 => x"61657243",
00002647 => x"676e6974",
00002648 => x"6f727020",
00002649 => x"74636574",
00002650 => x"70206465",
00002651 => x"20656761",
00002652 => x"50414e28",
00002653 => x"202c544f",
00002654 => x"2c58215b",
00002655 => x"522c5721",
00002656 => x"25202c5d",
00002657 => x"79622075",
00002658 => x"29736574",
00002659 => x"30204020",
00002660 => x"20782578",
00002661 => x"504d5028",
00002662 => x"52444441",
00002663 => x"30203d20",
00002664 => x"29782578",
00002665 => x"0000203a",
00002666 => x"5d69255b",
00002667 => x"50202d20",
00002668 => x"203a504d",
00002669 => x"6f6d2d55",
00002670 => x"5b206564",
00002671 => x"212c5821",
00002672 => x"5d522c57",
00002673 => x"65786520",
00002674 => x"65747563",
00002675 => x"73657420",
00002676 => x"20203a74",
00002677 => x"00000000",
00002678 => x"5d69255b",
00002679 => x"50202d20",
00002680 => x"203a504d",
00002681 => x"6f6d2d55",
00002682 => x"5b206564",
00002683 => x"212c5821",
00002684 => x"5d522c57",
00002685 => x"61657220",
00002686 => x"65742064",
00002687 => x"203a7473",
00002688 => x"20202020",
00002689 => x"00000000",
00002690 => x"5d69255b",
00002691 => x"50202d20",
00002692 => x"203a504d",
00002693 => x"6f6d2d55",
00002694 => x"5b206564",
00002695 => x"212c5821",
00002696 => x"5d522c57",
00002697 => x"69727720",
00002698 => x"74206574",
00002699 => x"3a747365",
00002700 => x"20202020",
00002701 => x"00000000",
00002702 => x"5d69255b",
00002703 => x"50202d20",
00002704 => x"203a504d",
00002705 => x"63706d70",
00002706 => x"2e306766",
00002707 => x"6d5b2030",
00002708 => x"3d65646f",
00002709 => x"5d66666f",
00002710 => x"636f6c20",
00002711 => x"6574206b",
00002712 => x"203a7473",
00002713 => x"00000000",
00002714 => x"5d69255b",
00002715 => x"50202d20",
00002716 => x"203a504d",
00002717 => x"61706d70",
00002718 => x"30726464",
00002719 => x"6f6d5b20",
00002720 => x"6f3d6564",
00002721 => x"205d6666",
00002722 => x"6b636f6c",
00002723 => x"73657420",
00002724 => x"20203a74",
00002725 => x"00000000",
00002726 => x"20746f6e",
00002727 => x"6c706d69",
00002728 => x"6e656d65",
00002729 => x"0a646574",
00002730 => x"00000000",
00002731 => x"6578450a",
00002732 => x"65747563",
00002733 => x"6e692064",
00002734 => x"75727473",
00002735 => x"6f697463",
00002736 => x"203a736e",
00002737 => x"000a7525",
00002738 => x"75716552",
00002739 => x"64657269",
00002740 => x"6f6c6320",
00002741 => x"63206b63",
00002742 => x"656c6379",
00002743 => x"25203a73",
00002744 => x"00000a75",
00002745 => x"7365540a",
00002746 => x"65722074",
00002747 => x"746c7573",
00002748 => x"4f0a3a73",
00002749 => x"20203a4b",
00002750 => x"25202020",
00002751 => x"69252f69",
00002752 => x"4941460a",
00002753 => x"3a44454c",
00002754 => x"2f692520",
00002755 => x"0a0a6925",
00002756 => x"00000000",
00002757 => x"315b6325",
00002758 => x"50435b6d",
00002759 => x"45542055",
00002760 => x"43205453",
00002761 => x"4c504d4f",
00002762 => x"44455445",
00002763 => x"43555320",
00002764 => x"53534543",
00002765 => x"4c4c5546",
00002766 => x"255d2159",
00002767 => x"6d305b63",
00002768 => x"0000000a",
00002769 => x"315b6325",
00002770 => x"50435b6d",
00002771 => x"45542055",
00002772 => x"46205453",
00002773 => x"454c4941",
00002774 => x"255d2144",
00002775 => x"6d305b63",
00002776 => x"0000000a",
00002777 => x"000011ac",
00002778 => x"000011b4",
00002779 => x"000011bc",
00002780 => x"000011c4",
00002781 => x"000011cc",
00002782 => x"000011d4",
00002783 => x"000011dc",
00002784 => x"000011e4",
00002785 => x"0000114c",
00002786 => x"0000114c",
00002787 => x"0000114c",
00002788 => x"000011a4",
00002789 => x"0000121c",
00002790 => x"0000114c",
00002791 => x"0000114c",
00002792 => x"0000114c",
00002793 => x"0000120c",
00002794 => x"0000114c",
00002795 => x"0000114c",
00002796 => x"0000114c",
00002797 => x"00001214",
00002798 => x"0000114c",
00002799 => x"0000114c",
00002800 => x"0000114c",
00002801 => x"0000114c",
00002802 => x"000011ec",
00002803 => x"000011f4",
00002804 => x"000011fc",
00002805 => x"00001204",
00002806 => x"4554523c",
00002807 => x"0000203e",
00002808 => x"74736e49",
00002809 => x"74637572",
00002810 => x"206e6f69",
00002811 => x"72646461",
00002812 => x"20737365",
00002813 => x"6173696d",
00002814 => x"6e67696c",
00002815 => x"00006465",
00002816 => x"74736e49",
00002817 => x"74637572",
00002818 => x"206e6f69",
00002819 => x"65636361",
00002820 => x"66207373",
00002821 => x"746c7561",
00002822 => x"00000000",
00002823 => x"656c6c49",
00002824 => x"206c6167",
00002825 => x"74736e69",
00002826 => x"74637572",
00002827 => x"006e6f69",
00002828 => x"61657242",
00002829 => x"696f706b",
00002830 => x"0000746e",
00002831 => x"64616f4c",
00002832 => x"64646120",
00002833 => x"73736572",
00002834 => x"73696d20",
00002835 => x"67696c61",
00002836 => x"0064656e",
00002837 => x"64616f4c",
00002838 => x"63636120",
00002839 => x"20737365",
00002840 => x"6c756166",
00002841 => x"00000074",
00002842 => x"726f7453",
00002843 => x"64612065",
00002844 => x"73657264",
00002845 => x"696d2073",
00002846 => x"696c6173",
00002847 => x"64656e67",
00002848 => x"00000000",
00002849 => x"726f7453",
00002850 => x"63612065",
00002851 => x"73736563",
00002852 => x"75616620",
00002853 => x"0000746c",
00002854 => x"69766e45",
00002855 => x"6d6e6f72",
00002856 => x"20746e65",
00002857 => x"6c6c6163",
00002858 => x"00000000",
00002859 => x"6863614d",
00002860 => x"20656e69",
00002861 => x"74666f73",
00002862 => x"65726177",
00002863 => x"746e6920",
00002864 => x"75727265",
00002865 => x"00007470",
00002866 => x"6863614d",
00002867 => x"20656e69",
00002868 => x"656d6974",
00002869 => x"6e692072",
00002870 => x"72726574",
00002871 => x"00747075",
00002872 => x"6863614d",
00002873 => x"20656e69",
00002874 => x"65747865",
00002875 => x"6c616e72",
00002876 => x"746e6920",
00002877 => x"75727265",
00002878 => x"00007470",
00002879 => x"74736146",
00002880 => x"746e6920",
00002881 => x"75727265",
00002882 => x"30207470",
00002883 => x"00000000",
00002884 => x"74736146",
00002885 => x"746e6920",
00002886 => x"75727265",
00002887 => x"31207470",
00002888 => x"00000000",
00002889 => x"74736146",
00002890 => x"746e6920",
00002891 => x"75727265",
00002892 => x"32207470",
00002893 => x"00000000",
00002894 => x"74736146",
00002895 => x"746e6920",
00002896 => x"75727265",
00002897 => x"33207470",
00002898 => x"00000000",
00002899 => x"6e6b6e55",
00002900 => x"206e776f",
00002901 => x"70617274",
00002902 => x"75616320",
00002903 => x"203a6573",
00002904 => x"00000000",
00002905 => x"00007830",
00002906 => x"50204020",
00002907 => x"00003d43",
00002908 => x"544d202c",
00002909 => x"3d4c4156",
00002910 => x"00000000",
00002911 => x"000012b4",
00002912 => x"00001344",
00002913 => x"00001358",
00002914 => x"0000136c",
00002915 => x"00001380",
00002916 => x"00001394",
00002917 => x"000013a8",
00002918 => x"000013bc",
00002919 => x"0000127c",
00002920 => x"0000127c",
00002921 => x"0000127c",
00002922 => x"000013d0",
00002923 => x"00001448",
00002924 => x"0000127c",
00002925 => x"0000127c",
00002926 => x"0000127c",
00002927 => x"00001434",
00002928 => x"0000127c",
00002929 => x"0000127c",
00002930 => x"0000127c",
00002931 => x"0000145c",
00002932 => x"0000127c",
00002933 => x"0000127c",
00002934 => x"0000127c",
00002935 => x"0000127c",
00002936 => x"000013e4",
00002937 => x"000013f8",
00002938 => x"0000140c",
00002939 => x"00001420",
00002940 => x"4554523c",
00002941 => x"4157203e",
00002942 => x"4e494e52",
00002943 => x"43202147",
00002944 => x"43205550",
00002945 => x"73205253",
00002946 => x"65747379",
00002947 => x"6f6e206d",
00002948 => x"76612074",
00002949 => x"616c6961",
00002950 => x"21656c62",
00002951 => x"522f3c20",
00002952 => x"003e4554",
00002953 => x"3c3c0a0a",
00002954 => x"72614820",
00002955 => x"72617764",
00002956 => x"6f432065",
00002957 => x"6769666e",
00002958 => x"74617275",
00002959 => x"206e6f69",
00002960 => x"7265764f",
00002961 => x"77656976",
00002962 => x"0a3e3e20",
00002963 => x"00000000",
00002964 => x"202d2d0a",
00002965 => x"746e6543",
00002966 => x"206c6172",
00002967 => x"636f7250",
00002968 => x"69737365",
00002969 => x"5520676e",
00002970 => x"2074696e",
00002971 => x"000a2d2d",
00002972 => x"74726148",
00002973 => x"3a444920",
00002974 => x"20202020",
00002975 => x"20202020",
00002976 => x"30202020",
00002977 => x"0a782578",
00002978 => x"00000000",
00002979 => x"646e6556",
00002980 => x"4920726f",
00002981 => x"20203a44",
00002982 => x"20202020",
00002983 => x"30202020",
00002984 => x"0a782578",
00002985 => x"00000000",
00002986 => x"68637241",
00002987 => x"63657469",
00002988 => x"65727574",
00002989 => x"3a444920",
00002990 => x"30202020",
00002991 => x"00782578",
00002992 => x"454e2820",
00002993 => x"3356524f",
00002994 => x"00002932",
00002995 => x"706d490a",
00002996 => x"656d656c",
00002997 => x"7461746e",
00002998 => x"206e6f69",
00002999 => x"203a4449",
00003000 => x"78257830",
00003001 => x"00002820",
00003002 => x"68637241",
00003003 => x"63657469",
00003004 => x"65727574",
00003005 => x"2020203a",
00003006 => x"00202020",
00003007 => x"6e6b6e75",
00003008 => x"006e776f",
00003009 => x"32335652",
00003010 => x"00000000",
00003011 => x"32315652",
00003012 => x"00000038",
00003013 => x"34365652",
00003014 => x"00000000",
00003015 => x"7478450a",
00003016 => x"69736e65",
00003017 => x"3a736e6f",
00003018 => x"20202020",
00003019 => x"20202020",
00003020 => x"00000000",
00003021 => x"7363695a",
00003022 => x"00002072",
00003023 => x"6566695a",
00003024 => x"6965636e",
00003025 => x"00000020",
00003026 => x"20504d50",
00003027 => x"00000000",
00003028 => x"68500a0a",
00003029 => x"63697379",
00003030 => x"6d206c61",
00003031 => x"726f6d65",
00003032 => x"72702079",
00003033 => x"6365746f",
00003034 => x"6e6f6974",
00003035 => x"0000203a",
00003036 => x"4d202d0a",
00003037 => x"67206e69",
00003038 => x"756e6172",
00003039 => x"6972616c",
00003040 => x"203a7974",
00003041 => x"00000000",
00003042 => x"62207525",
00003043 => x"73657479",
00003044 => x"72657020",
00003045 => x"67657220",
00003046 => x"0a6e6f69",
00003047 => x"00000000",
00003048 => x"75255e32",
00003049 => x"74796220",
00003050 => x"70207365",
00003051 => x"72207265",
00003052 => x"6f696765",
00003053 => x"00000a6e",
00003054 => x"6f4d202d",
00003055 => x"54206564",
00003056 => x"203a524f",
00003057 => x"00002020",
00003058 => x"69617661",
00003059 => x"6c62616c",
00003060 => x"00000a65",
00003061 => x"6f4d202d",
00003062 => x"4e206564",
00003063 => x"203a3441",
00003064 => x"00002020",
00003065 => x"6f4d202d",
00003066 => x"4e206564",
00003067 => x"544f5041",
00003068 => x"0000203a",
00003069 => x"2d2d0a0a",
00003070 => x"6f725020",
00003071 => x"73736563",
00003072 => x"2d20726f",
00003073 => x"00000a2d",
00003074 => x"636f6c43",
00003075 => x"20203a6b",
00003076 => x"20752520",
00003077 => x"000a7a48",
00003078 => x"72657355",
00003079 => x"3a444920",
00003080 => x"25783020",
00003081 => x"00000a78",
00003082 => x"202d2d0a",
00003083 => x"636f7250",
00003084 => x"6f737365",
00003085 => x"654d2072",
00003086 => x"79726f6d",
00003087 => x"6e6f4320",
00003088 => x"75676966",
00003089 => x"69746172",
00003090 => x"2d206e6f",
00003091 => x"00000a2d",
00003092 => x"74736e49",
00003093 => x"62202e72",
00003094 => x"20657361",
00003095 => x"72646461",
00003096 => x"3a737365",
00003097 => x"78302020",
00003098 => x"000a7825",
00003099 => x"65746e49",
00003100 => x"6c616e72",
00003101 => x"454d4920",
00003102 => x"20203a4d",
00003103 => x"20202020",
00003104 => x"00002020",
00003105 => x"65757254",
00003106 => x"0000000a",
00003107 => x"736c6146",
00003108 => x"00000a65",
00003109 => x"4d454d49",
00003110 => x"7a697320",
00003111 => x"20203a65",
00003112 => x"20202020",
00003113 => x"20202020",
00003114 => x"75252020",
00003115 => x"74796220",
00003116 => x"000a7365",
00003117 => x"65746e49",
00003118 => x"6c616e72",
00003119 => x"454d4920",
00003120 => x"7361204d",
00003121 => x"4d4f5220",
00003122 => x"0000203a",
00003123 => x"61746144",
00003124 => x"73616220",
00003125 => x"64612065",
00003126 => x"73657264",
00003127 => x"20203a73",
00003128 => x"78302020",
00003129 => x"000a7825",
00003130 => x"65746e49",
00003131 => x"6c616e72",
00003132 => x"454d4420",
00003133 => x"20203a4d",
00003134 => x"20202020",
00003135 => x"00002020",
00003136 => x"4d454d44",
00003137 => x"7a697320",
00003138 => x"20203a65",
00003139 => x"20202020",
00003140 => x"20202020",
00003141 => x"75252020",
00003142 => x"74796220",
00003143 => x"000a7365",
00003144 => x"746f6f42",
00003145 => x"64616f6c",
00003146 => x"203a7265",
00003147 => x"20202020",
00003148 => x"20202020",
00003149 => x"00002020",
00003150 => x"65747845",
00003151 => x"6c616e72",
00003152 => x"69204d20",
00003153 => x"7265746e",
00003154 => x"65636166",
00003155 => x"0000203a",
00003156 => x"202d2d0a",
00003157 => x"636f7250",
00003158 => x"6f737365",
00003159 => x"65502072",
00003160 => x"68706972",
00003161 => x"6c617265",
00003162 => x"2d2d2073",
00003163 => x"0000000a",
00003164 => x"4f495047",
00003165 => x"0020203a",
00003166 => x"4d49544d",
00003167 => x"00203a45",
00003168 => x"54524155",
00003169 => x"0020203a",
00003170 => x"3a495053",
00003171 => x"00202020",
00003172 => x"3a495754",
00003173 => x"00202020",
00003174 => x"3a4d5750",
00003175 => x"00202020",
00003176 => x"3a544457",
00003177 => x"00202020",
00003178 => x"474e5254",
00003179 => x"0020203a",
00003180 => x"30554643",
00003181 => x"0020203a",
00003182 => x"31554643",
00003183 => x"0020203a",
00003184 => x"68540a0a",
00003185 => x"454e2065",
00003186 => x"3356524f",
00003187 => x"72502032",
00003188 => x"7365636f",
00003189 => x"20726f73",
00003190 => x"6a6f7250",
00003191 => x"0a746365",
00003192 => x"53207962",
00003193 => x"68706574",
00003194 => x"4e206e61",
00003195 => x"69746c6f",
00003196 => x"680a676e",
00003197 => x"73707474",
00003198 => x"672f2f3a",
00003199 => x"75687469",
00003200 => x"6f632e62",
00003201 => x"74732f6d",
00003202 => x"746c6f6e",
00003203 => x"2f676e69",
00003204 => x"726f656e",
00003205 => x"0a323376",
00003206 => x"6564616d",
00003207 => x"206e6920",
00003208 => x"6e6e6148",
00003209 => x"7265766f",
00003210 => x"6547202c",
00003211 => x"6e616d72",
00003212 => x"000a0a79",
00003213 => x"53420a0a",
00003214 => x"2d332044",
00003215 => x"75616c43",
00003216 => x"4c206573",
00003217 => x"6e656369",
00003218 => x"0a0a6573",
00003219 => x"79706f43",
00003220 => x"68676972",
00003221 => x"63282074",
00003222 => x"30322029",
00003223 => x"202c3032",
00003224 => x"70657453",
00003225 => x"206e6168",
00003226 => x"746c6f4e",
00003227 => x"2e676e69",
00003228 => x"6c6c4120",
00003229 => x"67697220",
00003230 => x"20737468",
00003231 => x"65736572",
00003232 => x"64657672",
00003233 => x"520a0a2e",
00003234 => x"73696465",
00003235 => x"62697274",
00003236 => x"6f697475",
00003237 => x"6e61206e",
00003238 => x"73752064",
00003239 => x"6e692065",
00003240 => x"756f7320",
00003241 => x"20656372",
00003242 => x"20646e61",
00003243 => x"616e6962",
00003244 => x"66207972",
00003245 => x"736d726f",
00003246 => x"6977202c",
00003247 => x"6f206874",
00003248 => x"69772072",
00003249 => x"756f6874",
00003250 => x"6f6d2074",
00003251 => x"69666964",
00003252 => x"69746163",
00003253 => x"202c6e6f",
00003254 => x"0a657261",
00003255 => x"6d726570",
00003256 => x"65747469",
00003257 => x"72702064",
00003258 => x"6469766f",
00003259 => x"74206465",
00003260 => x"20746168",
00003261 => x"20656874",
00003262 => x"6c6c6f66",
00003263 => x"6e69776f",
00003264 => x"6f632067",
00003265 => x"7469646e",
00003266 => x"736e6f69",
00003267 => x"65726120",
00003268 => x"74656d20",
00003269 => x"310a0a3a",
00003270 => x"6552202e",
00003271 => x"74736964",
00003272 => x"75626972",
00003273 => x"6e6f6974",
00003274 => x"666f2073",
00003275 => x"756f7320",
00003276 => x"20656372",
00003277 => x"65646f63",
00003278 => x"73756d20",
00003279 => x"65722074",
00003280 => x"6e696174",
00003281 => x"65687420",
00003282 => x"6f626120",
00003283 => x"63206576",
00003284 => x"7279706f",
00003285 => x"74686769",
00003286 => x"746f6e20",
00003287 => x"2c656369",
00003288 => x"69687420",
00003289 => x"696c2073",
00003290 => x"6f207473",
00003291 => x"20200a66",
00003292 => x"6e6f6320",
00003293 => x"69746964",
00003294 => x"20736e6f",
00003295 => x"20646e61",
00003296 => x"20656874",
00003297 => x"6c6c6f66",
00003298 => x"6e69776f",
00003299 => x"69642067",
00003300 => x"616c6373",
00003301 => x"72656d69",
00003302 => x"320a0a2e",
00003303 => x"6552202e",
00003304 => x"74736964",
00003305 => x"75626972",
00003306 => x"6e6f6974",
00003307 => x"6e692073",
00003308 => x"6e696220",
00003309 => x"20797261",
00003310 => x"6d726f66",
00003311 => x"73756d20",
00003312 => x"65722074",
00003313 => x"646f7270",
00003314 => x"20656375",
00003315 => x"20656874",
00003316 => x"766f6261",
00003317 => x"6f632065",
00003318 => x"69727970",
00003319 => x"20746867",
00003320 => x"69746f6e",
00003321 => x"202c6563",
00003322 => x"73696874",
00003323 => x"73696c20",
00003324 => x"666f2074",
00003325 => x"2020200a",
00003326 => x"646e6f63",
00003327 => x"6f697469",
00003328 => x"6120736e",
00003329 => x"7420646e",
00003330 => x"66206568",
00003331 => x"6f6c6c6f",
00003332 => x"676e6977",
00003333 => x"73696420",
00003334 => x"69616c63",
00003335 => x"2072656d",
00003336 => x"74206e69",
00003337 => x"64206568",
00003338 => x"6d75636f",
00003339 => x"61746e65",
00003340 => x"6e6f6974",
00003341 => x"646e6120",
00003342 => x"20726f2f",
00003343 => x"6568746f",
00003344 => x"616d2072",
00003345 => x"69726574",
00003346 => x"0a736c61",
00003347 => x"70202020",
00003348 => x"69766f72",
00003349 => x"20646564",
00003350 => x"68746977",
00003351 => x"65687420",
00003352 => x"73696420",
00003353 => x"62697274",
00003354 => x"6f697475",
00003355 => x"0a0a2e6e",
00003356 => x"4e202e33",
00003357 => x"68746965",
00003358 => x"74207265",
00003359 => x"6e206568",
00003360 => x"20656d61",
00003361 => x"7420666f",
00003362 => x"63206568",
00003363 => x"7279706f",
00003364 => x"74686769",
00003365 => x"6c6f6820",
00003366 => x"20726564",
00003367 => x"20726f6e",
00003368 => x"20656874",
00003369 => x"656d616e",
00003370 => x"666f2073",
00003371 => x"73746920",
00003372 => x"6e6f6320",
00003373 => x"62697274",
00003374 => x"726f7475",
00003375 => x"616d2073",
00003376 => x"65622079",
00003377 => x"65737520",
00003378 => x"6f742064",
00003379 => x"2020200a",
00003380 => x"6f646e65",
00003381 => x"20657372",
00003382 => x"7020726f",
00003383 => x"6f6d6f72",
00003384 => x"70206574",
00003385 => x"75646f72",
00003386 => x"20737463",
00003387 => x"69726564",
00003388 => x"20646576",
00003389 => x"6d6f7266",
00003390 => x"69687420",
00003391 => x"6f732073",
00003392 => x"61777466",
00003393 => x"77206572",
00003394 => x"6f687469",
00003395 => x"73207475",
00003396 => x"69636570",
00003397 => x"20636966",
00003398 => x"6f697270",
00003399 => x"72772072",
00003400 => x"65747469",
00003401 => x"20200a6e",
00003402 => x"72657020",
00003403 => x"7373696d",
00003404 => x"2e6e6f69",
00003405 => x"48540a0a",
00003406 => x"53205349",
00003407 => x"5754464f",
00003408 => x"20455241",
00003409 => x"50205349",
00003410 => x"49564f52",
00003411 => x"20444544",
00003412 => x"54205942",
00003413 => x"43204548",
00003414 => x"5259504f",
00003415 => x"54484749",
00003416 => x"4c4f4820",
00003417 => x"53524544",
00003418 => x"444e4120",
00003419 => x"4e4f4320",
00003420 => x"42495254",
00003421 => x"524f5455",
00003422 => x"41222053",
00003423 => x"53492053",
00003424 => x"4e412022",
00003425 => x"4e412044",
00003426 => x"58452059",
00003427 => x"53455250",
00003428 => x"524f0a53",
00003429 => x"504d4920",
00003430 => x"4445494c",
00003431 => x"52415720",
00003432 => x"544e4152",
00003433 => x"2c534549",
00003434 => x"434e4920",
00003435 => x"4944554c",
00003436 => x"202c474e",
00003437 => x"20545542",
00003438 => x"20544f4e",
00003439 => x"494d494c",
00003440 => x"20444554",
00003441 => x"202c4f54",
00003442 => x"20454854",
00003443 => x"4c504d49",
00003444 => x"20444549",
00003445 => x"52524157",
00003446 => x"49544e41",
00003447 => x"4f205345",
00003448 => x"454d0a46",
00003449 => x"41484352",
00003450 => x"4241544e",
00003451 => x"54494c49",
00003452 => x"4e412059",
00003453 => x"49462044",
00003454 => x"53454e54",
00003455 => x"4f462053",
00003456 => x"20412052",
00003457 => x"54524150",
00003458 => x"4c554349",
00003459 => x"50205241",
00003460 => x"4f505255",
00003461 => x"41204553",
00003462 => x"44204552",
00003463 => x"4c435349",
00003464 => x"454d4941",
00003465 => x"49202e44",
00003466 => x"4f4e204e",
00003467 => x"45564520",
00003468 => x"5320544e",
00003469 => x"4c4c4148",
00003470 => x"45485420",
00003471 => x"504f430a",
00003472 => x"47495259",
00003473 => x"48205448",
00003474 => x"45444c4f",
00003475 => x"524f2052",
00003476 => x"4e4f4320",
00003477 => x"42495254",
00003478 => x"524f5455",
00003479 => x"45422053",
00003480 => x"41494c20",
00003481 => x"20454c42",
00003482 => x"20524f46",
00003483 => x"20594e41",
00003484 => x"45524944",
00003485 => x"202c5443",
00003486 => x"49444e49",
00003487 => x"54434552",
00003488 => x"4e49202c",
00003489 => x"45444943",
00003490 => x"4c41544e",
00003491 => x"5053202c",
00003492 => x"41494345",
00003493 => x"450a2c4c",
00003494 => x"504d4558",
00003495 => x"5952414c",
00003496 => x"524f202c",
00003497 => x"4e4f4320",
00003498 => x"55514553",
00003499 => x"49544e45",
00003500 => x"44204c41",
00003501 => x"47414d41",
00003502 => x"28205345",
00003503 => x"4c434e49",
00003504 => x"4e494455",
00003505 => x"42202c47",
00003506 => x"4e205455",
00003507 => x"4c20544f",
00003508 => x"54494d49",
00003509 => x"54204445",
00003510 => x"50202c4f",
00003511 => x"55434f52",
00003512 => x"454d4552",
00003513 => x"4f20544e",
00003514 => x"55532046",
00003515 => x"49545342",
00003516 => x"45545554",
00003517 => x"4f4f470a",
00003518 => x"4f205344",
00003519 => x"45532052",
00003520 => x"43495652",
00003521 => x"203b5345",
00003522 => x"53534f4c",
00003523 => x"20464f20",
00003524 => x"2c455355",
00003525 => x"54414420",
00003526 => x"4f202c41",
00003527 => x"52502052",
00003528 => x"5449464f",
00003529 => x"4f203b53",
00003530 => x"55422052",
00003531 => x"454e4953",
00003532 => x"49205353",
00003533 => x"5245544e",
00003534 => x"54505552",
00003535 => x"294e4f49",
00003536 => x"574f4820",
00003537 => x"52455645",
00003538 => x"55414320",
00003539 => x"0a444553",
00003540 => x"20444e41",
00003541 => x"41204e4f",
00003542 => x"5420594e",
00003543 => x"524f4548",
00003544 => x"464f2059",
00003545 => x"41494c20",
00003546 => x"494c4942",
00003547 => x"202c5954",
00003548 => x"54454857",
00003549 => x"20524548",
00003550 => x"43204e49",
00003551 => x"52544e4f",
00003552 => x"2c544341",
00003553 => x"52545320",
00003554 => x"20544349",
00003555 => x"4241494c",
00003556 => x"54494c49",
00003557 => x"4f202c59",
00003558 => x"4f542052",
00003559 => x"28205452",
00003560 => x"4c434e49",
00003561 => x"4e494455",
00003562 => x"454e0a47",
00003563 => x"47494c47",
00003564 => x"45434e45",
00003565 => x"20524f20",
00003566 => x"4548544f",
00003567 => x"53495752",
00003568 => x"41202945",
00003569 => x"49534952",
00003570 => x"4920474e",
00003571 => x"4e41204e",
00003572 => x"41572059",
00003573 => x"554f2059",
00003574 => x"464f2054",
00003575 => x"45485420",
00003576 => x"45535520",
00003577 => x"20464f20",
00003578 => x"53494854",
00003579 => x"464f5320",
00003580 => x"52415754",
00003581 => x"45202c45",
00003582 => x"204e4556",
00003583 => x"41204649",
00003584 => x"53495644",
00003585 => x"4f0a4445",
00003586 => x"48542046",
00003587 => x"4f502045",
00003588 => x"42495353",
00003589 => x"54494c49",
00003590 => x"464f2059",
00003591 => x"43555320",
00003592 => x"41442048",
00003593 => x"4547414d",
00003594 => x"540a0a2e",
00003595 => x"4e206568",
00003596 => x"56524f45",
00003597 => x"50203233",
00003598 => x"65636f72",
00003599 => x"726f7373",
00003600 => x"68202d20",
00003601 => x"73707474",
00003602 => x"672f2f3a",
00003603 => x"75687469",
00003604 => x"6f632e62",
00003605 => x"74732f6d",
00003606 => x"746c6f6e",
00003607 => x"2f676e69",
00003608 => x"726f656e",
00003609 => x"20323376",
00003610 => x"20296328",
00003611 => x"70657453",
00003612 => x"206e6168",
00003613 => x"746c6f4e",
00003614 => x"0a676e69",
00003615 => x"00000a0a",
00003616 => x"33323130",
00003617 => x"37363534",
00003618 => x"42413938",
00003619 => x"46454443",
00003620 => x"00001e38",
00003621 => x"00001d14",
00003622 => x"00001d14",
00003623 => x"00001d14",
00003624 => x"00001d14",
00003625 => x"00001d14",
00003626 => x"00001df4",
00003627 => x"00001d14",
00003628 => x"00001d14",
00003629 => x"00001d14",
00003630 => x"00001d14",
00003631 => x"00001d14",
00003632 => x"00001d14",
00003633 => x"00001d14",
00003634 => x"00001d14",
00003635 => x"00001d14",
00003636 => x"00001dc8",
00003637 => x"00001d14",
00003638 => x"00001d94",
00003639 => x"00001d14",
00003640 => x"00001d14",
00003641 => x"00001d44",
00003642 => x"33323130",
00003643 => x"37363534",
00003644 => x"00003938",
00003645 => x"33323130",
00003646 => x"37363534",
00003647 => x"62613938",
00003648 => x"66656463",
00003649 => x"00000000",
00003650 => x"00006073",
00003651 => x"00008067",
00003652 => x"3407d073",
00003653 => x"00008067",
00003654 => x"00000001",
00003655 => x"00008067",
others => x"00000000"
);
 
/neorv32_bootloader_image.vhd
6,7 → 6,7
 
package neorv32_bootloader_image is
 
type bootloader_init_image_t is array (0 to 1022) of std_ulogic_vector(31 downto 0);
type bootloader_init_image_t is array (0 to 1018) of std_ulogic_vector(31 downto 0);
constant bootloader_init_image : bootloader_init_image_t := (
00000000 => x"00000093",
00000001 => x"00000113",
44,7 → 44,7
00000033 => x"00158593",
00000034 => x"ff5ff06f",
00000035 => x"00001597",
00000036 => x"f6c58593",
00000036 => x"f5c58593",
00000037 => x"80010617",
00000038 => x"f6c60613",
00000039 => x"80010697",
94,942 → 94,938
00000083 => x"01712623",
00000084 => x"01812423",
00000085 => x"9ff78793",
00000086 => x"00000713",
00000087 => x"00000693",
00000088 => x"00000613",
00000089 => x"00000593",
00000090 => x"00200513",
00000091 => x"0087f463",
00000092 => x"00400513",
00000093 => x"3b5000ef",
00000094 => x"00005537",
00000095 => x"00000613",
00000096 => x"00000593",
00000097 => x"b0050513",
00000098 => x"291000ef",
00000099 => x"249000ef",
00000100 => x"00245793",
00000101 => x"00a78533",
00000102 => x"00f537b3",
00000103 => x"00b785b3",
00000104 => x"261000ef",
00000105 => x"ffff07b7",
00000106 => x"49478793",
00000107 => x"30579073",
00000108 => x"08000793",
00000109 => x"30479073",
00000110 => x"30046073",
00000111 => x"00100513",
00000112 => x"429000ef",
00000113 => x"ffff1537",
00000114 => x"800007b7",
00000115 => x"f1450513",
00000116 => x"0007a023",
00000117 => x"2fd000ef",
00000118 => x"159000ef",
00000119 => x"ffff1537",
00000120 => x"f4c50513",
00000121 => x"2ed000ef",
00000122 => x"fe002503",
00000123 => x"238000ef",
00000124 => x"ffff1537",
00000125 => x"f5450513",
00000126 => x"2d9000ef",
00000127 => x"fe402503",
00000128 => x"224000ef",
00000129 => x"ffff1537",
00000130 => x"f6050513",
00000131 => x"2c5000ef",
00000132 => x"30102573",
00000133 => x"210000ef",
00000134 => x"ffff1537",
00000135 => x"f6850513",
00000136 => x"2b1000ef",
00000137 => x"fe802503",
00000138 => x"ffff14b7",
00000139 => x"00341413",
00000140 => x"1f4000ef",
00000141 => x"ffff1537",
00000142 => x"f7050513",
00000143 => x"295000ef",
00000144 => x"ff802503",
00000145 => x"1e0000ef",
00000146 => x"f7848513",
00000147 => x"285000ef",
00000148 => x"ff002503",
00000149 => x"1d0000ef",
00000150 => x"ffff1537",
00000151 => x"f8450513",
00000152 => x"271000ef",
00000153 => x"ffc02503",
00000154 => x"1bc000ef",
00000155 => x"f7848513",
00000156 => x"261000ef",
00000157 => x"ff402503",
00000158 => x"1ac000ef",
00000159 => x"ffff1537",
00000160 => x"f8c50513",
00000161 => x"24d000ef",
00000162 => x"14d000ef",
00000163 => x"00a404b3",
00000164 => x"0084b433",
00000165 => x"00b40433",
00000166 => x"fa402783",
00000167 => x"0207d263",
00000168 => x"ffff1537",
00000169 => x"fb450513",
00000170 => x"229000ef",
00000171 => x"219000ef",
00000172 => x"02300793",
00000173 => x"02f51263",
00000174 => x"00000513",
00000175 => x"0180006f",
00000176 => x"115000ef",
00000177 => x"fc85eae3",
00000178 => x"00b41463",
00000179 => x"fc9566e3",
00000180 => x"00100513",
00000181 => x"5b4000ef",
00000182 => x"0b4000ef",
00000183 => x"ffff1937",
00000184 => x"ffff19b7",
00000185 => x"02300a13",
00000186 => x"07200a93",
00000187 => x"06800b13",
00000188 => x"07500b93",
00000189 => x"ffff14b7",
00000190 => x"ffff1c37",
00000191 => x"fc090513",
00000192 => x"1d1000ef",
00000193 => x"1b1000ef",
00000194 => x"00050413",
00000195 => x"199000ef",
00000196 => x"ecc98513",
00000197 => x"1bd000ef",
00000198 => x"fb4400e3",
00000199 => x"01541863",
00000200 => x"ffff02b7",
00000201 => x"00028067",
00000202 => x"fd5ff06f",
00000203 => x"01641663",
00000204 => x"05c000ef",
00000205 => x"fc9ff06f",
00000206 => x"00000513",
00000207 => x"03740063",
00000208 => x"07300793",
00000209 => x"00f41663",
00000210 => x"66c000ef",
00000211 => x"fb1ff06f",
00000212 => x"06c00793",
00000213 => x"00f41863",
00000214 => x"00100513",
00000215 => x"3f0000ef",
00000216 => x"f9dff06f",
00000217 => x"06500793",
00000218 => x"00f41663",
00000219 => x"02c000ef",
00000220 => x"f8dff06f",
00000221 => x"03f00793",
00000222 => x"fc8c0513",
00000223 => x"00f40463",
00000224 => x"fdc48513",
00000225 => x"14d000ef",
00000226 => x"f75ff06f",
00000227 => x"ffff1537",
00000228 => x"df050513",
00000229 => x"13d0006f",
00000230 => x"800007b7",
00000231 => x"0007a783",
00000232 => x"00079863",
00000233 => x"ffff1537",
00000234 => x"e5450513",
00000235 => x"1250006f",
00000236 => x"ff010113",
00000237 => x"00112623",
00000238 => x"30047073",
00000239 => x"ffff1537",
00000240 => x"e7050513",
00000241 => x"10d000ef",
00000242 => x"fa002783",
00000243 => x"fe07cee3",
00000244 => x"b0001073",
00000245 => x"b8001073",
00000246 => x"b0201073",
00000247 => x"b8201073",
00000248 => x"ff002783",
00000249 => x"00078067",
00000250 => x"0000006f",
00000251 => x"ff010113",
00000252 => x"00812423",
00000253 => x"00050413",
00000254 => x"ffff1537",
00000255 => x"e8050513",
00000256 => x"00112623",
00000257 => x"0cd000ef",
00000258 => x"03040513",
00000259 => x"0ff57513",
00000260 => x"095000ef",
00000261 => x"30047073",
00000262 => x"00100513",
00000263 => x"1cd000ef",
00000264 => x"0000006f",
00000265 => x"fe010113",
00000266 => x"01212823",
00000267 => x"00050913",
00000268 => x"ffff1537",
00000269 => x"00912a23",
00000270 => x"e9850513",
00000271 => x"ffff14b7",
00000272 => x"00812c23",
00000273 => x"01312623",
00000274 => x"00112e23",
00000275 => x"01c00413",
00000276 => x"081000ef",
00000277 => x"fe848493",
00000278 => x"ffc00993",
00000279 => x"008957b3",
00000280 => x"00f7f793",
00000281 => x"00f487b3",
00000282 => x"0007c503",
00000283 => x"ffc40413",
00000284 => x"035000ef",
00000285 => x"ff3414e3",
00000286 => x"01c12083",
00000287 => x"01812403",
00000288 => x"01412483",
00000289 => x"01012903",
00000290 => x"00c12983",
00000291 => x"02010113",
00000292 => x"00008067",
00000293 => x"fb010113",
00000294 => x"04112623",
00000295 => x"04512423",
00000296 => x"04612223",
00000297 => x"04712023",
00000298 => x"02812e23",
00000299 => x"02a12c23",
00000300 => x"02b12a23",
00000301 => x"02c12823",
00000302 => x"02d12623",
00000303 => x"02e12423",
00000304 => x"02f12223",
00000305 => x"03012023",
00000306 => x"01112e23",
00000307 => x"01c12c23",
00000308 => x"01d12a23",
00000309 => x"01e12823",
00000310 => x"01f12623",
00000311 => x"34202473",
00000312 => x"800007b7",
00000313 => x"00778793",
00000314 => x"06f41a63",
00000315 => x"00000513",
00000316 => x"0dd000ef",
00000317 => x"6e0000ef",
00000318 => x"fe002783",
00000319 => x"0027d793",
00000320 => x"00a78533",
00000321 => x"00f537b3",
00000322 => x"00b785b3",
00000323 => x"6f4000ef",
00000324 => x"03c12403",
00000325 => x"04c12083",
00000326 => x"04812283",
00000327 => x"04412303",
00000328 => x"04012383",
00000329 => x"03812503",
00000330 => x"03412583",
00000331 => x"03012603",
00000332 => x"02c12683",
00000333 => x"02812703",
00000334 => x"02412783",
00000335 => x"02012803",
00000336 => x"01c12883",
00000337 => x"01812e03",
00000338 => x"01412e83",
00000339 => x"01012f03",
00000340 => x"00c12f83",
00000341 => x"05010113",
00000342 => x"30200073",
00000343 => x"00700793",
00000344 => x"00100513",
00000345 => x"02f40863",
00000346 => x"ffff1537",
00000347 => x"e8c50513",
00000348 => x"760000ef",
00000349 => x"00040513",
00000350 => x"eadff0ef",
00000351 => x"ffff1537",
00000352 => x"e9450513",
00000353 => x"74c000ef",
00000354 => x"34102573",
00000355 => x"e99ff0ef",
00000356 => x"00500513",
00000357 => x"e59ff0ef",
00000358 => x"ff010113",
00000359 => x"00000513",
00000360 => x"00112623",
00000361 => x"00812423",
00000362 => x"7cc000ef",
00000363 => x"00500513",
00000364 => x"009000ef",
00000365 => x"00000513",
00000366 => x"001000ef",
00000367 => x"00050413",
00000368 => x"00000513",
00000369 => x"7d0000ef",
00000370 => x"00c12083",
00000371 => x"0ff47513",
00000372 => x"00812403",
00000373 => x"01010113",
00000374 => x"00008067",
00000375 => x"ff010113",
00000376 => x"00000513",
00000377 => x"00112623",
00000378 => x"00812423",
00000379 => x"788000ef",
00000380 => x"09e00513",
00000381 => x"7c4000ef",
00000382 => x"00000513",
00000383 => x"7bc000ef",
00000384 => x"00050413",
00000385 => x"00000513",
00000386 => x"78c000ef",
00000387 => x"00c12083",
00000388 => x"0ff47513",
00000389 => x"00812403",
00000390 => x"01010113",
00000391 => x"00008067",
00000392 => x"ff010113",
00000393 => x"00000513",
00000394 => x"00112623",
00000395 => x"748000ef",
00000396 => x"00600513",
00000397 => x"784000ef",
00000398 => x"00c12083",
00000399 => x"00000513",
00000400 => x"01010113",
00000401 => x"7500006f",
00000402 => x"ff010113",
00000403 => x"00812423",
00000404 => x"00050413",
00000405 => x"01055513",
00000406 => x"0ff57513",
00000407 => x"00112623",
00000408 => x"758000ef",
00000409 => x"00845513",
00000410 => x"0ff57513",
00000411 => x"74c000ef",
00000412 => x"0ff47513",
00000413 => x"00812403",
00000414 => x"00c12083",
00000415 => x"01010113",
00000416 => x"7380006f",
00000417 => x"ff010113",
00000418 => x"00812423",
00000419 => x"00050413",
00000420 => x"00000513",
00000421 => x"00112623",
00000422 => x"6dc000ef",
00000423 => x"00300513",
00000424 => x"718000ef",
00000425 => x"00040513",
00000426 => x"fa1ff0ef",
00000427 => x"00000513",
00000428 => x"708000ef",
00000429 => x"00050413",
00000430 => x"00000513",
00000431 => x"6d8000ef",
00000432 => x"00c12083",
00000433 => x"0ff47513",
00000434 => x"00812403",
00000435 => x"01010113",
00000436 => x"00008067",
00000437 => x"fd010113",
00000438 => x"02812423",
00000439 => x"02912223",
00000440 => x"03212023",
00000441 => x"01312e23",
00000442 => x"01412c23",
00000443 => x"02112623",
00000444 => x"00050913",
00000445 => x"00058993",
00000446 => x"00c10493",
00000447 => x"00000413",
00000448 => x"00400a13",
00000449 => x"02091e63",
00000450 => x"5ac000ef",
00000451 => x"00a481a3",
00000452 => x"00140413",
00000453 => x"fff48493",
00000454 => x"ff4416e3",
00000455 => x"02c12083",
00000456 => x"02812403",
00000457 => x"00c12503",
00000458 => x"02412483",
00000459 => x"02012903",
00000460 => x"01c12983",
00000461 => x"01812a03",
00000462 => x"03010113",
00000463 => x"00008067",
00000464 => x"00898533",
00000465 => x"f41ff0ef",
00000466 => x"fc5ff06f",
00000467 => x"fe802783",
00000468 => x"fd010113",
00000469 => x"02812423",
00000470 => x"02112623",
00000471 => x"02912223",
00000472 => x"03212023",
00000473 => x"01312e23",
00000474 => x"01412c23",
00000475 => x"01512a23",
00000476 => x"01612823",
00000477 => x"01712623",
00000478 => x"0087f793",
00000479 => x"00050413",
00000480 => x"00078a63",
00000481 => x"fe802783",
00000482 => x"00400513",
00000483 => x"0047f793",
00000484 => x"04079663",
00000485 => x"02041863",
00000486 => x"ffff1537",
00000487 => x"e9c50513",
00000488 => x"530000ef",
00000489 => x"008005b7",
00000490 => x"00040513",
00000491 => x"f29ff0ef",
00000492 => x"4788d7b7",
00000493 => x"afe78793",
00000494 => x"02f50463",
00000495 => x"00000513",
00000496 => x"01c0006f",
00000497 => x"ffff1537",
00000498 => x"ebc50513",
00000499 => x"504000ef",
00000500 => x"e0dff0ef",
00000501 => x"fc0518e3",
00000502 => x"00300513",
00000503 => x"c11ff0ef",
00000504 => x"008009b7",
00000505 => x"00498593",
00000506 => x"00040513",
00000507 => x"ee9ff0ef",
00000508 => x"00050a13",
00000509 => x"00898593",
00000510 => x"00040513",
00000511 => x"ed9ff0ef",
00000512 => x"ff002b83",
00000513 => x"00050a93",
00000514 => x"ffca7b13",
00000515 => x"00000913",
00000516 => x"00000493",
00000517 => x"00c98993",
00000518 => x"013905b3",
00000519 => x"052b1863",
00000520 => x"015484b3",
00000521 => x"00200513",
00000522 => x"fa049ae3",
00000523 => x"ffff1537",
00000524 => x"ec850513",
00000525 => x"49c000ef",
00000526 => x"02c12083",
00000527 => x"02812403",
00000528 => x"800007b7",
00000529 => x"0147a023",
00000530 => x"02412483",
00000531 => x"02012903",
00000532 => x"01c12983",
00000533 => x"01812a03",
00000534 => x"01412a83",
00000535 => x"01012b03",
00000536 => x"00c12b83",
00000537 => x"03010113",
00000538 => x"00008067",
00000539 => x"00040513",
00000540 => x"e65ff0ef",
00000541 => x"012b87b3",
00000542 => x"00a484b3",
00000543 => x"00a7a023",
00000544 => x"00490913",
00000545 => x"f95ff06f",
00000546 => x"ff010113",
00000547 => x"00112623",
00000548 => x"ebdff0ef",
00000549 => x"ffff1537",
00000550 => x"ecc50513",
00000551 => x"434000ef",
00000552 => x"af9ff0ef",
00000553 => x"0000006f",
00000554 => x"ff010113",
00000555 => x"00112623",
00000556 => x"00812423",
00000557 => x"00912223",
00000558 => x"00058413",
00000559 => x"00050493",
00000560 => x"d61ff0ef",
00000561 => x"00000513",
00000562 => x"4ac000ef",
00000563 => x"00200513",
00000564 => x"4e8000ef",
00000565 => x"00048513",
00000566 => x"d71ff0ef",
00000567 => x"00040513",
00000568 => x"4d8000ef",
00000569 => x"00000513",
00000570 => x"4ac000ef",
00000571 => x"cadff0ef",
00000572 => x"00157513",
00000573 => x"fe051ce3",
00000574 => x"00c12083",
00000575 => x"00812403",
00000576 => x"00412483",
00000577 => x"01010113",
00000578 => x"00008067",
00000579 => x"fe010113",
00000580 => x"00812c23",
00000581 => x"00912a23",
00000582 => x"01212823",
00000583 => x"00112e23",
00000584 => x"00b12623",
00000585 => x"00300413",
00000586 => x"00350493",
00000587 => x"fff00913",
00000588 => x"00c10793",
00000589 => x"008787b3",
00000590 => x"0007c583",
00000591 => x"40848533",
00000592 => x"fff40413",
00000593 => x"f65ff0ef",
00000594 => x"ff2414e3",
00000595 => x"01c12083",
00000596 => x"01812403",
00000597 => x"01412483",
00000598 => x"01012903",
00000599 => x"02010113",
00000600 => x"00008067",
00000601 => x"ff010113",
00000602 => x"00112623",
00000603 => x"00812423",
00000604 => x"00050413",
00000605 => x"cadff0ef",
00000606 => x"00000513",
00000607 => x"3f8000ef",
00000608 => x"0d800513",
00000609 => x"434000ef",
00000610 => x"00040513",
00000611 => x"cbdff0ef",
00000612 => x"00000513",
00000613 => x"400000ef",
00000614 => x"c01ff0ef",
00000615 => x"00157513",
00000616 => x"fe051ce3",
00000617 => x"00c12083",
00000618 => x"00812403",
00000619 => x"01010113",
00000620 => x"00008067",
00000621 => x"fe010113",
00000622 => x"800007b7",
00000623 => x"00812c23",
00000624 => x"0007a403",
00000625 => x"00112e23",
00000626 => x"00912a23",
00000627 => x"01212823",
00000628 => x"01312623",
00000629 => x"01412423",
00000630 => x"01512223",
00000631 => x"02041863",
00000632 => x"ffff1537",
00000633 => x"e5450513",
00000634 => x"01812403",
00000635 => x"01c12083",
00000636 => x"01412483",
00000637 => x"01012903",
00000638 => x"00c12983",
00000639 => x"00812a03",
00000640 => x"00412a83",
00000641 => x"02010113",
00000642 => x"2c80006f",
00000643 => x"ffff1537",
00000644 => x"ed050513",
00000645 => x"2bc000ef",
00000646 => x"00040513",
00000647 => x"a09ff0ef",
00000648 => x"ffff1537",
00000649 => x"edc50513",
00000650 => x"2a8000ef",
00000651 => x"00800537",
00000652 => x"9f5ff0ef",
00000653 => x"ffff1537",
00000654 => x"ef850513",
00000655 => x"294000ef",
00000656 => x"274000ef",
00000657 => x"00050493",
00000658 => x"25c000ef",
00000659 => x"07900793",
00000660 => x"0af49e63",
00000661 => x"b89ff0ef",
00000662 => x"00051663",
00000663 => x"00300513",
00000664 => x"98dff0ef",
00000665 => x"ffff1537",
00000666 => x"f0450513",
00000667 => x"01045493",
00000668 => x"260000ef",
00000669 => x"00148493",
00000670 => x"00800937",
00000671 => x"fff00993",
00000672 => x"00010a37",
00000673 => x"fff48493",
00000674 => x"07349063",
00000675 => x"4788d5b7",
00000676 => x"afe58593",
00000677 => x"00800537",
00000678 => x"e75ff0ef",
00000679 => x"00800537",
00000680 => x"00040593",
00000681 => x"00450513",
00000682 => x"e65ff0ef",
00000683 => x"ff002a03",
00000684 => x"008009b7",
00000685 => x"ffc47413",
00000686 => x"00000493",
00000687 => x"00000913",
00000688 => x"00c98a93",
00000689 => x"01548533",
00000690 => x"009a07b3",
00000691 => x"02849663",
00000692 => x"00898513",
00000693 => x"412005b3",
00000694 => x"e35ff0ef",
00000695 => x"ffff1537",
00000696 => x"ec850513",
00000697 => x"f05ff06f",
00000698 => x"00090513",
00000699 => x"e79ff0ef",
00000700 => x"01490933",
00000701 => x"f91ff06f",
00000702 => x"0007a583",
00000703 => x"00448493",
00000704 => x"00b90933",
00000705 => x"e09ff0ef",
00000706 => x"fbdff06f",
00000707 => x"01c12083",
00000708 => x"01812403",
00000709 => x"01412483",
00000710 => x"01012903",
00000711 => x"00c12983",
00000712 => x"00812a03",
00000713 => x"00412a83",
00000714 => x"02010113",
00000715 => x"00008067",
00000716 => x"fe010113",
00000717 => x"00912a23",
00000718 => x"01312623",
00000719 => x"01412423",
00000720 => x"00112e23",
00000721 => x"00812c23",
00000722 => x"01212823",
00000723 => x"00000493",
00000724 => x"00300a13",
00000725 => x"00400993",
00000726 => x"f13027f3",
00000727 => x"40900733",
00000728 => x"00371713",
00000729 => x"01870713",
00000730 => x"00e7d7b3",
00000731 => x"0ff7f793",
00000732 => x"0047d513",
00000733 => x"40a00933",
00000734 => x"00491913",
00000735 => x"03078793",
00000736 => x"0ff97913",
00000737 => x"0ff7f413",
00000738 => x"00050663",
00000739 => x"03050513",
00000740 => x"114000ef",
00000741 => x"01240533",
00000742 => x"0ff57513",
00000743 => x"108000ef",
00000744 => x"01448663",
00000745 => x"02e00513",
00000746 => x"0fc000ef",
00000747 => x"00148493",
00000748 => x"fb3494e3",
00000749 => x"01c12083",
00000750 => x"01812403",
00000751 => x"01412483",
00000752 => x"01012903",
00000753 => x"00c12983",
00000754 => x"00812a03",
00000755 => x"02010113",
00000756 => x"00008067",
00000757 => x"ff010113",
00000758 => x"f9402783",
00000759 => x"f9002703",
00000760 => x"f9402683",
00000761 => x"fed79ae3",
00000762 => x"00e12023",
00000763 => x"00f12223",
00000764 => x"00012503",
00000765 => x"00412583",
00000766 => x"01010113",
00000767 => x"00008067",
00000768 => x"f9800693",
00000769 => x"fff00613",
00000770 => x"00c6a023",
00000771 => x"00a6a023",
00000772 => x"00b6a223",
00000773 => x"00008067",
00000774 => x"fa002023",
00000775 => x"fe002683",
00000776 => x"00151513",
00000777 => x"00000713",
00000778 => x"04a6f263",
00000779 => x"000016b7",
00000780 => x"00000793",
00000781 => x"ffe68693",
00000782 => x"04e6e463",
00000783 => x"00167613",
00000784 => x"0015f593",
00000785 => x"01879793",
00000786 => x"01e61613",
00000787 => x"00c7e7b3",
00000788 => x"01d59593",
00000789 => x"00b7e7b3",
00000790 => x"00e7e7b3",
00000791 => x"10000737",
00000792 => x"00e7e7b3",
00000793 => x"faf02023",
00000794 => x"00008067",
00000795 => x"00170793",
00000796 => x"01079713",
00000797 => x"40a686b3",
00000798 => x"01075713",
00000799 => x"fadff06f",
00000800 => x"ffe78513",
00000801 => x"0fd57513",
00000802 => x"00051a63",
00000803 => x"00375713",
00000804 => x"00178793",
00000805 => x"0ff7f793",
00000806 => x"fa1ff06f",
00000807 => x"00175713",
00000808 => x"ff1ff06f",
00000809 => x"fa002783",
00000810 => x"fe07cee3",
00000811 => x"faa02223",
00000812 => x"00008067",
00000813 => x"fa402503",
00000814 => x"fe055ee3",
00000815 => x"0ff57513",
00000816 => x"00008067",
00000817 => x"fa402503",
00000818 => x"0ff57513",
00000819 => x"00008067",
00000820 => x"ff010113",
00000821 => x"00812423",
00000822 => x"01212023",
00000823 => x"00112623",
00000824 => x"00912223",
00000825 => x"00050413",
00000826 => x"00a00913",
00000827 => x"00044483",
00000828 => x"00140413",
00000829 => x"00049e63",
00000830 => x"00c12083",
00000831 => x"00812403",
00000832 => x"00412483",
00000833 => x"00012903",
00000834 => x"01010113",
00000835 => x"00008067",
00000836 => x"01249663",
00000837 => x"00d00513",
00000838 => x"f8dff0ef",
00000839 => x"00048513",
00000840 => x"f85ff0ef",
00000841 => x"fc9ff06f",
00000842 => x"00757513",
00000843 => x"00177793",
00000844 => x"01079793",
00000845 => x"0036f693",
00000846 => x"00a51513",
00000847 => x"00f56533",
00000848 => x"00167613",
00000849 => x"00e69793",
00000850 => x"0015f593",
00000851 => x"00f567b3",
00000852 => x"00d61613",
00000853 => x"00c7e7b3",
00000854 => x"00959593",
00000855 => x"fa800813",
00000856 => x"00b7e7b3",
00000857 => x"00082023",
00000858 => x"1007e793",
00000859 => x"00f82023",
00000860 => x"00008067",
00000861 => x"fa800713",
00000862 => x"00072683",
00000863 => x"00757793",
00000864 => x"00100513",
00000865 => x"00f51533",
00000866 => x"00d56533",
00000867 => x"00a72023",
00000868 => x"00008067",
00000869 => x"fa800713",
00000870 => x"00072683",
00000871 => x"00757513",
00000872 => x"00100793",
00000873 => x"00a797b3",
00000874 => x"fff7c793",
00000875 => x"00d7f7b3",
00000876 => x"00f72023",
00000877 => x"00008067",
00000878 => x"faa02623",
00000879 => x"fa802783",
00000880 => x"fe07cee3",
00000881 => x"fac02503",
00000882 => x"00008067",
00000883 => x"f8400713",
00000884 => x"00072683",
00000885 => x"00100793",
00000886 => x"00a797b3",
00000887 => x"00d7c7b3",
00000888 => x"00f72023",
00000889 => x"00008067",
00000890 => x"f8a02223",
00000891 => x"00008067",
00000892 => x"69617641",
00000893 => x"6c62616c",
00000894 => x"4d432065",
00000895 => x"0a3a7344",
00000896 => x"203a6820",
00000897 => x"706c6548",
00000898 => x"3a72200a",
00000899 => x"73655220",
00000900 => x"74726174",
00000901 => x"3a75200a",
00000902 => x"6c705520",
00000903 => x"0a64616f",
00000904 => x"203a7320",
00000905 => x"726f7453",
00000906 => x"6f742065",
00000907 => x"616c6620",
00000908 => x"200a6873",
00000909 => x"4c203a6c",
00000910 => x"2064616f",
00000911 => x"6d6f7266",
00000912 => x"616c6620",
00000913 => x"200a6873",
00000914 => x"45203a65",
00000915 => x"75636578",
00000916 => x"00006574",
00000917 => x"65206f4e",
00000918 => x"75636578",
00000919 => x"6c626174",
00000920 => x"76612065",
00000921 => x"616c6961",
00000922 => x"2e656c62",
00000086 => x"00000693",
00000087 => x"00000613",
00000088 => x"00000593",
00000089 => x"00200513",
00000090 => x"0087f463",
00000091 => x"00400513",
00000092 => x"3b5000ef",
00000093 => x"00005537",
00000094 => x"00000613",
00000095 => x"00000593",
00000096 => x"b0050513",
00000097 => x"291000ef",
00000098 => x"249000ef",
00000099 => x"00245793",
00000100 => x"00a78533",
00000101 => x"00f537b3",
00000102 => x"00b785b3",
00000103 => x"261000ef",
00000104 => x"ffff07b7",
00000105 => x"49078793",
00000106 => x"30579073",
00000107 => x"08000793",
00000108 => x"30479073",
00000109 => x"30046073",
00000110 => x"00100513",
00000111 => x"41d000ef",
00000112 => x"ffff1537",
00000113 => x"800007b7",
00000114 => x"f0450513",
00000115 => x"0007a023",
00000116 => x"2fd000ef",
00000117 => x"159000ef",
00000118 => x"ffff1537",
00000119 => x"f3c50513",
00000120 => x"2ed000ef",
00000121 => x"fe002503",
00000122 => x"238000ef",
00000123 => x"ffff1537",
00000124 => x"f4450513",
00000125 => x"2d9000ef",
00000126 => x"fe402503",
00000127 => x"224000ef",
00000128 => x"ffff1537",
00000129 => x"f5050513",
00000130 => x"2c5000ef",
00000131 => x"30102573",
00000132 => x"210000ef",
00000133 => x"ffff1537",
00000134 => x"f5850513",
00000135 => x"2b1000ef",
00000136 => x"fe802503",
00000137 => x"ffff14b7",
00000138 => x"00341413",
00000139 => x"1f4000ef",
00000140 => x"ffff1537",
00000141 => x"f6050513",
00000142 => x"295000ef",
00000143 => x"ff802503",
00000144 => x"1e0000ef",
00000145 => x"f6848513",
00000146 => x"285000ef",
00000147 => x"ff002503",
00000148 => x"1d0000ef",
00000149 => x"ffff1537",
00000150 => x"f7450513",
00000151 => x"271000ef",
00000152 => x"ffc02503",
00000153 => x"1bc000ef",
00000154 => x"f6848513",
00000155 => x"261000ef",
00000156 => x"ff402503",
00000157 => x"1ac000ef",
00000158 => x"ffff1537",
00000159 => x"f7c50513",
00000160 => x"24d000ef",
00000161 => x"14d000ef",
00000162 => x"00a404b3",
00000163 => x"0084b433",
00000164 => x"00b40433",
00000165 => x"fa402783",
00000166 => x"0207d263",
00000167 => x"ffff1537",
00000168 => x"fa450513",
00000169 => x"229000ef",
00000170 => x"219000ef",
00000171 => x"02300793",
00000172 => x"02f51263",
00000173 => x"00000513",
00000174 => x"0180006f",
00000175 => x"115000ef",
00000176 => x"fc85eae3",
00000177 => x"00b41463",
00000178 => x"fc9566e3",
00000179 => x"00100513",
00000180 => x"5b4000ef",
00000181 => x"0b4000ef",
00000182 => x"ffff1937",
00000183 => x"ffff19b7",
00000184 => x"02300a13",
00000185 => x"07200a93",
00000186 => x"06800b13",
00000187 => x"07500b93",
00000188 => x"ffff14b7",
00000189 => x"ffff1c37",
00000190 => x"fb090513",
00000191 => x"1d1000ef",
00000192 => x"1b1000ef",
00000193 => x"00050413",
00000194 => x"199000ef",
00000195 => x"ebc98513",
00000196 => x"1bd000ef",
00000197 => x"fb4400e3",
00000198 => x"01541863",
00000199 => x"ffff02b7",
00000200 => x"00028067",
00000201 => x"fd5ff06f",
00000202 => x"01641663",
00000203 => x"05c000ef",
00000204 => x"fc9ff06f",
00000205 => x"00000513",
00000206 => x"03740063",
00000207 => x"07300793",
00000208 => x"00f41663",
00000209 => x"66c000ef",
00000210 => x"fb1ff06f",
00000211 => x"06c00793",
00000212 => x"00f41863",
00000213 => x"00100513",
00000214 => x"3f0000ef",
00000215 => x"f9dff06f",
00000216 => x"06500793",
00000217 => x"00f41663",
00000218 => x"02c000ef",
00000219 => x"f8dff06f",
00000220 => x"03f00793",
00000221 => x"fb8c0513",
00000222 => x"00f40463",
00000223 => x"fcc48513",
00000224 => x"14d000ef",
00000225 => x"f75ff06f",
00000226 => x"ffff1537",
00000227 => x"de050513",
00000228 => x"13d0006f",
00000229 => x"800007b7",
00000230 => x"0007a783",
00000231 => x"00079863",
00000232 => x"ffff1537",
00000233 => x"e4450513",
00000234 => x"1250006f",
00000235 => x"ff010113",
00000236 => x"00112623",
00000237 => x"30047073",
00000238 => x"ffff1537",
00000239 => x"e6050513",
00000240 => x"10d000ef",
00000241 => x"fa002783",
00000242 => x"fe07cee3",
00000243 => x"b0001073",
00000244 => x"b8001073",
00000245 => x"b0201073",
00000246 => x"b8201073",
00000247 => x"ff002783",
00000248 => x"00078067",
00000249 => x"0000006f",
00000250 => x"ff010113",
00000251 => x"00812423",
00000252 => x"00050413",
00000253 => x"ffff1537",
00000254 => x"e7050513",
00000255 => x"00112623",
00000256 => x"0cd000ef",
00000257 => x"03040513",
00000258 => x"0ff57513",
00000259 => x"095000ef",
00000260 => x"30047073",
00000261 => x"00100513",
00000262 => x"1c1000ef",
00000263 => x"0000006f",
00000264 => x"fe010113",
00000265 => x"01212823",
00000266 => x"00050913",
00000267 => x"ffff1537",
00000268 => x"00912a23",
00000269 => x"e8850513",
00000270 => x"ffff14b7",
00000271 => x"00812c23",
00000272 => x"01312623",
00000273 => x"00112e23",
00000274 => x"01c00413",
00000275 => x"081000ef",
00000276 => x"fd848493",
00000277 => x"ffc00993",
00000278 => x"008957b3",
00000279 => x"00f7f793",
00000280 => x"00f487b3",
00000281 => x"0007c503",
00000282 => x"ffc40413",
00000283 => x"035000ef",
00000284 => x"ff3414e3",
00000285 => x"01c12083",
00000286 => x"01812403",
00000287 => x"01412483",
00000288 => x"01012903",
00000289 => x"00c12983",
00000290 => x"02010113",
00000291 => x"00008067",
00000292 => x"fb010113",
00000293 => x"04112623",
00000294 => x"04512423",
00000295 => x"04612223",
00000296 => x"04712023",
00000297 => x"02812e23",
00000298 => x"02a12c23",
00000299 => x"02b12a23",
00000300 => x"02c12823",
00000301 => x"02d12623",
00000302 => x"02e12423",
00000303 => x"02f12223",
00000304 => x"03012023",
00000305 => x"01112e23",
00000306 => x"01c12c23",
00000307 => x"01d12a23",
00000308 => x"01e12823",
00000309 => x"01f12623",
00000310 => x"34202473",
00000311 => x"800007b7",
00000312 => x"00778793",
00000313 => x"06f41a63",
00000314 => x"00000513",
00000315 => x"0d1000ef",
00000316 => x"6e0000ef",
00000317 => x"fe002783",
00000318 => x"0027d793",
00000319 => x"00a78533",
00000320 => x"00f537b3",
00000321 => x"00b785b3",
00000322 => x"6f4000ef",
00000323 => x"03c12403",
00000324 => x"04c12083",
00000325 => x"04812283",
00000326 => x"04412303",
00000327 => x"04012383",
00000328 => x"03812503",
00000329 => x"03412583",
00000330 => x"03012603",
00000331 => x"02c12683",
00000332 => x"02812703",
00000333 => x"02412783",
00000334 => x"02012803",
00000335 => x"01c12883",
00000336 => x"01812e03",
00000337 => x"01412e83",
00000338 => x"01012f03",
00000339 => x"00c12f83",
00000340 => x"05010113",
00000341 => x"30200073",
00000342 => x"00700793",
00000343 => x"00100513",
00000344 => x"02f40863",
00000345 => x"ffff1537",
00000346 => x"e7c50513",
00000347 => x"760000ef",
00000348 => x"00040513",
00000349 => x"eadff0ef",
00000350 => x"ffff1537",
00000351 => x"e8450513",
00000352 => x"74c000ef",
00000353 => x"34102573",
00000354 => x"e99ff0ef",
00000355 => x"00500513",
00000356 => x"e59ff0ef",
00000357 => x"ff010113",
00000358 => x"00000513",
00000359 => x"00112623",
00000360 => x"00812423",
00000361 => x"7c0000ef",
00000362 => x"00500513",
00000363 => x"7fc000ef",
00000364 => x"00000513",
00000365 => x"7f4000ef",
00000366 => x"00050413",
00000367 => x"00000513",
00000368 => x"7c4000ef",
00000369 => x"00c12083",
00000370 => x"0ff47513",
00000371 => x"00812403",
00000372 => x"01010113",
00000373 => x"00008067",
00000374 => x"ff010113",
00000375 => x"00000513",
00000376 => x"00112623",
00000377 => x"00812423",
00000378 => x"77c000ef",
00000379 => x"09e00513",
00000380 => x"7b8000ef",
00000381 => x"00000513",
00000382 => x"7b0000ef",
00000383 => x"00050413",
00000384 => x"00000513",
00000385 => x"780000ef",
00000386 => x"00c12083",
00000387 => x"0ff47513",
00000388 => x"00812403",
00000389 => x"01010113",
00000390 => x"00008067",
00000391 => x"ff010113",
00000392 => x"00000513",
00000393 => x"00112623",
00000394 => x"73c000ef",
00000395 => x"00600513",
00000396 => x"778000ef",
00000397 => x"00c12083",
00000398 => x"00000513",
00000399 => x"01010113",
00000400 => x"7440006f",
00000401 => x"ff010113",
00000402 => x"00812423",
00000403 => x"00050413",
00000404 => x"01055513",
00000405 => x"0ff57513",
00000406 => x"00112623",
00000407 => x"74c000ef",
00000408 => x"00845513",
00000409 => x"0ff57513",
00000410 => x"740000ef",
00000411 => x"0ff47513",
00000412 => x"00812403",
00000413 => x"00c12083",
00000414 => x"01010113",
00000415 => x"72c0006f",
00000416 => x"ff010113",
00000417 => x"00812423",
00000418 => x"00050413",
00000419 => x"00000513",
00000420 => x"00112623",
00000421 => x"6d0000ef",
00000422 => x"00300513",
00000423 => x"70c000ef",
00000424 => x"00040513",
00000425 => x"fa1ff0ef",
00000426 => x"00000513",
00000427 => x"6fc000ef",
00000428 => x"00050413",
00000429 => x"00000513",
00000430 => x"6cc000ef",
00000431 => x"00c12083",
00000432 => x"0ff47513",
00000433 => x"00812403",
00000434 => x"01010113",
00000435 => x"00008067",
00000436 => x"fd010113",
00000437 => x"02812423",
00000438 => x"02912223",
00000439 => x"03212023",
00000440 => x"01312e23",
00000441 => x"01412c23",
00000442 => x"02112623",
00000443 => x"00050913",
00000444 => x"00058993",
00000445 => x"00c10493",
00000446 => x"00000413",
00000447 => x"00400a13",
00000448 => x"02091e63",
00000449 => x"5ac000ef",
00000450 => x"00a481a3",
00000451 => x"00140413",
00000452 => x"fff48493",
00000453 => x"ff4416e3",
00000454 => x"02c12083",
00000455 => x"02812403",
00000456 => x"00c12503",
00000457 => x"02412483",
00000458 => x"02012903",
00000459 => x"01c12983",
00000460 => x"01812a03",
00000461 => x"03010113",
00000462 => x"00008067",
00000463 => x"00898533",
00000464 => x"f41ff0ef",
00000465 => x"fc5ff06f",
00000466 => x"fe802783",
00000467 => x"fd010113",
00000468 => x"02812423",
00000469 => x"02112623",
00000470 => x"02912223",
00000471 => x"03212023",
00000472 => x"01312e23",
00000473 => x"01412c23",
00000474 => x"01512a23",
00000475 => x"01612823",
00000476 => x"01712623",
00000477 => x"0087f793",
00000478 => x"00050413",
00000479 => x"00078a63",
00000480 => x"fe802783",
00000481 => x"00400513",
00000482 => x"0047f793",
00000483 => x"04079663",
00000484 => x"02041863",
00000485 => x"ffff1537",
00000486 => x"e8c50513",
00000487 => x"530000ef",
00000488 => x"008005b7",
00000489 => x"00040513",
00000490 => x"f29ff0ef",
00000491 => x"4788d7b7",
00000492 => x"afe78793",
00000493 => x"02f50463",
00000494 => x"00000513",
00000495 => x"01c0006f",
00000496 => x"ffff1537",
00000497 => x"eac50513",
00000498 => x"504000ef",
00000499 => x"e0dff0ef",
00000500 => x"fc0518e3",
00000501 => x"00300513",
00000502 => x"c11ff0ef",
00000503 => x"008009b7",
00000504 => x"00498593",
00000505 => x"00040513",
00000506 => x"ee9ff0ef",
00000507 => x"00050a13",
00000508 => x"00898593",
00000509 => x"00040513",
00000510 => x"ed9ff0ef",
00000511 => x"ff002b83",
00000512 => x"00050a93",
00000513 => x"ffca7b13",
00000514 => x"00000913",
00000515 => x"00000493",
00000516 => x"00c98993",
00000517 => x"013905b3",
00000518 => x"052b1863",
00000519 => x"015484b3",
00000520 => x"00200513",
00000521 => x"fa049ae3",
00000522 => x"ffff1537",
00000523 => x"eb850513",
00000524 => x"49c000ef",
00000525 => x"02c12083",
00000526 => x"02812403",
00000527 => x"800007b7",
00000528 => x"0147a023",
00000529 => x"02412483",
00000530 => x"02012903",
00000531 => x"01c12983",
00000532 => x"01812a03",
00000533 => x"01412a83",
00000534 => x"01012b03",
00000535 => x"00c12b83",
00000536 => x"03010113",
00000537 => x"00008067",
00000538 => x"00040513",
00000539 => x"e65ff0ef",
00000540 => x"012b87b3",
00000541 => x"00a484b3",
00000542 => x"00a7a023",
00000543 => x"00490913",
00000544 => x"f95ff06f",
00000545 => x"ff010113",
00000546 => x"00112623",
00000547 => x"ebdff0ef",
00000548 => x"ffff1537",
00000549 => x"ebc50513",
00000550 => x"434000ef",
00000551 => x"af9ff0ef",
00000552 => x"0000006f",
00000553 => x"ff010113",
00000554 => x"00112623",
00000555 => x"00812423",
00000556 => x"00912223",
00000557 => x"00058413",
00000558 => x"00050493",
00000559 => x"d61ff0ef",
00000560 => x"00000513",
00000561 => x"4a0000ef",
00000562 => x"00200513",
00000563 => x"4dc000ef",
00000564 => x"00048513",
00000565 => x"d71ff0ef",
00000566 => x"00040513",
00000567 => x"4cc000ef",
00000568 => x"00000513",
00000569 => x"4a0000ef",
00000570 => x"cadff0ef",
00000571 => x"00157513",
00000572 => x"fe051ce3",
00000573 => x"00c12083",
00000574 => x"00812403",
00000575 => x"00412483",
00000576 => x"01010113",
00000577 => x"00008067",
00000578 => x"fe010113",
00000579 => x"00812c23",
00000580 => x"00912a23",
00000581 => x"01212823",
00000582 => x"00112e23",
00000583 => x"00b12623",
00000584 => x"00300413",
00000585 => x"00350493",
00000586 => x"fff00913",
00000587 => x"00c10793",
00000588 => x"008787b3",
00000589 => x"0007c583",
00000590 => x"40848533",
00000591 => x"fff40413",
00000592 => x"f65ff0ef",
00000593 => x"ff2414e3",
00000594 => x"01c12083",
00000595 => x"01812403",
00000596 => x"01412483",
00000597 => x"01012903",
00000598 => x"02010113",
00000599 => x"00008067",
00000600 => x"ff010113",
00000601 => x"00112623",
00000602 => x"00812423",
00000603 => x"00050413",
00000604 => x"cadff0ef",
00000605 => x"00000513",
00000606 => x"3ec000ef",
00000607 => x"0d800513",
00000608 => x"428000ef",
00000609 => x"00040513",
00000610 => x"cbdff0ef",
00000611 => x"00000513",
00000612 => x"3f4000ef",
00000613 => x"c01ff0ef",
00000614 => x"00157513",
00000615 => x"fe051ce3",
00000616 => x"00c12083",
00000617 => x"00812403",
00000618 => x"01010113",
00000619 => x"00008067",
00000620 => x"fe010113",
00000621 => x"800007b7",
00000622 => x"00812c23",
00000623 => x"0007a403",
00000624 => x"00112e23",
00000625 => x"00912a23",
00000626 => x"01212823",
00000627 => x"01312623",
00000628 => x"01412423",
00000629 => x"01512223",
00000630 => x"02041863",
00000631 => x"ffff1537",
00000632 => x"e4450513",
00000633 => x"01812403",
00000634 => x"01c12083",
00000635 => x"01412483",
00000636 => x"01012903",
00000637 => x"00c12983",
00000638 => x"00812a03",
00000639 => x"00412a83",
00000640 => x"02010113",
00000641 => x"2c80006f",
00000642 => x"ffff1537",
00000643 => x"ec050513",
00000644 => x"2bc000ef",
00000645 => x"00040513",
00000646 => x"a09ff0ef",
00000647 => x"ffff1537",
00000648 => x"ecc50513",
00000649 => x"2a8000ef",
00000650 => x"00800537",
00000651 => x"9f5ff0ef",
00000652 => x"ffff1537",
00000653 => x"ee850513",
00000654 => x"294000ef",
00000655 => x"274000ef",
00000656 => x"00050493",
00000657 => x"25c000ef",
00000658 => x"07900793",
00000659 => x"0af49e63",
00000660 => x"b89ff0ef",
00000661 => x"00051663",
00000662 => x"00300513",
00000663 => x"98dff0ef",
00000664 => x"ffff1537",
00000665 => x"ef450513",
00000666 => x"01045493",
00000667 => x"260000ef",
00000668 => x"00148493",
00000669 => x"00800937",
00000670 => x"fff00993",
00000671 => x"00010a37",
00000672 => x"fff48493",
00000673 => x"07349063",
00000674 => x"4788d5b7",
00000675 => x"afe58593",
00000676 => x"00800537",
00000677 => x"e75ff0ef",
00000678 => x"00800537",
00000679 => x"00040593",
00000680 => x"00450513",
00000681 => x"e65ff0ef",
00000682 => x"ff002a03",
00000683 => x"008009b7",
00000684 => x"ffc47413",
00000685 => x"00000493",
00000686 => x"00000913",
00000687 => x"00c98a93",
00000688 => x"01548533",
00000689 => x"009a07b3",
00000690 => x"02849663",
00000691 => x"00898513",
00000692 => x"412005b3",
00000693 => x"e35ff0ef",
00000694 => x"ffff1537",
00000695 => x"eb850513",
00000696 => x"f05ff06f",
00000697 => x"00090513",
00000698 => x"e79ff0ef",
00000699 => x"01490933",
00000700 => x"f91ff06f",
00000701 => x"0007a583",
00000702 => x"00448493",
00000703 => x"00b90933",
00000704 => x"e09ff0ef",
00000705 => x"fbdff06f",
00000706 => x"01c12083",
00000707 => x"01812403",
00000708 => x"01412483",
00000709 => x"01012903",
00000710 => x"00c12983",
00000711 => x"00812a03",
00000712 => x"00412a83",
00000713 => x"02010113",
00000714 => x"00008067",
00000715 => x"fe010113",
00000716 => x"00912a23",
00000717 => x"01312623",
00000718 => x"01412423",
00000719 => x"00112e23",
00000720 => x"00812c23",
00000721 => x"01212823",
00000722 => x"00000493",
00000723 => x"00300a13",
00000724 => x"00400993",
00000725 => x"f13027f3",
00000726 => x"40900733",
00000727 => x"00371713",
00000728 => x"01870713",
00000729 => x"00e7d7b3",
00000730 => x"0ff7f793",
00000731 => x"0047d513",
00000732 => x"40a00933",
00000733 => x"00491913",
00000734 => x"03078793",
00000735 => x"0ff97913",
00000736 => x"0ff7f413",
00000737 => x"00050663",
00000738 => x"03050513",
00000739 => x"114000ef",
00000740 => x"01240533",
00000741 => x"0ff57513",
00000742 => x"108000ef",
00000743 => x"01448663",
00000744 => x"02e00513",
00000745 => x"0fc000ef",
00000746 => x"00148493",
00000747 => x"fb3494e3",
00000748 => x"01c12083",
00000749 => x"01812403",
00000750 => x"01412483",
00000751 => x"01012903",
00000752 => x"00c12983",
00000753 => x"00812a03",
00000754 => x"02010113",
00000755 => x"00008067",
00000756 => x"ff010113",
00000757 => x"f9402783",
00000758 => x"f9002703",
00000759 => x"f9402683",
00000760 => x"fed79ae3",
00000761 => x"00e12023",
00000762 => x"00f12223",
00000763 => x"00012503",
00000764 => x"00412583",
00000765 => x"01010113",
00000766 => x"00008067",
00000767 => x"f9800693",
00000768 => x"fff00613",
00000769 => x"00c6a023",
00000770 => x"00a6a023",
00000771 => x"00b6a223",
00000772 => x"00008067",
00000773 => x"fa002023",
00000774 => x"fe002683",
00000775 => x"00151513",
00000776 => x"00000713",
00000777 => x"04a6f263",
00000778 => x"000016b7",
00000779 => x"00000793",
00000780 => x"ffe68693",
00000781 => x"04e6e463",
00000782 => x"00167613",
00000783 => x"0015f593",
00000784 => x"01879793",
00000785 => x"01e61613",
00000786 => x"00c7e7b3",
00000787 => x"01d59593",
00000788 => x"00b7e7b3",
00000789 => x"00e7e7b3",
00000790 => x"10000737",
00000791 => x"00e7e7b3",
00000792 => x"faf02023",
00000793 => x"00008067",
00000794 => x"00170793",
00000795 => x"01079713",
00000796 => x"40a686b3",
00000797 => x"01075713",
00000798 => x"fadff06f",
00000799 => x"ffe78513",
00000800 => x"0fd57513",
00000801 => x"00051a63",
00000802 => x"00375713",
00000803 => x"00178793",
00000804 => x"0ff7f793",
00000805 => x"fa1ff06f",
00000806 => x"00175713",
00000807 => x"ff1ff06f",
00000808 => x"fa002783",
00000809 => x"fe07cee3",
00000810 => x"faa02223",
00000811 => x"00008067",
00000812 => x"fa402503",
00000813 => x"fe055ee3",
00000814 => x"0ff57513",
00000815 => x"00008067",
00000816 => x"fa402503",
00000817 => x"0ff57513",
00000818 => x"00008067",
00000819 => x"ff010113",
00000820 => x"00812423",
00000821 => x"01212023",
00000822 => x"00112623",
00000823 => x"00912223",
00000824 => x"00050413",
00000825 => x"00a00913",
00000826 => x"00044483",
00000827 => x"00140413",
00000828 => x"00049e63",
00000829 => x"00c12083",
00000830 => x"00812403",
00000831 => x"00412483",
00000832 => x"00012903",
00000833 => x"01010113",
00000834 => x"00008067",
00000835 => x"01249663",
00000836 => x"00d00513",
00000837 => x"f8dff0ef",
00000838 => x"00048513",
00000839 => x"f85ff0ef",
00000840 => x"fc9ff06f",
00000841 => x"00757513",
00000842 => x"0016f793",
00000843 => x"00367613",
00000844 => x"00a51513",
00000845 => x"00f79793",
00000846 => x"0015f593",
00000847 => x"00f567b3",
00000848 => x"00d61613",
00000849 => x"00c7e7b3",
00000850 => x"00959593",
00000851 => x"fa800713",
00000852 => x"00b7e7b3",
00000853 => x"00072023",
00000854 => x"1007e793",
00000855 => x"00f72023",
00000856 => x"00008067",
00000857 => x"fa800713",
00000858 => x"00072683",
00000859 => x"00757793",
00000860 => x"00100513",
00000861 => x"00f51533",
00000862 => x"00d56533",
00000863 => x"00a72023",
00000864 => x"00008067",
00000865 => x"fa800713",
00000866 => x"00072683",
00000867 => x"00757513",
00000868 => x"00100793",
00000869 => x"00a797b3",
00000870 => x"fff7c793",
00000871 => x"00d7f7b3",
00000872 => x"00f72023",
00000873 => x"00008067",
00000874 => x"faa02623",
00000875 => x"fa802783",
00000876 => x"fe07cee3",
00000877 => x"fac02503",
00000878 => x"00008067",
00000879 => x"f8400713",
00000880 => x"00072683",
00000881 => x"00100793",
00000882 => x"00a797b3",
00000883 => x"00d7c7b3",
00000884 => x"00f72023",
00000885 => x"00008067",
00000886 => x"f8a02223",
00000887 => x"00008067",
00000888 => x"69617641",
00000889 => x"6c62616c",
00000890 => x"4d432065",
00000891 => x"0a3a7344",
00000892 => x"203a6820",
00000893 => x"706c6548",
00000894 => x"3a72200a",
00000895 => x"73655220",
00000896 => x"74726174",
00000897 => x"3a75200a",
00000898 => x"6c705520",
00000899 => x"0a64616f",
00000900 => x"203a7320",
00000901 => x"726f7453",
00000902 => x"6f742065",
00000903 => x"616c6620",
00000904 => x"200a6873",
00000905 => x"4c203a6c",
00000906 => x"2064616f",
00000907 => x"6d6f7266",
00000908 => x"616c6620",
00000909 => x"200a6873",
00000910 => x"45203a65",
00000911 => x"75636578",
00000912 => x"00006574",
00000913 => x"65206f4e",
00000914 => x"75636578",
00000915 => x"6c626174",
00000916 => x"76612065",
00000917 => x"616c6961",
00000918 => x"2e656c62",
00000919 => x"00000000",
00000920 => x"746f6f42",
00000921 => x"2e676e69",
00000922 => x"0a0a2e2e",
00000923 => x"00000000",
00000924 => x"746f6f42",
00000925 => x"2e676e69",
00000926 => x"0a0a2e2e",
00000927 => x"00000000",
00000928 => x"52450a07",
00000929 => x"5f524f52",
00000930 => x"00000000",
00000931 => x"58450a0a",
00000932 => x"00282043",
00000933 => x"20402029",
00000934 => x"00007830",
00000935 => x"69617741",
00000936 => x"676e6974",
00000937 => x"6f656e20",
00000938 => x"32337672",
00000939 => x"6578655f",
00000940 => x"6e69622e",
00000941 => x"202e2e2e",
00000942 => x"00000000",
00000943 => x"64616f4c",
00000944 => x"2e676e69",
00000945 => x"00202e2e",
00000946 => x"00004b4f",
00000947 => x"0000000a",
00000948 => x"74697257",
00000949 => x"78302065",
00000950 => x"00000000",
00000951 => x"74796220",
00000952 => x"74207365",
00000953 => x"5053206f",
00000954 => x"6c662049",
00000955 => x"20687361",
00000956 => x"78302040",
00000957 => x"00000000",
00000958 => x"7928203f",
00000959 => x"20296e2f",
00000960 => x"00000000",
00000961 => x"616c460a",
00000962 => x"6e696873",
00000963 => x"2e2e2e67",
00000964 => x"00000020",
00000965 => x"0a0a0a0a",
00000966 => x"4e203c3c",
00000967 => x"56524f45",
00000968 => x"42203233",
00000969 => x"6c746f6f",
00000970 => x"6564616f",
00000971 => x"3e3e2072",
00000972 => x"4c420a0a",
00000973 => x"203a5644",
00000974 => x"2074634f",
00000975 => x"32203232",
00000976 => x"0a303230",
00000977 => x"3a565748",
00000978 => x"00002020",
00000979 => x"4b4c430a",
00000980 => x"0020203a",
00000981 => x"0a7a4820",
00000982 => x"52455355",
00000983 => x"0000203a",
00000984 => x"53494d0a",
00000985 => x"00203a41",
00000986 => x"4f52500a",
00000987 => x"00203a43",
00000988 => x"454d490a",
00000989 => x"00203a4d",
00000990 => x"74796220",
00000991 => x"40207365",
00000992 => x"00000020",
00000993 => x"454d440a",
00000994 => x"00203a4d",
00000995 => x"75410a0a",
00000996 => x"6f626f74",
00000997 => x"6920746f",
00000998 => x"7338206e",
00000999 => x"7250202e",
00001000 => x"20737365",
00001001 => x"2079656b",
00001002 => x"61206f74",
00001003 => x"74726f62",
00001004 => x"00000a2e",
00001005 => x"726f6241",
00001006 => x"2e646574",
00001007 => x"00000a0a",
00001008 => x"444d430a",
00001009 => x"00203e3a",
00001010 => x"53207962",
00001011 => x"68706574",
00001012 => x"4e206e61",
00001013 => x"69746c6f",
00001014 => x"0000676e",
00001015 => x"61766e49",
00001016 => x"2064696c",
00001017 => x"00444d43",
00001018 => x"33323130",
00001019 => x"37363534",
00001020 => x"42413938",
00001021 => x"46454443",
00000924 => x"52450a07",
00000925 => x"5f524f52",
00000926 => x"00000000",
00000927 => x"58450a0a",
00000928 => x"00282043",
00000929 => x"20402029",
00000930 => x"00007830",
00000931 => x"69617741",
00000932 => x"676e6974",
00000933 => x"6f656e20",
00000934 => x"32337672",
00000935 => x"6578655f",
00000936 => x"6e69622e",
00000937 => x"202e2e2e",
00000938 => x"00000000",
00000939 => x"64616f4c",
00000940 => x"2e676e69",
00000941 => x"00202e2e",
00000942 => x"00004b4f",
00000943 => x"0000000a",
00000944 => x"74697257",
00000945 => x"78302065",
00000946 => x"00000000",
00000947 => x"74796220",
00000948 => x"74207365",
00000949 => x"5053206f",
00000950 => x"6c662049",
00000951 => x"20687361",
00000952 => x"78302040",
00000953 => x"00000000",
00000954 => x"7928203f",
00000955 => x"20296e2f",
00000956 => x"00000000",
00000957 => x"616c460a",
00000958 => x"6e696873",
00000959 => x"2e2e2e67",
00000960 => x"00000020",
00000961 => x"0a0a0a0a",
00000962 => x"4e203c3c",
00000963 => x"56524f45",
00000964 => x"42203233",
00000965 => x"6c746f6f",
00000966 => x"6564616f",
00000967 => x"3e3e2072",
00000968 => x"4c420a0a",
00000969 => x"203a5644",
00000970 => x"20766f4e",
00000971 => x"32203320",
00000972 => x"0a303230",
00000973 => x"3a565748",
00000974 => x"00002020",
00000975 => x"4b4c430a",
00000976 => x"0020203a",
00000977 => x"0a7a4820",
00000978 => x"52455355",
00000979 => x"0000203a",
00000980 => x"53494d0a",
00000981 => x"00203a41",
00000982 => x"4f52500a",
00000983 => x"00203a43",
00000984 => x"454d490a",
00000985 => x"00203a4d",
00000986 => x"74796220",
00000987 => x"40207365",
00000988 => x"00000020",
00000989 => x"454d440a",
00000990 => x"00203a4d",
00000991 => x"75410a0a",
00000992 => x"6f626f74",
00000993 => x"6920746f",
00000994 => x"7338206e",
00000995 => x"7250202e",
00000996 => x"20737365",
00000997 => x"2079656b",
00000998 => x"61206f74",
00000999 => x"74726f62",
00001000 => x"00000a2e",
00001001 => x"726f6241",
00001002 => x"2e646574",
00001003 => x"00000a0a",
00001004 => x"444d430a",
00001005 => x"00203e3a",
00001006 => x"53207962",
00001007 => x"68706574",
00001008 => x"4e206e61",
00001009 => x"69746c6f",
00001010 => x"0000676e",
00001011 => x"61766e49",
00001012 => x"2064696c",
00001013 => x"00444d43",
00001014 => x"33323130",
00001015 => x"37363534",
00001016 => x"42413938",
00001017 => x"46454443",
others => x"00000000"
);
 
/neorv32_busswitch.vhd
72,6 → 72,7
cb_bus_ack_o : out std_ulogic; -- bus transfer acknowledge
cb_bus_err_o : out std_ulogic; -- bus transfer error
-- peripheral bus --
p_bus_src_o : out std_ulogic; -- access source: 0 = A, 1 = B
p_bus_addr_o : out std_ulogic_vector(data_width_c-1 downto 0); -- bus access address
p_bus_rdata_i : in std_ulogic_vector(data_width_c-1 downto 0); -- bus read data
p_bus_wdata_o : out std_ulogic_vector(data_width_c-1 downto 0); -- bus write data
188,6 → 189,8
arbiter.bus_sel <= '0';
arbiter.we_trig <= '0';
arbiter.re_trig <= '0';
--
p_bus_src_o <= '0';
 
-- state machine --
case arbiter.state is
194,6 → 197,7
 
when IDLE => -- Controller a has full bus access
-- ------------------------------------------------------------
p_bus_src_o <= '0'; -- access from port A
if (ca_req_current = '1') then -- current request?
arbiter.bus_sel <= '0';
arbiter.state_nxt <= BUSY;
210,6 → 214,7
 
when BUSY => -- transaction in progress
-- ------------------------------------------------------------
p_bus_src_o <= '0'; -- access from port A
arbiter.bus_sel <= '0';
if (ca_bus_cancel_i = '1') or -- controller cancels access
(p_bus_err_i = '1') or -- peripheral cancels access
219,6 → 224,7
 
when RETIRE => -- retire pending access
-- ------------------------------------------------------------
p_bus_src_o <= '0'; -- access from port A
arbiter.bus_sel <= '0';
if (PORT_CA_READ_ONLY = false) then
arbiter.we_trig <= ca_wr_req_buf;
228,6 → 234,7
 
when BUSY_SWITCHED => -- switched transaction in progress
-- ------------------------------------------------------------
p_bus_src_o <= '1'; -- access from port B
arbiter.bus_sel <= '1';
if (cb_bus_cancel_i = '1') or -- controller cancels access
(p_bus_err_i = '1') or -- peripheral cancels access
237,6 → 244,7
 
when RETIRE_SWITCHED => -- retire pending switched access
-- ------------------------------------------------------------
p_bus_src_o <= '1'; -- access from port B
arbiter.bus_sel <= '1';
if (PORT_CB_READ_ONLY = false) then
arbiter.we_trig <= cb_wr_req_buf;
250,14 → 258,14
 
-- Peripheral Bus Switch ------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
p_bus_addr_o <= ca_bus_addr_i when (arbiter.bus_sel = '0') else cb_bus_addr_i;
p_bus_wdata_o <= cb_bus_wdata_i when (PORT_CA_READ_ONLY = true) else ca_bus_wdata_i when (PORT_CB_READ_ONLY = true) else
ca_bus_wdata_i when (arbiter.bus_sel = '0') else cb_bus_wdata_i;
p_bus_ben_o <= cb_bus_ben_i when (PORT_CA_READ_ONLY = true) else ca_bus_ben_i when (PORT_CB_READ_ONLY = true) else
ca_bus_ben_i when (arbiter.bus_sel = '0') else cb_bus_ben_i;
p_bus_we <= ca_bus_we_i when (arbiter.bus_sel = '0') else cb_bus_we_i;
p_bus_re <= ca_bus_re_i when (arbiter.bus_sel = '0') else cb_bus_re_i;
p_bus_cancel_o <= ca_bus_cancel_i when (arbiter.bus_sel = '0') else cb_bus_cancel_i;
p_bus_addr_o <= ca_bus_addr_i when (arbiter.bus_sel = '0') else cb_bus_addr_i;
p_bus_wdata_o <= cb_bus_wdata_i when (PORT_CA_READ_ONLY = true) else ca_bus_wdata_i when (PORT_CB_READ_ONLY = true) else
ca_bus_wdata_i when (arbiter.bus_sel = '0') else cb_bus_wdata_i;
p_bus_ben_o <= cb_bus_ben_i when (PORT_CA_READ_ONLY = true) else ca_bus_ben_i when (PORT_CB_READ_ONLY = true) else
ca_bus_ben_i when (arbiter.bus_sel = '0') else cb_bus_ben_i;
p_bus_we <= ca_bus_we_i when (arbiter.bus_sel = '0') else cb_bus_we_i;
p_bus_re <= ca_bus_re_i when (arbiter.bus_sel = '0') else cb_bus_re_i;
p_bus_cancel_o <= ca_bus_cancel_i when (arbiter.bus_sel = '0') else cb_bus_cancel_i;
p_bus_we_o <= (p_bus_we or arbiter.we_trig);
p_bus_re_o <= (p_bus_re or arbiter.re_trig);
 
/neorv32_cpu.vhd
2,13 → 2,13
-- # << NEORV32 - CPU Top Entity >> #
-- # ********************************************************************************************* #
-- # NEORV32 CPU: #
-- # * neorv32_cpu.vhd : CPU top entity #
-- # * neorv32_cpu_alu.vhd : Arithmetic/logic unit #
-- # * neorv32_cpu_bus.vhd : Instruction and data bus interface unit #
-- # * neorv32_cpu_cp_muldiv.vhd : MULDIV co-processor #
-- # * neorv32_cpu_ctrl.vhd : CPU control and CSR system #
-- # * neorv32_cpu_decompressor.vhd : Compressed instructions decoder #
-- # * neorv32_cpu_regfile.vhd : Data register file #
-- # * neorv32_cpu.vhd - CPU top entity #
-- # * neorv32_cpu_alu.vhd - Arithmetic/logic unit #
-- # * neorv32_cpu_bus.vhd - Instruction and data bus interface unit #
-- # * neorv32_cpu_cp_muldiv.vhd - MULDIV co-processor #
-- # * neorv32_cpu_ctrl.vhd - CPU control and CSR system #
-- # * neorv32_cpu_decompressor.vhd - Compressed instructions decoder #
-- # * neorv32_cpu_regfile.vhd - Data register file #
-- # #
-- # Check out the processor's data sheet for more information: docs/NEORV32.pdf #
-- # ********************************************************************************************* #
117,7 → 117,9
signal imm : std_ulogic_vector(data_width_c-1 downto 0); -- immediate
signal instr : std_ulogic_vector(data_width_c-1 downto 0); -- new instruction
signal rs1, rs2 : std_ulogic_vector(data_width_c-1 downto 0); -- source registers
signal alu_opb : std_ulogic_vector(data_width_c-1 downto 0); -- ALU operand b
signal alu_res : std_ulogic_vector(data_width_c-1 downto 0); -- alu result
signal alu_add : std_ulogic_vector(data_width_c-1 downto 0); -- alu address result
signal rdata : std_ulogic_vector(data_width_c-1 downto 0); -- memory read data
signal alu_wait : std_ulogic; -- alu is busy due to iterative unit
signal bus_i_wait : std_ulogic; -- wait for current bus instruction fetch
135,14 → 137,13
signal next_pc : std_ulogic_vector(data_width_c-1 downto 0); -- next pc (for next to-be-executed instruction)
 
-- co-processor interface --
signal cp0_data, cp1_data : std_ulogic_vector(data_width_c-1 downto 0);
signal cp0_valid, cp1_valid : std_ulogic;
signal cp0_start, cp1_start : std_ulogic;
signal cp0_data, cp1_data, cp2_data, cp3_data : std_ulogic_vector(data_width_c-1 downto 0);
signal cp0_valid, cp1_valid, cp2_valid, cp3_valid : std_ulogic;
signal cp0_start, cp1_start, cp2_start, cp3_start : std_ulogic;
 
-- pmp interface --
signal pmp_addr : pmp_addr_if_t;
signal pmp_ctrl : pmp_ctrl_if_t;
signal priv_mode : std_ulogic_vector(1 downto 0); -- current CPU privilege level
 
begin
 
149,7 → 150,7
-- Sanity Checks --------------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
-- CSR system --
assert not (CPU_EXTENSION_RISCV_Zicsr = false) report "NEORV32 CPU CONFIG WARNING! No exception/interrupt/machine features available when CPU_EXTENSION_RISCV_Zicsr = false." severity warning;
assert not (CPU_EXTENSION_RISCV_Zicsr = false) report "NEORV32 CPU CONFIG WARNING! No exception/interrupt/trap/machine features available when CPU_EXTENSION_RISCV_Zicsr = false." severity warning;
-- U-extension requires Zicsr extension --
assert not ((CPU_EXTENSION_RISCV_Zicsr = false) and (CPU_EXTENSION_RISCV_U = true)) report "NEORV32 CPU CONFIG ERROR! User mode requires CPU_EXTENSION_RISCV_Zicsr extension." severity error;
-- PMP requires Zicsr extension --
157,7 → 158,7
-- PMP regions --
assert not ((PMP_NUM_REGIONS > pmp_max_r_c) and (PMP_USE = true)) report "NEORV32 CPU CONFIG ERROR! Number of PMP regions out of valid range." severity error;
-- PMP granulartiy --
assert not (((PMP_GRANULARITY < 1) or (PMP_GRANULARITY > 32)) and (PMP_USE = true)) report "NEORV32 CPU CONFIG ERROR! Invalid PMP granulartiy (0 < G < 33)." severity error;
assert not (((PMP_GRANULARITY < 1) or (PMP_GRANULARITY > 32)) and (PMP_USE = true)) report "NEORV32 CPU CONFIG ERROR! Invalid PMP granulartiy (0 < PMP_GRANULARITY < 33)." severity error;
 
 
-- Control Unit ---------------------------------------------------------------------------
191,7 → 192,8
-- data input --
instr_i => instr, -- instruction
cmp_i => alu_cmp, -- comparator status
alu_res_i => alu_res, -- ALU processing result
alu_add_i => alu_add, -- ALU address result
rs1_i => rs1, -- rf source 1
-- data output --
imm_o => imm, -- immediate
fetch_pc_o => fetch_pc, -- PC for instruction fetch
209,7 → 211,6
-- physical memory protection --
pmp_addr_o => pmp_addr, -- addresses
pmp_ctrl_o => pmp_ctrl, -- configs
priv_mode_o => priv_mode, -- current CPU privilege level
-- bus access exceptions --
mar_i => mar, -- memory address register
ma_instr_i => ma_instr, -- misaligned instruction address
262,6 → 263,8
-- data output --
cmp_o => alu_cmp, -- comparator status
res_o => alu_res, -- ALU result
add_o => alu_add, -- address computation result
opb_o => alu_opb, -- ALU operand B
-- co-processor interface --
cp0_start_o => cp0_start, -- trigger co-processor 0
cp0_data_i => cp0_data, -- co-processor 0 result
269,6 → 272,12
cp1_start_o => cp1_start, -- trigger co-processor 1
cp1_data_i => cp1_data, -- co-processor 1 result
cp1_valid_i => cp1_valid, -- co-processor 1 result valid
cp2_start_o => cp2_start, -- trigger co-processor 2
cp2_data_i => cp2_data, -- co-processor 2 result
cp2_valid_i => cp2_valid, -- co-processor 2 result valid
cp3_start_o => cp3_start, -- trigger co-processor 3
cp3_data_i => cp3_data, -- co-processor 3 result
cp3_valid_i => cp3_valid, -- co-processor 3 result valid
-- status --
wait_o => alu_wait -- busy due to iterative processing units
);
287,8 → 296,8
clk_i => clk_i, -- global clock, rising edge
rstn_i => rstn_i, -- global reset, low-active, async
ctrl_i => ctrl, -- main control bus
start_i => cp0_start, -- trigger operation
-- data input --
start_i => cp0_start, -- trigger operation
rs1_i => rs1, -- rf source 1
rs2_i => rs2, -- rf source 2
-- result and status --
304,12 → 313,30
end generate;
 
 
-- Co-Processor 1: Not Implemented Yet ----------------------------------------------------
-- Co-Processor 1: Not implemented yet ----------------------------------------------------
-- -------------------------------------------------------------------------------------------
-- control: ctrl cp1_start
-- inputs: rs1 rs2 alu_cmp alu_opb
cp1_data <= (others => '0');
cp1_valid <= '0';
 
 
-- Co-Processor 2: Not implemented yet ----------------------------------------------------
-- -------------------------------------------------------------------------------------------
-- control: ctrl cp2_start
-- inputs: rs1 rs2 alu_cmp alu_opb
cp2_data <= (others => '0');
cp2_valid <= '0';
 
 
-- Co-Processor 3: Not implemented yet ----------------------------------------------------
-- -------------------------------------------------------------------------------------------
-- control: ctrl cp3_start
-- inputs: rs1 rs2 alu_cmp alu_opb
cp3_data <= (others => '0');
cp3_valid <= '0';
 
 
-- Bus Interface Unit ---------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
neorv32_cpu_bus_inst: neorv32_cpu_bus
323,7 → 350,6
port map (
-- global control --
clk_i => clk_i, -- global clock, rising edge
rstn_i => rstn_i, -- global reset, low-active, async
ctrl_i => ctrl, -- main control bus
-- cpu instruction fetch interface --
fetch_pc_i => fetch_pc, -- PC for instruction fetch
346,7 → 372,6
-- physical memory protection --
pmp_addr_i => pmp_addr, -- addresses
pmp_ctrl_i => pmp_ctrl, -- configs
priv_mode_i => priv_mode, -- current CPU privilege level
-- instruction bus --
i_bus_addr_o => i_bus_addr_o, -- bus access address
i_bus_rdata_i => i_bus_rdata_i, -- bus read data
372,8 → 397,8
);
 
-- current privilege level --
i_bus_priv_o <= priv_mode;
d_bus_priv_o <= priv_mode;
i_bus_priv_o <= ctrl(ctrl_priv_lvl_msb_c downto ctrl_priv_lvl_lsb_c);
d_bus_priv_o <= ctrl(ctrl_priv_lvl_msb_c downto ctrl_priv_lvl_lsb_c);
 
 
end neorv32_cpu_rtl;
/neorv32_cpu_alu.vhd
2,7 → 2,6
-- # << NEORV32 - Arithmetical/Logical Unit >> #
-- # ********************************************************************************************* #
-- # Main data and address ALU. Includes comparator unit and co-processor interface/arbiter. #
-- # The shifter sub-unit uses an iterative approach. #
-- # ********************************************************************************************* #
-- # BSD 3-Clause License #
-- # #
60,6 → 59,8
-- data output --
cmp_o : out std_ulogic_vector(1 downto 0); -- comparator status
res_o : out std_ulogic_vector(data_width_c-1 downto 0); -- ALU result
add_o : out std_ulogic_vector(data_width_c-1 downto 0); -- address computation result
opb_o : out std_ulogic_vector(data_width_c-1 downto 0); -- ALU operand B
-- co-processor interface --
cp0_start_o : out std_ulogic; -- trigger co-processor 0
cp0_data_i : in std_ulogic_vector(data_width_c-1 downto 0); -- co-processor 0 result
67,6 → 68,12
cp1_start_o : out std_ulogic; -- trigger co-processor 1
cp1_data_i : in std_ulogic_vector(data_width_c-1 downto 0); -- co-processor 1 result
cp1_valid_i : in std_ulogic; -- co-processor 1 result valid
cp2_start_o : out std_ulogic; -- trigger co-processor 2
cp2_data_i : in std_ulogic_vector(data_width_c-1 downto 0); -- co-processor 2 result
cp2_valid_i : in std_ulogic; -- co-processor 2 result valid
cp3_start_o : out std_ulogic; -- trigger co-processor 3
cp3_data_i : in std_ulogic_vector(data_width_c-1 downto 0); -- co-processor 3 result
cp3_valid_i : in std_ulogic; -- co-processor 3 result valid
-- status --
wait_o : out std_ulogic -- busy due to iterative processing units
);
78,14 → 85,13
signal opa, opb : std_ulogic_vector(data_width_c-1 downto 0);
 
-- results --
signal addsub_res : std_ulogic_vector(data_width_c-1 downto 0);
signal addsub_res : std_ulogic_vector(data_width_c downto 0);
signal cp_res : std_ulogic_vector(data_width_c-1 downto 0);
 
-- comparator --
signal cmp_opx : std_ulogic_vector(data_width_c downto 0);
signal cmp_opy : std_ulogic_vector(data_width_c downto 0);
signal cmp_sub : std_ulogic_vector(data_width_c downto 0);
signal cmp_less : std_ulogic;
signal cmp_opx : std_ulogic_vector(data_width_c downto 0);
signal cmp_opy : std_ulogic_vector(data_width_c downto 0);
signal cmp_sub : std_ulogic_vector(data_width_c downto 0);
 
-- shifter --
type shifter_t is record
116,8 → 122,10
 
-- Operand Mux ----------------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
opa <= pc2_i when (ctrl_i(ctrl_alu_opa_mux_c) = '1') else rs1_i; -- operand a (first ALU input operand)
opa <= pc2_i when (ctrl_i(ctrl_alu_opa_mux_c) = '1') else rs1_i; -- operand a (first ALU input operand), only required for arithmetic ops
opb <= imm_i when (ctrl_i(ctrl_alu_opb_mux_c) = '1') else rs2_i; -- operand b (second ALU input operand)
--
opb_o <= opb;
 
 
-- Comparator Unit ------------------------------------------------------------------------
147,24 → 155,22
if (ctrl_i(ctrl_alu_addsub_c) = '1') then -- subtraction
op_y_v := not op_b_v;
cin_v(0) := '1';
else-- addition
else -- addition
op_y_v := op_b_v;
cin_v(0) := '0';
end if;
 
-- adder core --
res_v := std_ulogic_vector(unsigned(op_a_v) + unsigned(op_y_v) + unsigned(cin_v(0 downto 0)));
 
-- output --
cmp_less <= res_v(32);
addsub_res <= res_v(31 downto 0);
addsub_res <= res_v(31 downto 0);
-- adder core (result + carry/borrow) --
addsub_res <= std_ulogic_vector(unsigned(op_a_v) + unsigned(op_y_v) + unsigned(cin_v(0 downto 0)));
end process binary_arithmetic_core;
 
-- direct output of address result --
add_o <= addsub_res(data_width_c-1 downto 0);
 
 
-- Shifter Unit ---------------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
shifter_unit: process(rstn_i, clk_i)
shifter_unit: process(clk_i)
variable bs_input_v : std_ulogic_vector(data_width_c-1 downto 0);
variable bs_level_4_v : std_ulogic_vector(data_width_c-1 downto 0);
variable bs_level_3_v : std_ulogic_vector(data_width_c-1 downto 0);
172,15 → 178,7
variable bs_level_1_v : std_ulogic_vector(data_width_c-1 downto 0);
variable bs_level_0_v : std_ulogic_vector(data_width_c-1 downto 0);
begin
if (rstn_i = '0') then
shifter.sreg <= (others => '0');
shifter.cnt <= (others => '0');
shifter.cmd_ff <= '0';
if (FAST_SHIFT_EN = true) then
shifter.bs_d_in <= (others => '0');
shifter.bs_a_in <= (others => '0');
end if;
elsif rising_edge(clk_i) then
if rising_edge(clk_i) then
shifter.cmd_ff <= shifter.cmd;
 
-- --------------------------------------------------------------------------------
189,7 → 187,7
if (FAST_SHIFT_EN = false) then
 
if (shifter.start = '1') then -- trigger new shift
shifter.sreg <= opa; -- shift operand
shifter.sreg <= rs1_i; -- shift operand (can only be rs1; opa would also contain pc)
shifter.cnt <= opb(index_size_f(data_width_c)-1 downto 0); -- shift amount
elsif (shifter.run = '1') then -- running shift
-- coarse shift: multiples of 4 --
221,7 → 219,7
 
-- operands and cycle control --
if (shifter.start = '1') then -- trigger new shift
shifter.bs_d_in <= opa; -- shift data
shifter.bs_d_in <= rs1_i; -- shift operand (can only be rs1; opa would also contain pc)
shifter.bs_a_in <= opb(index_size_f(data_width_c)-1 downto 0); -- shift amount
shifter.cnt <= (others => '0');
end if;
298,7 → 296,7
cp_ctrl.cmd_ff <= cp_ctrl.cmd;
if (cp_ctrl.start = '1') then
cp_ctrl.busy <= '1';
elsif ((cp0_valid_i or cp1_valid_i) = '1') then -- cp computation done?
elsif ((cp0_valid_i or cp1_valid_i or cp2_valid_i or cp3_valid_i) = '1') then -- cp computation done?
cp_ctrl.busy <= '0';
end if;
else -- no co-processor(s) implemented
311,29 → 309,31
-- is co-processor operation? --
cp_ctrl.cmd <= '1' when (ctrl_i(ctrl_alu_cmd2_c downto ctrl_alu_cmd0_c) = alu_cmd_cp_c) else '0';
cp_ctrl.start <= '1' when (cp_ctrl.cmd = '1') and (cp_ctrl.cmd_ff = '0') else '0';
cp0_start_o <= '1' when (cp_ctrl.start = '1') and (ctrl_i(ctrl_cp_id_msb_c downto ctrl_cp_id_lsb_c) = cp_sel_muldiv_c) else '0'; -- MULDIV CP
cp1_start_o <= '0'; -- not yet implemented
cp0_start_o <= '1' when (cp_ctrl.start = '1') and (ctrl_i(ctrl_cp_id_msb_c downto ctrl_cp_id_lsb_c) = "00") else '0'; -- CP0: MULDIV CP
cp1_start_o <= '1' when (cp_ctrl.start = '1') and (ctrl_i(ctrl_cp_id_msb_c downto ctrl_cp_id_lsb_c) = "01") else '0'; -- CP1: not implemented yet
cp2_start_o <= '1' when (cp_ctrl.start = '1') and (ctrl_i(ctrl_cp_id_msb_c downto ctrl_cp_id_lsb_c) = "10") else '0'; -- CP2: not implemented yet
cp3_start_o <= '1' when (cp_ctrl.start = '1') and (ctrl_i(ctrl_cp_id_msb_c downto ctrl_cp_id_lsb_c) = "11") else '0'; -- CP3: not implemented yet
 
-- co-processor operation running? --
cp_ctrl.halt <= cp_ctrl.busy or cp_ctrl.start;
 
-- co-processor result --
cp_res <= cp0_data_i or cp1_data_i; -- only the **actaully selected** co-processor should output data != 0
cp_res <= cp0_data_i or cp1_data_i or cp2_data_i or cp3_data_i; -- only the *actually selected* co-processor may output data != 0
 
 
-- ALU Function Select --------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
alu_function_mux: process(ctrl_i, opa, opb, addsub_res, cp_res, cmp_less, shifter.sreg)
alu_function_mux: process(ctrl_i, rs1_i, opb, addsub_res, cp_res, shifter.sreg)
begin
case ctrl_i(ctrl_alu_cmd2_c downto ctrl_alu_cmd0_c) is
when alu_cmd_xor_c => res_o <= opa xor opb;
when alu_cmd_or_c => res_o <= opa or opb;
when alu_cmd_and_c => res_o <= opa and opb;
when alu_cmd_xor_c => res_o <= rs1_i xor opb; -- only rs1 required for logic ops (opa would also contain pc)
when alu_cmd_or_c => res_o <= rs1_i or opb;
when alu_cmd_and_c => res_o <= rs1_i and opb;
when alu_cmd_movb_c => res_o <= opb;
when alu_cmd_addsub_c => res_o <= addsub_res;
when alu_cmd_addsub_c => res_o <= addsub_res(data_width_c-1 downto 0);
when alu_cmd_cp_c => res_o <= cp_res;
when alu_cmd_shift_c => res_o <= shifter.sreg;
when alu_cmd_slt_c => res_o <= (others => '0'); res_o(0) <= cmp_less;
when alu_cmd_slt_c => res_o <= (others => '0'); res_o(0) <= addsub_res(addsub_res'left); -- => carry/borrow
when others => res_o <= opb; -- undefined
end case;
end process alu_function_mux;
/neorv32_cpu_bus.vhd
52,7 → 52,6
port (
-- global control --
clk_i : in std_ulogic; -- global clock, rising edge
rstn_i : in std_ulogic; -- global reset, low-active, async
ctrl_i : in std_ulogic_vector(ctrl_width_c-1 downto 0); -- main control bus
-- cpu instruction fetch interface --
fetch_pc_i : in std_ulogic_vector(data_width_c-1 downto 0); -- PC for instruction fetch
75,7 → 74,6
-- physical memory protection --
pmp_addr_i : in pmp_addr_if_t; -- addresses
pmp_ctrl_i : in pmp_ctrl_if_t; -- configs
priv_mode_i : in std_ulogic_vector(1 downto 0); -- current CPU privilege level
-- instruction bus --
i_bus_addr_o : out std_ulogic_vector(data_width_c-1 downto 0); -- bus access address
i_bus_rdata_i : in std_ulogic_vector(data_width_c-1 downto 0); -- bus read data
105,8 → 103,8
 
-- PMP modes --
constant pmp_off_mode_c : std_ulogic_vector(1 downto 0) := "00"; -- null region (disabled)
constant pmp_tor_mode_c : std_ulogic_vector(1 downto 0) := "01"; -- top of range
constant pmp_na4_mode_c : std_ulogic_vector(1 downto 0) := "10"; -- naturally aligned four-byte region
--constant pmp_tor_mode_c : std_ulogic_vector(1 downto 0) := "01"; -- top of range
--constant pmp_na4_mode_c : std_ulogic_vector(1 downto 0) := "10"; -- naturally aligned four-byte region
constant pmp_napot_mode_c : std_ulogic_vector(1 downto 0) := "11"; -- naturally aligned power-of-two region (>= 8 bytes)
 
-- PMP configuration register bits --
163,7 → 161,7
 
-- Data Interface: Access Address ---------------------------------------------------------
-- -------------------------------------------------------------------------------------------
mem_adr_reg: process(rstn_i, clk_i)
mem_adr_reg: process(clk_i)
begin
if rising_edge(clk_i) then
if (ctrl_i(ctrl_bus_mar_we_c) = '1') then
201,7 → 199,7
begin
if rising_edge(clk_i) then
if (ctrl_i(ctrl_bus_mdo_we_c) = '1') then
mdo <= wdata_i;
mdo <= wdata_i; -- memory data out register (MDO)
end if;
end if;
end process mem_do_reg;
215,8 → 213,12
d_bus_wdata(15 downto 08) <= mdo(07 downto 00);
d_bus_wdata(23 downto 16) <= mdo(07 downto 00);
d_bus_wdata(31 downto 24) <= mdo(07 downto 00);
d_bus_ben <= (others => '0');
d_bus_ben(to_integer(unsigned(mar(1 downto 0)))) <= '1';
case mar(1 downto 0) is
when "00" => d_bus_ben <= "0001";
when "01" => d_bus_ben <= "0010";
when "10" => d_bus_ben <= "0100";
when others => d_bus_ben <= "1000";
end case;
when "01" => -- half-word
d_bus_wdata(31 downto 16) <= mdo(15 downto 00);
d_bus_wdata(15 downto 00) <= mdo(15 downto 00);
237,9 → 239,8
mem_out_buf: process(clk_i)
begin
if rising_edge(clk_i) then
-- memory data in register (MDI) --
if (ctrl_i(ctrl_bus_mdi_we_c) = '1') then
mdi <= d_bus_rdata;
mdi <= d_bus_rdata; -- memory data in register (MDI)
end if;
end if;
end process mem_out_buf;
246,33 → 247,24
 
-- input data alignment and sign extension --
read_align: process(mdi, mar, ctrl_i)
variable signed_v : std_ulogic;
variable byte_in_v : std_ulogic_vector(07 downto 0);
variable hword_in_v : std_ulogic_vector(15 downto 0);
begin
signed_v := not ctrl_i(ctrl_bus_unsigned_c);
case ctrl_i(ctrl_bus_size_msb_c downto ctrl_bus_size_lsb_c) is -- data size
-- sub-word input --
case mar(1 downto 0) is
when "00" => byte_in_v := mdi(07 downto 00); hword_in_v := mdi(15 downto 00); -- byte 0 / half-word 0
when "01" => byte_in_v := mdi(15 downto 08); hword_in_v := mdi(15 downto 00); -- byte 1 / half-word 0
when "10" => byte_in_v := mdi(23 downto 16); hword_in_v := mdi(31 downto 16); -- byte 2 / half-word 1
when others => byte_in_v := mdi(31 downto 24); hword_in_v := mdi(31 downto 16); -- byte 3 / half-word 1
end case;
-- actual data size --
case ctrl_i(ctrl_bus_size_msb_c downto ctrl_bus_size_lsb_c) is
when "00" => -- byte
case mar(1 downto 0) is
when "00" =>
rdata_o(31 downto 08) <= (others => (signed_v and mdi(07)));
rdata_o(07 downto 00) <= mdi(07 downto 00); -- byte 0
when "01" =>
rdata_o(31 downto 08) <= (others => (signed_v and mdi(15)));
rdata_o(07 downto 00) <= mdi(15 downto 08); -- byte 1
when "10" =>
rdata_o(31 downto 08) <= (others => (signed_v and mdi(23)));
rdata_o(07 downto 00) <= mdi(23 downto 16); -- byte 2
when others =>
rdata_o(31 downto 08) <= (others => (signed_v and mdi(31)));
rdata_o(07 downto 00) <= mdi(31 downto 24); -- byte 3
end case;
rdata_o(31 downto 08) <= (others => ((not ctrl_i(ctrl_bus_unsigned_c)) and byte_in_v(7))); -- sign extension
rdata_o(07 downto 00) <= byte_in_v;
when "01" => -- half-word
if (mar(1) = '0') then
rdata_o(31 downto 16) <= (others => (signed_v and mdi(15)));
rdata_o(15 downto 00) <= mdi(15 downto 00); -- low half-word
else
rdata_o(31 downto 16) <= (others => (signed_v and mdi(31)));
rdata_o(15 downto 00) <= mdi(31 downto 16); -- high half-word
end if;
rdata_o(31 downto 16) <= (others => ((not ctrl_i(ctrl_bus_unsigned_c)) and hword_in_v(15))); -- sign extension
rdata_o(15 downto 00) <= hword_in_v; -- high half-word
when others => -- word
rdata_o <= mdi; -- full word
end case;
297,17 → 289,9
 
-- Instruction Fetch Arbiter --------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
ifetch_arbiter: process(rstn_i, clk_i)
ifetch_arbiter: process(clk_i)
begin
if (rstn_i = '0') then
i_arbiter.rd_req <= '0';
i_arbiter.wr_req <= '0';
i_arbiter.err_align <= '0';
i_arbiter.err_bus <= '0';
i_arbiter.timeout <= (others => '0');
elsif rising_edge(clk_i) then
i_arbiter.wr_req <= '0'; -- instruction fetch is read-only
 
if rising_edge(clk_i) then
-- instruction fetch request --
if (i_arbiter.rd_req = '0') then -- idle
i_arbiter.rd_req <= ctrl_i(ctrl_bus_if_c);
318,10 → 302,6
i_arbiter.timeout <= std_ulogic_vector(unsigned(i_arbiter.timeout) - 1);
i_arbiter.err_align <= (i_arbiter.err_align or i_misaligned) and (not ctrl_i(ctrl_bus_ierr_ack_c));
i_arbiter.err_bus <= (i_arbiter.err_bus or (not or_all_f(i_arbiter.timeout)) or i_bus_err_i) and (not ctrl_i(ctrl_bus_ierr_ack_c));
--if (i_arbiter.err_align = '1') or (i_arbiter.err_bus = '1') then -- any error?
-- if (ctrl_i(ctrl_bus_ierr_ack_c) = '1') then -- wait for controller to acknowledge error
-- i_arbiter.rd_req <= '0';
-- end if;
if (i_bus_ack_i = '1') or (ctrl_i(ctrl_bus_ierr_ack_c) = '1') then -- wait for normal termination / CPU abort
i_arbiter.rd_req <= '0';
end if;
329,6 → 309,8
end if;
end process ifetch_arbiter;
 
i_arbiter.wr_req <= '0'; -- instruction fetch is read-only
 
-- cancel bus access --
i_bus_cancel_o <= i_arbiter.rd_req and ctrl_i(ctrl_bus_ierr_ack_c);
 
351,16 → 333,9
 
-- Data Access Arbiter --------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
data_access_arbiter: process(rstn_i, clk_i)
data_access_arbiter: process(clk_i)
begin
if (rstn_i = '0') then
d_arbiter.rd_req <= '0';
d_arbiter.wr_req <= '0';
d_arbiter.err_align <= '0';
d_arbiter.err_bus <= '0';
d_arbiter.timeout <= (others => '0');
elsif rising_edge(clk_i) then
 
if rising_edge(clk_i) then
-- data access request --
if (d_arbiter.wr_req = '0') and (d_arbiter.rd_req = '0') then -- idle
d_arbiter.wr_req <= ctrl_i(ctrl_bus_wr_c);
372,11 → 347,6
d_arbiter.timeout <= std_ulogic_vector(unsigned(d_arbiter.timeout) - 1);
d_arbiter.err_align <= (d_arbiter.err_align or d_misaligned) and (not ctrl_i(ctrl_bus_derr_ack_c));
d_arbiter.err_bus <= (d_arbiter.err_bus or (not or_all_f(d_arbiter.timeout)) or d_bus_err_i) and (not ctrl_i(ctrl_bus_derr_ack_c));
--if (d_arbiter.err_align = '1') or (d_arbiter.err_bus = '1') then -- any error?
-- if (ctrl_i(ctrl_bus_derr_ack_c) = '1') then -- wait for controller to acknowledge error
-- d_arbiter.wr_req <= '0';
-- d_arbiter.rd_req <= '0';
-- end if;
if (d_bus_ack_i = '1') or (ctrl_i(ctrl_bus_derr_ack_c) = '1') then -- wait for normal termination / CPU abort
d_arbiter.wr_req <= '0';
d_arbiter.rd_req <= '0';
456,11 → 426,11
 
 
-- check access type and regions's permissions --
pmp_check_permission: process(pmp, pmp_ctrl_i, priv_mode_i)
pmp_check_permission: process(pmp, pmp_ctrl_i, ctrl_i)
begin
for r in 0 to PMP_NUM_REGIONS-1 loop -- iterate over all regions
if ((priv_mode_i = priv_mode_u_c) or (pmp_ctrl_i(r)(pmp_cfg_l_c) = '1')) and -- user privilege level or locked pmp entry -> enforce permissions also for machine mode
(pmp_ctrl_i(r)(pmp_cfg_ah_c downto pmp_cfg_al_c) /= pmp_off_mode_c) then -- active entry
if ((ctrl_i(ctrl_priv_lvl_msb_c downto ctrl_priv_lvl_lsb_c) = priv_mode_u_c) or (pmp_ctrl_i(r)(pmp_cfg_l_c) = '1')) and -- user privilege level or locked pmp entry -> enforce permissions also for machine mode
(pmp_ctrl_i(r)(pmp_cfg_ah_c downto pmp_cfg_al_c) /= pmp_off_mode_c) then -- active entry
pmp.if_fault(r) <= pmp.i_match(r) and (not pmp_ctrl_i(r)(pmp_cfg_x_c)); -- fetch access match no execute permission
pmp.ld_fault(r) <= pmp.d_match(r) and (not pmp_ctrl_i(r)(pmp_cfg_r_c)); -- load access match no read permission
pmp.st_fault(r) <= pmp.d_match(r) and (not pmp_ctrl_i(r)(pmp_cfg_w_c)); -- store access match no write permission
/neorv32_cpu_control.vhd
73,7 → 73,8
-- data input --
instr_i : in std_ulogic_vector(data_width_c-1 downto 0); -- instruction
cmp_i : in std_ulogic_vector(1 downto 0); -- comparator status
alu_res_i : in std_ulogic_vector(data_width_c-1 downto 0); -- ALU processing result
alu_add_i : in std_ulogic_vector(data_width_c-1 downto 0); -- ALU address result
rs1_i : in std_ulogic_vector(data_width_c-1 downto 0); -- rf source 1
-- data output --
imm_o : out std_ulogic_vector(data_width_c-1 downto 0); -- immediate
fetch_pc_o : out std_ulogic_vector(data_width_c-1 downto 0); -- PC for instruction fetch
91,7 → 92,6
-- physical memory protection --
pmp_addr_o : out pmp_addr_if_t; -- addresses
pmp_ctrl_o : out pmp_ctrl_if_t; -- configs
priv_mode_o : out std_ulogic_vector(1 downto 0); -- current CPU privilege level
-- bus access exceptions --
mar_i : in std_ulogic_vector(data_width_c-1 downto 0); -- memory address register
ma_instr_i : in std_ulogic; -- misaligned instruction address
269,6 → 269,7
signal minstret_msb : std_ulogic;
 
-- illegal instruction check --
signal illegal_opcode_lsbs : std_ulogic; -- if opcode != rv32
signal illegal_instruction : std_ulogic;
signal illegal_register : std_ulogic; -- only for E-extension
signal illegal_compressed : std_ulogic; -- only fir C-extension
359,12 → 360,9
 
-- Instruction Prefetch Buffer (FIFO) -----------------------------------------------------
-- -------------------------------------------------------------------------------------------
instr_prefetch_buffer_ctrl: process(rstn_i, clk_i)
instr_prefetch_buffer: process(clk_i)
begin
if (rstn_i = '0') then
ipb.w_pnt <= (others => '0');
ipb.r_pnt <= (others => '0');
elsif rising_edge(clk_i) then
if rising_edge(clk_i) then
-- write port --
if (ipb.clear = '1') then
ipb.w_pnt <= (others => '0');
371,7 → 369,10
elsif (ipb.we = '1') then
ipb.w_pnt <= std_ulogic_vector(unsigned(ipb.w_pnt) + 1);
end if;
-- read ports --
if (ipb.we = '1') then -- write port
ipb.data(to_integer(unsigned(ipb.w_pnt(ipb.w_pnt'left-1 downto 0)))) <= ipb.wdata;
end if;
-- read port --
if (ipb.clear = '1') then
ipb.r_pnt <= (others => '0');
elsif (ipb.re = '1') then
378,17 → 379,8
ipb.r_pnt <= std_ulogic_vector(unsigned(ipb.r_pnt) + 1);
end if;
end if;
end process instr_prefetch_buffer_ctrl;
end process instr_prefetch_buffer;
 
instr_prefetch_buffer_data: process(clk_i)
begin
if rising_edge(clk_i) then
if (ipb.we = '1') then -- write port
ipb.data(to_integer(unsigned(ipb.w_pnt(ipb.w_pnt'left-1 downto 0)))) <= ipb.wdata;
end if;
end if;
end process instr_prefetch_buffer_data;
 
-- async read --
ipb.rdata <= ipb.data(to_integer(unsigned(ipb.r_pnt(ipb.r_pnt'left-1 downto 0))));
 
450,6 → 442,7
 
-- instruction buffer interface defaults --
i_buf.we <= '0';
-- i_buf = <illegal_compressed_instruction> & <bus_error & alignment_error> & <is_compressed_instrucion> & <32-bit_instruction_word>
i_buf.wdata <= '0' & ipb.rdata(33 downto 32) & '0' & ipb.rdata(31 downto 0);
 
-- state machine --
461,15 → 454,14
 
if (issue_engine.align = '0') or (CPU_EXTENSION_RISCV_C = false) then -- begin check in LOW instruction half-word
if (i_buf.free = '1') then
i_buf.we <= '1';
issue_engine.buf_nxt <= ipb.rdata(33 downto 32) & ipb.rdata(31 downto 16); -- store high half-word - we might need it for an unaligned uncompressed instruction
if (ipb.rdata(1 downto 0) = "11") or (CPU_EXTENSION_RISCV_C = false) then -- uncompressed and "aligned"
ipb.re <= '1';
i_buf.wdata <= '0' & ipb.rdata(33 downto 32) & '0' & ipb.rdata(31 downto 0);
i_buf.we <= '1';
else -- compressed
ipb.re <= '1';
i_buf.wdata <= ci_illegal & ipb.rdata(33 downto 32) & '1' & ci_instr32;
i_buf.we <= '1';
issue_engine.align_nxt <= '1';
end if;
end if;
476,15 → 468,14
 
else -- begin check in HIGH instruction half-word
if (i_buf.free = '1') then
i_buf.we <= '1';
issue_engine.buf_nxt <= ipb.rdata(33 downto 32) & ipb.rdata(31 downto 16); -- store high half-word - we might need it for an unaligned uncompressed instruction
if (issue_engine.buf(1 downto 0) = "11") then -- uncompressed and "unaligned"
ipb.re <= '1';
i_buf.wdata <= '0' & issue_engine.buf(17 downto 16) & '0' & (ipb.rdata(15 downto 0) & issue_engine.buf(15 downto 0));
i_buf.we <= '1';
else -- compressed
--ipb.re <= '1';
-- do not read from ipb here!
i_buf.wdata <= ci_illegal & ipb.rdata(33 downto 32) & '1' & ci_instr32;
i_buf.we <= '1';
issue_engine.align_nxt <= '0';
end if;
end if;
533,11 → 524,9
 
-- Instruction Buffer ---------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
instruction_buffer_ctrl: process(rstn_i, clk_i)
instruction_buffer: process(clk_i)
begin
if (rstn_i = '0') then
i_buf.status <= '0';
elsif rising_edge(clk_i) then
if rising_edge(clk_i) then
if (i_buf.clear = '1') then
i_buf.status <= '0';
elsif (i_buf.we = '1') then
545,17 → 534,11
elsif (i_buf.re = '1') then
i_buf.status <= '0';
end if;
end if;
end process instruction_buffer_ctrl;
 
instruction_buffer_data: process(clk_i)
begin
if rising_edge(clk_i) then
if (i_buf.we = '1') then
i_buf.rdata <= i_buf.wdata;
end if;
end if;
end process instruction_buffer_data;
end process instruction_buffer;
 
-- status --
i_buf.free <= not i_buf.status;
598,9 → 581,6
imm_o(10 downto 05) <= execute_engine.i_reg(30 downto 25);
imm_o(04 downto 01) <= execute_engine.i_reg(24 downto 21);
imm_o(00) <= '0';
when opcode_syscsr_c => -- CSR-immediate (uimm5)
imm_o(31 downto 05) <= (others => '0');
imm_o(04 downto 00) <= execute_engine.i_reg(19 downto 15);
when others => -- I-immediate
imm_o(31 downto 11) <= (others => execute_engine.i_reg(31)); -- sign extension
imm_o(10 downto 05) <= execute_engine.i_reg(30 downto 25);
680,16 → 660,24
 
-- CPU Control Bus Output -----------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
ctrl_output: process(ctrl, fetch_engine, trap_ctrl, bus_fast_ir, execute_engine)
ctrl_output: process(ctrl, fetch_engine, trap_ctrl, bus_fast_ir, execute_engine, csr.privilege)
begin
-- signals from execute engine --
ctrl_o <= ctrl;
-- current privilege level --
ctrl_o(ctrl_priv_lvl_msb_c downto ctrl_priv_lvl_lsb_c) <= csr.privilege;
-- register addresses --
ctrl_o(ctrl_rf_rs1_adr4_c downto ctrl_rf_rs1_adr0_c) <= execute_engine.i_reg(instr_rs1_msb_c downto instr_rs1_lsb_c);
ctrl_o(ctrl_rf_rs2_adr4_c downto ctrl_rf_rs2_adr0_c) <= execute_engine.i_reg(instr_rs2_msb_c downto instr_rs2_lsb_c);
ctrl_o(ctrl_rf_rd_adr4_c downto ctrl_rf_rd_adr0_c) <= execute_engine.i_reg(instr_rd_msb_c downto instr_rd_lsb_c);
-- fast bus access requests --
ctrl_o(ctrl_bus_if_c) <= ctrl(ctrl_bus_if_c) or bus_fast_ir;
ctrl_o(ctrl_bus_if_c) <= bus_fast_ir;
-- bus error control --
ctrl_o(ctrl_bus_ierr_ack_c) <= fetch_engine.bus_err_ack;
ctrl_o(ctrl_bus_derr_ack_c) <= trap_ctrl.env_start_ack;
-- co-processor operation --
ctrl_o(ctrl_cp_cmd2_c downto ctrl_cp_cmd0_c) <= execute_engine.i_reg(instr_funct3_msb_c downto instr_funct3_lsb_c);
-- instruction's function blocks (for co-processors) --
ctrl_o(ctrl_ir_funct12_11_c downto ctrl_ir_funct12_0_c) <= execute_engine.i_reg(instr_funct12_msb_c downto instr_funct12_lsb_c);
ctrl_o(ctrl_ir_funct3_2_c downto ctrl_ir_funct3_0_c) <= execute_engine.i_reg(instr_funct3_msb_c downto instr_funct3_lsb_c);
end process ctrl_output;
 
 
696,9 → 684,10
-- Execute Engine FSM Comb ----------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
execute_engine_fsm_comb: process(execute_engine, fetch_engine, i_buf, trap_ctrl, csr, ctrl, csr_acc_valid,
alu_res_i, alu_wait_i, bus_d_wait_i, ma_load_i, be_load_i, ma_store_i, be_store_i)
alu_add_i, alu_wait_i, bus_d_wait_i, ma_load_i, be_load_i, ma_store_i, be_store_i)
variable alu_immediate_v : std_ulogic;
variable rs1_is_r0_v : std_ulogic;
variable opcode_v : std_ulogic_vector(6 downto 0);
begin
-- arbiter defaults --
execute_engine.state_nxt <= execute_engine.state;
731,11 → 720,11
csr.re_nxt <= '0';
 
-- control defaults --
ctrl_nxt <= (others => '0'); -- all off at first
ctrl_nxt <= (others => '0'); -- default: all off
if (execute_engine.i_reg(instr_opcode_lsb_c+4) = '1') then -- ALU ops
ctrl_nxt(ctrl_alu_unsigned_c) <= execute_engine.i_reg(instr_funct3_lsb_c+0); -- unsigned ALU operation (SLTIU, SLTU)
ctrl_nxt(ctrl_alu_unsigned_c) <= execute_engine.i_reg(instr_funct3_lsb_c+0); -- unsigned ALU operation? (SLTIU, SLTU)
else -- branches
ctrl_nxt(ctrl_alu_unsigned_c) <= execute_engine.i_reg(instr_funct3_lsb_c+1); -- unsigned branches (BLTU, BGEU)
ctrl_nxt(ctrl_alu_unsigned_c) <= execute_engine.i_reg(instr_funct3_lsb_c+1); -- unsigned branches? (BLTU, BGEU)
end if;
ctrl_nxt(ctrl_bus_unsigned_c) <= execute_engine.i_reg(instr_funct3_msb_c); -- unsigned LOAD (LBU, LHU)
ctrl_nxt(ctrl_alu_shift_dir_c) <= execute_engine.i_reg(instr_funct3_msb_c); -- shift direction (left/right)
742,9 → 731,6
ctrl_nxt(ctrl_alu_shift_ar_c) <= execute_engine.i_reg(30); -- is arithmetic shift
ctrl_nxt(ctrl_alu_cmd2_c downto ctrl_alu_cmd0_c) <= alu_cmd_addsub_c; -- default ALU operation: ADD(I)
ctrl_nxt(ctrl_cp_id_msb_c downto ctrl_cp_id_lsb_c) <= cp_sel_muldiv_c; -- only CP0 (=MULDIV) implemented yet
ctrl_nxt(ctrl_rf_rd_adr4_c downto ctrl_rf_rd_adr0_c) <= ctrl(ctrl_rf_rd_adr4_c downto ctrl_rf_rd_adr0_c); -- keep rd addr
ctrl_nxt(ctrl_rf_rs1_adr4_c downto ctrl_rf_rs1_adr0_c) <= ctrl(ctrl_rf_rs1_adr4_c downto ctrl_rf_rs1_adr0_c); -- keep rs1 addr
ctrl_nxt(ctrl_rf_rs2_adr4_c downto ctrl_rf_rs2_adr0_c) <= ctrl(ctrl_rf_rs2_adr4_c downto ctrl_rf_rs2_adr0_c); -- keep rs2 addr
ctrl_nxt(ctrl_bus_size_msb_c downto ctrl_bus_size_lsb_c) <= execute_engine.i_reg(instr_funct3_lsb_c+1 downto instr_funct3_lsb_c); -- mem transfer size
 
-- is immediate ALU operation? --
761,31 → 747,24
-- ------------------------------------------------------------
-- set reg_file's r0 to zero --
if (rf_r0_is_reg_c = true) then -- is r0 implemented as physical register, which has to be set to zero?
ctrl_nxt(ctrl_rf_rd_adr4_c downto ctrl_rf_rd_adr0_c) <= (others => '0'); -- rd addr = r0
ctrl_nxt(ctrl_rf_in_mux_msb_c downto ctrl_rf_in_mux_lsb_c) <= "11"; -- RF input = CSR output (hacky! results zero since there is no valid CSR_read request)
ctrl_nxt(ctrl_rf_r0_we_c) <= '1'; -- allow write access to r0
ctrl_nxt(ctrl_rf_wb_en_c) <= '1'; -- valid RF write-back
ctrl_nxt(ctrl_rf_r0_we_c) <= '1'; -- force RF write access and force rd=r0
end if;
--
execute_engine.state_nxt <= DISPATCH;
 
when DISPATCH => -- Get new command from instruction buffer (I_BUF)
when DISPATCH => -- Get new command from instruction buffer (i_buf)
-- ------------------------------------------------------------
ctrl_nxt(ctrl_rf_rd_adr4_c downto ctrl_rf_rd_adr0_c) <= i_buf.rdata(instr_rd_msb_c downto instr_rd_lsb_c); -- rd addr
ctrl_nxt(ctrl_rf_rs1_adr4_c downto ctrl_rf_rs1_adr0_c) <= i_buf.rdata(instr_rs1_msb_c downto instr_rs1_lsb_c); -- rs1 addr
ctrl_nxt(ctrl_rf_rs2_adr4_c downto ctrl_rf_rs2_adr0_c) <= i_buf.rdata(instr_rs2_msb_c downto instr_rs2_lsb_c); -- rs2 addr
--
if (i_buf.avail = '1') then -- instruction available?
i_buf.re <= '1';
--
execute_engine.is_ci_nxt <= i_buf.rdata(32); -- flag to indicate this is a de-compressed instruction beeing executed
execute_engine.i_reg_nxt <= i_buf.rdata(31 downto 0);
execute_engine.is_ci_nxt <= i_buf.rdata(32); -- flag to indicate this is a de-compressed instruction beeing executed
execute_engine.i_reg_nxt <= i_buf.rdata(31 downto 0);
trap_ctrl.instr_ma <= i_buf.rdata(33); -- misaligned instruction fetch address
trap_ctrl.instr_be <= i_buf.rdata(34); -- bus access fault during instrucion fetch
illegal_compressed <= i_buf.rdata(35); -- invalid decompressed instruction
--
execute_engine.if_rst_nxt <= '0';
--
trap_ctrl.instr_ma <= i_buf.rdata(33); -- misaligned instruction fetch address
trap_ctrl.instr_be <= i_buf.rdata(34); -- bus access fault during instrucion fetch
illegal_compressed <= i_buf.rdata(35); -- invalid decompressed instruction
--
if (execute_engine.if_rst = '0') then -- if there was NO non-linear PC modification
execute_engine.pc_nxt <= execute_engine.next_pc;
end if;
814,7 → 793,8
-- ------------------------------------------------------------
execute_engine.last_pc_nxt <= execute_engine.pc; -- store address of current instruction for commit
--
case execute_engine.i_reg(instr_opcode_msb_c downto instr_opcode_lsb_c) is
opcode_v := execute_engine.i_reg(instr_opcode_msb_c downto instr_opcode_lsb_c+2) & "11"; -- save some bits here, LSBs are always 11 for rv32
case opcode_v is
 
when opcode_alu_c | opcode_alui_c => -- (immediate) ALU operation
-- ------------------------------------------------------------
901,7 → 881,8
 
when opcode_fence_c => -- fence operations
-- ------------------------------------------------------------
-- for simplicity: internally, fence and fence.i perform the same operations (flush and reload of instruction prefetch buffer)
execute_engine.state_nxt <= SYS_WAIT;
-- for simplicity: internally, fence and fence.i perform the same operations (clear and reload instruction prefetch buffer)
-- FENCE.I --
if (CPU_EXTENSION_RISCV_Zifencei = true) then
execute_engine.pc_nxt <= execute_engine.next_pc; -- "refetch" next instruction
915,13 → 896,9
if (execute_engine.i_reg(instr_funct3_lsb_c) = funct3_fence_c(0)) then
ctrl_nxt(ctrl_bus_fence_c) <= '1';
end if;
--
execute_engine.state_nxt <= SYS_WAIT;
 
when opcode_syscsr_c => -- system/csr access
-- ------------------------------------------------------------
ctrl_nxt(ctrl_rf_rs2_adr4_c downto ctrl_rf_rs2_adr0_c) <= ctrl(ctrl_rf_rs1_adr4_c downto ctrl_rf_rs1_adr0_c); -- copy rs1_addr to rs2_addr (for CSR mod)
--
if (execute_engine.i_reg(instr_funct3_msb_c downto instr_funct3_lsb_c) = funct3_env_c) then -- system
case execute_engine.i_reg(instr_funct12_msb_c downto instr_funct12_lsb_c) is
when funct12_ecall_c => -- ECALL
933,7 → 910,7
execute_engine.pc_nxt <= csr.mepc;
fetch_engine.reset <= '1';
execute_engine.if_rst_nxt <= '1'; -- this is a non-linear PC modification
when funct12_wfi_c => -- WFI (CPU sleep)
when funct12_wfi_c => -- WFI
execute_engine.sleep_nxt <= '1'; -- good night
when others => -- undefined
NULL;
952,8 → 929,6
 
when CSR_ACCESS => -- write CSR data to RF, write ALU.res to CSR
-- ------------------------------------------------------------
ctrl_nxt(ctrl_alu_opb_mux_c) <= execute_engine.i_reg(instr_funct3_msb_c); -- OPB = rs2 (which is rs1 here) / immediate
ctrl_nxt(ctrl_alu_cmd2_c downto ctrl_alu_cmd0_c) <= alu_cmd_movb_c; -- actual ALU operation = MOVB
-- CSR write access --
case execute_engine.i_reg(instr_funct3_msb_c downto instr_funct3_lsb_c) is
when funct3_csrrw_c | funct3_csrrwi_c => -- CSRRW(I)
986,7 → 961,7
when BRANCH => -- update PC for taken branches and jumps
-- ------------------------------------------------------------
if (execute_engine.is_jump = '1') or (execute_engine.branch_taken = '1') then
execute_engine.pc_nxt <= alu_res_i; -- branch/jump destination
execute_engine.pc_nxt <= alu_add_i; -- branch/jump destination
fetch_engine.reset <= '1'; -- trigger new instruction fetch from modified PC
execute_engine.if_rst_nxt <= '1'; -- this is a non-linear PC modification
execute_engine.state_nxt <= SYS_WAIT;
1016,7 → 991,7
execute_engine.state_nxt <= SYS_WAIT;
elsif (bus_d_wait_i = '0') then -- wait for bus to finish transaction
if (execute_engine.i_reg(instr_opcode_msb_c-1) = '0') then -- LOAD
ctrl_nxt(ctrl_rf_wb_en_c) <= '1'; -- valid RF write-back
ctrl_nxt(ctrl_rf_wb_en_c) <= '1'; -- valid RF write-back (keep writing back all the time)
end if;
execute_engine.state_nxt <= DISPATCH;
end if;
1111,16 → 1086,25
-- Illegal Instruction Check --------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
illegal_instruction_check: process(execute_engine, csr_acc_valid)
variable opcode_v : std_ulogic_vector(6 downto 0);
begin
-- illegal instructions are checked in the EXECUTE stage
-- the execute engine will only commit valid instructions
-- the execute engine should not commit any illegal instruction
if (execute_engine.state = EXECUTE) then
-- defaults --
illegal_instruction <= '0';
illegal_register <= '0';
 
-- check opcode for rv32 --
if (execute_engine.i_reg(instr_opcode_lsb_c+1 downto instr_opcode_lsb_c) = "11") then
illegal_opcode_lsbs <= '0';
else
illegal_opcode_lsbs <= '1';
end if;
 
-- check instructions --
case execute_engine.i_reg(instr_opcode_msb_c downto instr_opcode_lsb_c) is
opcode_v := execute_engine.i_reg(instr_opcode_msb_c downto instr_opcode_lsb_c+2) & "11";
case opcode_v is
 
-- OPCODE check sufficient: LUI, UIPC, JAL --
when opcode_lui_c | opcode_auipc_c | opcode_jal_c =>
1266,13 → 1250,12
illegal_instruction <= '1';
end if;
 
when others => -- compressed instruction or undefined instruction
if (execute_engine.i_reg(1 downto 0) = "11") then -- undefined/unimplemented opcode
illegal_instruction <= '1';
end if;
when others => -- undefined instruction -> illegal!
illegal_instruction <= '1';
 
end case;
else
illegal_opcode_lsbs <= '0';
illegal_instruction <= '0';
illegal_register <= '0';
end if;
1279,7 → 1262,7
end process illegal_instruction_check;
 
-- any illegal condition? --
trap_ctrl.instr_il <= illegal_instruction or illegal_register or illegal_compressed;
trap_ctrl.instr_il <= illegal_instruction or illegal_opcode_lsbs or illegal_register or illegal_compressed;
 
 
-- ****************************************************************************************************************************
1451,13 → 1434,21
 
-- Control and Status Registers Write Data ------------------------------------------------
-- -------------------------------------------------------------------------------------------
csr_write_data: process(execute_engine.i_reg, csr.rdata, alu_res_i)
csr_write_data: process(execute_engine.i_reg, csr.rdata, rs1_i)
variable csr_operand_v : std_ulogic_vector(data_width_c-1 downto 0);
begin
-- CSR operand source --
if (execute_engine.i_reg(instr_funct3_msb_c) = '1') then -- immediate
csr_operand_v := (others => '0');
csr_operand_v(4 downto 0) := execute_engine.i_reg(19 downto 15);
else -- register
csr_operand_v := rs1_i;
end if;
-- "mini ALU" for CSR update operations --
case execute_engine.i_reg(instr_funct3_lsb_c+1 downto instr_funct3_lsb_c) is
when "10" => csr.wdata <= csr.rdata or alu_res_i; -- CSRRS(I)
when "11" => csr.wdata <= csr.rdata and (not alu_res_i); -- CSRRC(I)
when others => csr.wdata <= alu_res_i; -- CSRRW(I)
when "10" => csr.wdata <= csr.rdata or csr_operand_v; -- CSRRS(I)
when "11" => csr.wdata <= csr.rdata and (not csr_operand_v); -- CSRRC(I)
when others => csr.wdata <= csr_operand_v; -- CSRRW(I)
end case;
end process csr_write_data;
 
1478,7 → 1469,7
csr.mie_mtie <= '0';
csr.mie_firqe <= (others => '0');
csr.mtvec <= (others => '0');
csr.mscratch <= (others => '0');
csr.mscratch <= x"19880704"; -- :)
csr.mepc <= (others => '0');
csr.mcause <= (others => '0');
csr.mtval <= (others => '0');
1492,21 → 1483,26
mcycle_msb <= '0';
minstret_msb <= '0';
elsif rising_edge(clk_i) then
 
-- write access? --
csr.we <= csr.we_nxt;
if (CPU_EXTENSION_RISCV_Zicsr = true) then
 
-- --------------------------------------------------------------------------------
-- CSRs that can be written by application software only
-- --------------------------------------------------------------------------------
if (CPU_EXTENSION_RISCV_Zicsr = true) and (csr.we = '1') then -- manual update
 
-- machine CSRs --
if (execute_engine.i_reg(31 downto 28) = csr_mie_c(11 downto 8)) then
 
-- machine trap setup --
if (execute_engine.i_reg(27 downto 24) = csr_mie_c(7 downto 4)) then
if (execute_engine.i_reg(23 downto 20) = csr_mie_c(3 downto 0)) then -- R/W: mie - machine interrupt-enable register
-- --------------------------------------------------------------------------------
-- CSR access by application software
-- --------------------------------------------------------------------------------
if (csr.we = '1') then -- manual update
case execute_engine.i_reg(instr_csr_id_msb_c downto instr_csr_id_lsb_c) is
-- machine trap setup --
-- --------------------------------------------------------------------
when csr_mstatus_c => -- R/W: mstatus - machine status register
csr.mstatus_mie <= csr.wdata(03);
csr.mstatus_mpie <= csr.wdata(07);
if (CPU_EXTENSION_RISCV_U = true) then -- user mode implemented
csr.mstatus_mpp(0) <= csr.wdata(11) or csr.wdata(12);
csr.mstatus_mpp(1) <= csr.wdata(11) or csr.wdata(12);
end if;
when csr_mie_c => -- R/W: mie - machine interrupt-enable register
csr.mie_msie <= csr.wdata(03); -- machine SW IRQ enable
csr.mie_mtie <= csr.wdata(07); -- machine TIMER IRQ enable
csr.mie_meie <= csr.wdata(11); -- machine EXT IRQ enable
1515,172 → 1511,145
csr.mie_firqe(1) <= csr.wdata(17); -- fast interrupt channel 1
csr.mie_firqe(2) <= csr.wdata(18); -- fast interrupt channel 2
csr.mie_firqe(3) <= csr.wdata(19); -- fast interrupt channel 3
end if;
if (execute_engine.i_reg(23 downto 20) = csr_mtvec_c(3 downto 0)) then -- R/W: mtvec - machine trap-handler base address (for ALL exceptions)
when csr_mtvec_c => -- R/W: mtvec - machine trap-handler base address (for ALL exceptions)
csr.mtvec <= csr.wdata(data_width_c-1 downto 2) & "00"; -- mtvec.MODE=0
end if;
end if;
 
-- machine trap handling --
if (execute_engine.i_reg(27 downto 20) = csr_mscratch_c(7 downto 0)) then -- R/W: mscratch - machine scratch register
csr.mscratch <= csr.wdata;
end if;
-- machine trap handling --
-- --------------------------------------------------------------------
when csr_mscratch_c => -- R/W: mscratch - machine scratch register
csr.mscratch <= csr.wdata;
when csr_mepc_c => -- R/W: mepc - machine exception program counter
csr.mepc <= csr.wdata(data_width_c-1 downto 1) & '0';
when csr_mcause_c => -- R/W: mcause - machine trap cause
csr.mcause <= (others => '0');
csr.mcause(csr.mcause'left) <= csr.wdata(31); -- 1: interrupt, 0: exception
csr.mcause(4 downto 0) <= csr.wdata(4 downto 0); -- identifier
when csr_mtval_c => -- R/W: mtval - machine bad address or instruction
csr.mtval <= csr.wdata;
 
-- machine physical memory protection (pmp) --
if (PMP_USE = true) then
-- pmpcfg --
if (execute_engine.i_reg(27 downto 24) = csr_pmpcfg0_c(7 downto 4)) then
if (PMP_NUM_REGIONS >= 1) then
if (execute_engine.i_reg(23 downto 20) = csr_pmpcfg0_c(3 downto 0)) then -- pmpcfg0
for j in 0 to 3 loop -- bytes in pmpcfg CSR
if ((j+1) <= PMP_NUM_REGIONS) then
if (csr.pmpcfg(0+j)(7) = '0') then -- unlocked pmpcfg access
csr.pmpcfg(0+j)(0) <= csr.wdata(j*8+0); -- R (rights.read)
csr.pmpcfg(0+j)(1) <= csr.wdata(j*8+1); -- W (rights.write)
csr.pmpcfg(0+j)(2) <= csr.wdata(j*8+2); -- X (rights.execute)
csr.pmpcfg(0+j)(3) <= csr.wdata(j*8+3) and csr.wdata(j*8+4); -- A_L
csr.pmpcfg(0+j)(4) <= csr.wdata(j*8+3) and csr.wdata(j*8+4); -- A_H - NAPOT/OFF only
csr.pmpcfg(0+j)(5) <= '0'; -- reserved
csr.pmpcfg(0+j)(6) <= '0'; -- reserved
csr.pmpcfg(0+j)(7) <= csr.wdata(j*8+7); -- L (locked / rights also enforced in m-mode)
end if;
-- physical memory protection - configuration --
-- --------------------------------------------------------------------
when csr_pmpcfg0_c => -- R/W: pmpcfg0 - PMP configuration register 0
if (PMP_USE = true) and (PMP_NUM_REGIONS >= 1) then
for j in 0 to 3 loop -- bytes in pmpcfg CSR
if ((j+1) <= PMP_NUM_REGIONS) then
if (csr.pmpcfg(0+j)(7) = '0') then -- unlocked pmpcfg access
csr.pmpcfg(0+j)(0) <= csr.wdata(j*8+0); -- R (rights.read)
csr.pmpcfg(0+j)(1) <= csr.wdata(j*8+1); -- W (rights.write)
csr.pmpcfg(0+j)(2) <= csr.wdata(j*8+2); -- X (rights.execute)
csr.pmpcfg(0+j)(3) <= csr.wdata(j*8+3) and csr.wdata(j*8+4); -- A_L
csr.pmpcfg(0+j)(4) <= csr.wdata(j*8+3) and csr.wdata(j*8+4); -- A_H - NAPOT/OFF only
csr.pmpcfg(0+j)(5) <= '0'; -- reserved
csr.pmpcfg(0+j)(6) <= '0'; -- reserved
csr.pmpcfg(0+j)(7) <= csr.wdata(j*8+7); -- L (locked / rights also enforced in m-mode)
end if;
end loop; -- j (bytes in CSR)
end if;
end if;
end loop; -- j (bytes in CSR)
end if;
if (PMP_NUM_REGIONS >= 5) then
if (execute_engine.i_reg(23 downto 20) = csr_pmpcfg1_c(3 downto 0)) then -- pmpcfg1
for j in 0 to 3 loop -- bytes in pmpcfg CSR
if ((j+1+4) <= PMP_NUM_REGIONS) then
if (csr.pmpcfg(4+j)(7) = '0') then -- unlocked pmpcfg access
csr.pmpcfg(4+j)(0) <= csr.wdata(j*8+0); -- R (rights.read)
csr.pmpcfg(4+j)(1) <= csr.wdata(j*8+1); -- W (rights.write)
csr.pmpcfg(4+j)(2) <= csr.wdata(j*8+2); -- X (rights.execute)
csr.pmpcfg(4+j)(3) <= csr.wdata(j*8+3) and csr.wdata(j*8+4); -- A_L
csr.pmpcfg(4+j)(4) <= csr.wdata(j*8+3) and csr.wdata(j*8+4); -- A_H - NAPOT/OFF only
csr.pmpcfg(4+j)(5) <= '0'; -- reserved
csr.pmpcfg(4+j)(6) <= '0'; -- reserved
csr.pmpcfg(4+j)(7) <= csr.wdata(j*8+7); -- L (locked / rights also enforced in m-mode)
end if;
when csr_pmpcfg1_c => -- R/W: pmpcfg1 - PMP configuration register 1
if (PMP_USE = true) and (PMP_NUM_REGIONS >= 5) then
for j in 0 to 3 loop -- bytes in pmpcfg CSR
if ((j+1+4) <= PMP_NUM_REGIONS) then
if (csr.pmpcfg(4+j)(7) = '0') then -- unlocked pmpcfg access
csr.pmpcfg(4+j)(0) <= csr.wdata(j*8+0); -- R (rights.read)
csr.pmpcfg(4+j)(1) <= csr.wdata(j*8+1); -- W (rights.write)
csr.pmpcfg(4+j)(2) <= csr.wdata(j*8+2); -- X (rights.execute)
csr.pmpcfg(4+j)(3) <= csr.wdata(j*8+3) and csr.wdata(j*8+4); -- A_L
csr.pmpcfg(4+j)(4) <= csr.wdata(j*8+3) and csr.wdata(j*8+4); -- A_H - NAPOT/OFF only
csr.pmpcfg(4+j)(5) <= '0'; -- reserved
csr.pmpcfg(4+j)(6) <= '0'; -- reserved
csr.pmpcfg(4+j)(7) <= csr.wdata(j*8+7); -- L (locked / rights also enforced in m-mode)
end if;
end loop; -- j (bytes in CSR)
end if;
end if;
end loop; -- j (bytes in CSR)
end if;
end if;
-- pmpaddr --
if (execute_engine.i_reg(27 downto 24) = csr_pmpaddr0_c(7 downto 4)) then
for i in 0 to PMP_NUM_REGIONS-1 loop
if (execute_engine.i_reg(23 downto 20) = std_ulogic_vector(to_unsigned(i, 4))) and (csr.pmpcfg(i)(7) = '0') then -- unlocked pmpaddr access
csr.pmpaddr(i) <= csr.wdata(31 downto 1) & '0'; -- min granularity is 8 bytes -> bit zero cannot be configured
end if;
end loop; -- i (CSRs)
end if;
end if; -- implement PMP at all?
end if;
 
end if;
-- physical memory protection - addresses --
-- --------------------------------------------------------------------
when csr_pmpaddr0_c | csr_pmpaddr1_c | csr_pmpaddr2_c | csr_pmpaddr3_c |
csr_pmpaddr4_c | csr_pmpaddr5_c | csr_pmpaddr6_c | csr_pmpaddr7_c => -- R/W: pmpaddr0..7 - PMP address register 0..7
if (PMP_USE = true) then
for i in 0 to PMP_NUM_REGIONS-1 loop
if (execute_engine.i_reg(23 downto 20) = std_ulogic_vector(to_unsigned(i, 4))) and (csr.pmpcfg(i)(7) = '0') then -- unlocked pmpaddr access
csr.pmpaddr(i) <= csr.wdata(31 downto 1) & '0'; -- min granularity is 8 bytes -> bit zero cannot be configured
end if;
end loop; -- i (CSRs)
end if;
 
-- --------------------------------------------------------------------------------
-- CSRs that can be written by application and hardware (application access)
-- --------------------------------------------------------------------------------
if (CPU_EXTENSION_RISCV_Zicsr = true) and (csr.we = '1') then -- manual update
-- undefined --
-- --------------------------------------------------------------------
when others =>
NULL;
 
-- machine CSRs --
if (execute_engine.i_reg(31 downto 28) = csr_mstatus_c(11 downto 8)) then
end case;
 
-- machine trap setup --
if (execute_engine.i_reg(27 downto 20) = csr_mstatus_c(7 downto 0)) then -- R/W: mstatus - machine status register
csr.mstatus_mie <= csr.wdata(03);
csr.mstatus_mpie <= csr.wdata(07);
--
if (CPU_EXTENSION_RISCV_U = true) then -- user mode implemented
csr.mstatus_mpp(0) <= csr.wdata(11) or csr.wdata(12);
csr.mstatus_mpp(1) <= csr.wdata(11) or csr.wdata(12);
-- --------------------------------------------------------------------------------
-- CSR access by hardware
-- --------------------------------------------------------------------------------
else
 
-- mepc & mtval: machine exception PC & machine trap value register --
-- --------------------------------------------------------------------
if (trap_ctrl.env_start_ack = '1') then -- trap handler starting?
if (trap_ctrl.cause(trap_ctrl.cause'left) = '1') then -- for INTERRUPTS
csr.mepc <= execute_engine.pc(data_width_c-1 downto 1) & '0'; -- this is the CURRENT pc = interrupted instruction
csr.mtval <= (others => '0'); -- mtval is zero for interrupts
else -- for EXCEPTIONS (according to their priority)
csr.mepc <= execute_engine.last_pc(data_width_c-1 downto 1) & '0'; -- this is the LAST pc = last executed instruction
if (trap_ctrl.cause(4 downto 0) = trap_iba_c(4 downto 0)) or -- instruction access error OR
(trap_ctrl.cause(4 downto 0) = trap_ima_c(4 downto 0)) or -- misaligned instruction address OR
(trap_ctrl.cause(4 downto 0) = trap_brk_c(4 downto 0)) or -- breakpoint OR
(trap_ctrl.cause(4 downto 0) = trap_menv_c(4 downto 0)) then -- environment call
csr.mtval <= execute_engine.pc(data_width_c-1 downto 1) & '0'; -- address of faulting instruction
elsif (trap_ctrl.cause(4 downto 0) = trap_iil_c(4 downto 0)) then -- illegal instruction
csr.mtval <= execute_engine.i_reg_last; -- faulting instruction itself
else -- load/store misalignments/access errors
csr.mtval <= mar_i; -- faulting data access address
end if;
end if;
end if;
 
-- machine trap handling --
if (execute_engine.i_reg(27 downto 24) = csr_mepc_c(7 downto 4)) then
if (execute_engine.i_reg(23 downto 20) = csr_mepc_c(3 downto 0)) then -- R/W: mepc - machine exception program counter
csr.mepc <= csr.wdata(data_width_c-1 downto 1) & '0';
-- mstatus: context switch --
-- --------------------------------------------------------------------
if (trap_ctrl.env_start_ack = '1') then -- ENTER: trap handler starting?
-- trap ID code --
csr.mcause <= (others => '0');
csr.mcause(csr.mcause'left) <= trap_ctrl.cause(trap_ctrl.cause'left); -- 1: interrupt, 0: exception
csr.mcause(4 downto 0) <= trap_ctrl.cause(4 downto 0); -- identifier
--
csr.mstatus_mie <= '0'; -- disable interrupts
csr.mstatus_mpie <= csr.mstatus_mie; -- buffer previous mie state
if (CPU_EXTENSION_RISCV_U = true) then -- implement user mode
csr.privilege <= priv_mode_m_c; -- execute trap in machine mode
csr.mstatus_mpp <= csr.privilege; -- buffer previous privilege mode
end if;
if (execute_engine.i_reg(23 downto 20) = csr_mcause_c(3 downto 0)) then -- R/W: mcause - machine trap cause
csr.mcause <= (others => '0');
csr.mcause(csr.mcause'left) <= csr.wdata(31); -- 1: interrupt, 0: exception
csr.mcause(4 downto 0) <= csr.wdata(4 downto 0); -- identifier
elsif (trap_ctrl.env_end = '1') then -- EXIT: return from exception
csr.mstatus_mie <= csr.mstatus_mpie; -- restore global IRQ enable flag
csr.mstatus_mpie <= '1';
if (CPU_EXTENSION_RISCV_U = true) then -- implement user mode
csr.privilege <= csr.mstatus_mpp; -- go back to previous privilege mode
csr.mstatus_mpp <= priv_mode_u_c;
end if;
if (execute_engine.i_reg(23 downto 20) = csr_mtval_c(3 downto 0)) then -- R/W: mtval - machine bad address or instruction
csr.mtval <= csr.wdata;
end if;
end if;
 
end if;
 
-- --------------------------------------------------------------------------------
-- CSRs that can be written by application and hardware (hardware access)
-- --------------------------------------------------------------------------------
else -- hardware update
 
-- mepc & mtval: machine exception PC & machine trap value register --
if (trap_ctrl.env_start_ack = '1') then -- trap handler starting?
if (trap_ctrl.cause(trap_ctrl.cause'left) = '1') then -- for INTERRUPTS (is mcause(31))
csr.mepc <= execute_engine.pc(data_width_c-1 downto 1) & '0'; -- this is the CURRENT pc = interrupted instruction
csr.mtval <= (others => '0'); -- mtval is zero for interrupts
else -- for EXCEPTIONS (according to their priority)
csr.mepc <= execute_engine.last_pc(data_width_c-1 downto 1) & '0'; -- this is the LAST pc = last executed instruction
if (trap_ctrl.cause(4 downto 0) = trap_iba_c(4 downto 0)) or -- instruction access error OR
(trap_ctrl.cause(4 downto 0) = trap_ima_c(4 downto 0)) or -- misaligned instruction address OR
(trap_ctrl.cause(4 downto 0) = trap_brk_c(4 downto 0)) or -- breakpoint OR
(trap_ctrl.cause(4 downto 0) = trap_menv_c(4 downto 0)) then -- environment call
csr.mtval <= execute_engine.pc(data_width_c-1 downto 1) & '0'; -- address of faulting instruction
elsif (trap_ctrl.cause(4 downto 0) = trap_iil_c(4 downto 0)) then -- illegal instruction
csr.mtval <= execute_engine.i_reg_last; -- faulting instruction itself
else -- load/store misalignments/access errors
csr.mtval <= mar_i; -- faulting data access address
end if;
-- user mode NOT implemented --
if (CPU_EXTENSION_RISCV_U = false) then
csr.privilege <= priv_mode_m_c;
csr.mstatus_mpp <= priv_mode_m_c;
end if;
end if;
 
-- mstatus: context switch --
if (trap_ctrl.env_start_ack = '1') then -- ENTER: trap handler starting?
-- trap ID code --
csr.mcause <= (others => '0');
csr.mcause(csr.mcause'left) <= trap_ctrl.cause(trap_ctrl.cause'left); -- 1: interrupt, 0: exception
csr.mcause(4 downto 0) <= trap_ctrl.cause(4 downto 0); -- identifier
--
csr.mstatus_mie <= '0'; -- disable interrupts
csr.mstatus_mpie <= csr.mstatus_mie; -- buffer previous mie state
if (CPU_EXTENSION_RISCV_U = true) then -- implement user mode
csr.privilege <= priv_mode_m_c; -- execute trap in machine mode
csr.mstatus_mpp <= csr.privilege; -- buffer previous privilege mode
end if;
elsif (trap_ctrl.env_end = '1') then -- EXIT: return from exception
csr.mstatus_mie <= csr.mstatus_mpie; -- restore global IRQ enable flag
csr.mstatus_mpie <= '1';
if (CPU_EXTENSION_RISCV_U = true) then -- implement user mode
csr.privilege <= csr.mstatus_mpp; -- go back to previous privilege mode
csr.mstatus_mpp <= priv_mode_u_c;
end if;
end if;
-- user mode NOT implemented --
if (CPU_EXTENSION_RISCV_U = false) then
csr.privilege <= priv_mode_m_c;
csr.mstatus_mpp <= priv_mode_m_c;
end if;
end if;
end if; -- hardware csr access
 
-- --------------------------------------------------------------------------------
-- Counter CSRs
-- --------------------------------------------------------------------------------
if (CPU_EXTENSION_RISCV_Zicsr = true) then
 
-- mcycle (cycle) --
mcycle_msb <= csr.mcycle(csr.mcycle'left);
if (csr.we = '1') and (execute_engine.i_reg(instr_csr_id_msb_c downto instr_csr_id_lsb_c) = csr_mcycle_c) then -- write access
csr.mcycle(31 downto 0) <= csr.wdata;
csr.mcycle(32) <= '0';
csr.mcycle <= '0' & csr.wdata;
mcycle_msb <= '0';
elsif (execute_engine.sleep = '0') then -- automatic update (if CPU is not in sleep mode)
csr.mcycle <= std_ulogic_vector(unsigned(csr.mcycle) + 1);
mcycle_msb <= csr.mcycle(csr.mcycle'left);
end if;
 
-- mcycleh (cycleh) --
1691,12 → 1660,12
end if;
 
-- minstret (instret) --
minstret_msb <= csr.minstret(csr.minstret'left);
if (csr.we = '1') and (execute_engine.i_reg(instr_csr_id_msb_c downto instr_csr_id_lsb_c) = csr_minstret_c) then -- write access
csr.minstret(31 downto 0) <= csr.wdata;
csr.minstret(32) <= '0';
elsif (execute_engine.state_prev /= EXECUTE) and (execute_engine.state = EXECUTE) then -- automatic update
csr.minstret <= '0' & csr.wdata;
minstret_msb <= '0';
elsif (execute_engine.state_prev /= EXECUTE) and (execute_engine.state = EXECUTE) then -- automatic update (if CPU commits an instruction)
csr.minstret <= std_ulogic_vector(unsigned(csr.minstret) + 1);
minstret_msb <= csr.minstret(csr.minstret'left);
end if;
 
-- minstreth (instreth) --
1705,14 → 1674,12
elsif ((minstret_msb xor csr.minstret(csr.minstret'left)) = '1') then -- automatic update
csr.minstreth <= std_ulogic_vector(unsigned(csr.minstreth) + 1);
end if;
 
end if;
end if;
end process csr_write_access;
 
-- CPU's current privilege level --
priv_mode_o <= csr.privilege;
 
-- PMP output --
-- PMP configuration output to bus unit --
pmp_output: process(csr)
begin
pmp_addr_o <= (others => (others => '0'));
1743,6 → 1710,8
csr.rdata(11) <= csr.mstatus_mpp(0); -- MPP: machine previous privilege mode low
csr.rdata(12) <= csr.mstatus_mpp(1); -- MPP: machine previous privilege mode high
when csr_misa_c => -- R/-: misa - ISA and extensions
csr.rdata(00) <= '0'; -- A CPU extension
csr.rdata(01) <= '0'; -- B CPU extension
csr.rdata(02) <= bool_to_ulogic_f(CPU_EXTENSION_RISCV_C); -- C CPU extension
csr.rdata(04) <= bool_to_ulogic_f(CPU_EXTENSION_RISCV_E); -- E CPU extension
csr.rdata(08) <= not bool_to_ulogic_f(CPU_EXTENSION_RISCV_E); -- I CPU extension (if not E)
/neorv32_cpu_cp_muldiv.vhd
4,6 → 4,7
-- # Multiplier and Divider unit. Implements the RISC-V RV32-M CPU extension. #
-- # Multiplier core (signed/unsigned) uses serial algorithm. -> 32+4 cycles latency #
-- # Divider core (unsigned) uses serial algorithm. -> 32+6 cycles latency #
-- # Multiplications can be mapped to DSP block when FAST_MUL_EN = true. #
-- # ********************************************************************************************* #
-- # BSD 3-Clause License #
-- # #
52,8 → 53,8
clk_i : in std_ulogic; -- global clock, rising edge
rstn_i : in std_ulogic; -- global reset, low-active, async
ctrl_i : in std_ulogic_vector(ctrl_width_c-1 downto 0); -- main control bus
start_i : in std_ulogic; -- trigger operation
-- data input --
start_i : in std_ulogic; -- trigger operation
rs1_i : in std_ulogic_vector(data_width_c-1 downto 0); -- rf source 1
rs2_i : in std_ulogic_vector(data_width_c-1 downto 0); -- rf source 2
-- result and status --
106,7 → 107,6
begin
if (rstn_i = '0') then
state <= IDLE;
cp_op <= (others => '0');
opx <= (others => '0');
opy <= (others => '0');
cnt <= (others => '0');
125,7 → 125,6
opx <= rs1_i;
opy <= rs2_i;
if (start_i = '1') then
cp_op <= ctrl_i(ctrl_cp_cmd2_c downto ctrl_cp_cmd0_c);
state <= DECODE;
end if;
 
189,6 → 188,9
end if;
end process coprocessor_ctrl;
 
-- co-processor command --
cp_op <= ctrl_i(ctrl_ir_funct3_2_c downto ctrl_ir_funct3_0_c);
 
-- operation --
operation <= '1' when (cp_op = cp_op_div_c) or (cp_op = cp_op_divu_c) or (cp_op = cp_op_rem_c) or (cp_op = cp_op_remu_c) else '0';
 
199,11 → 201,12
opy_is_signed <= '1' when (cp_op = cp_op_mulh_c) or (cp_op = cp_op_div_c) or (cp_op = cp_op_rem_c) else '0';
 
 
-- Multiplier Core (signed) ---------------------------------------------------------------
-- Multiplier Core (signed/unsigned) ------------------------------------------------------
-- -------------------------------------------------------------------------------------------
multiplier_core: process(clk_i)
begin
if rising_edge(clk_i) then
-- ---------------------------------------------------------
if (FAST_MUL_EN = false) then -- use small iterative computation
if (start = '1') then -- start new multiplication
mul_product(63 downto 32) <= (others => '0');
212,6 → 215,7
mul_product(63 downto 31) <= mul_do_add(32 downto 0);
mul_product(30 downto 00) <= mul_product(31 downto 1);
end if;
-- ---------------------------------------------------------
else -- use direct approach using (several!) DSP blocks
if (start = '1') then
mul_op_x <= signed((opx(opx'left) and opx_is_signed) & opx);
/neorv32_cpu_decompressor.vhd
116,10 → 116,10
 
when "000" => -- Illegal_instruction, C.ADDI4SPN
-- ----------------------------------------------------------------------------------------------------------
if (ci_instr16_i(12 downto 2) = "00000000000") then -- "official" illegal instruction
if (ci_instr16_i(12 downto 2) = "00000000000") then -- "official illegal instruction"
ci_illegal_o <= '1';
 
else -- C.ADDI4SPN
else
-- C.ADDI4SPN
ci_instr32_o(instr_opcode_msb_c downto instr_opcode_lsb_c) <= opcode_alui_c;
ci_instr32_o(instr_rs1_msb_c downto instr_rs1_lsb_c) <= "00010"; -- stack pointer
ci_instr32_o(instr_rd_msb_c downto instr_rd_lsb_c) <= "01" & ci_instr16_i(ci_rd_3_msb_c downto ci_rd_3_lsb_c);
/neorv32_cpu_regfile.vhd
1,10 → 1,11
-- #################################################################################################
-- # << NEORV32 - CPU Register File >> #
-- # << NEORV32 - CPU Data Register File >> #
-- # ********************************************************************************************* #
-- # General purpose data registers. 32 entries for normal mode, 16 entries for embedded mode when #
-- # RISC-V "E" extension is enabled. Register zero (r0/x0) is a normal physical registers, that #
-- # has to be initialized to zero by the CPU control system. For normal operations, x0 cannot be #
-- # written. #
-- # General purpose data register file. 32 entries for normal mode (I), 16 entries for embedded #
-- # mode (E) when RISC-V "E" extension is enabled. Register zero (r0) is a normal physical #
-- # registers, that has to be initialized to zero by the CPU control system. For normal #
-- # operations r0 cannot be written. The register file uses synchronous reads. Hence it can be #
-- # mapped to FPGA block RAM. #
-- # ********************************************************************************************* #
-- # BSD 3-Clause License #
-- # #
71,22 → 72,10
signal reg_file : reg_file_t;
signal reg_file_emb : reg_file_emb_t;
signal rf_write_data : std_ulogic_vector(data_width_c-1 downto 0); -- actual write-back data
signal valid_wr : std_ulogic; -- writing not to r0
signal rd_is_r0 : std_ulogic; -- writing to r0?
signal rf_we : std_ulogic;
signal dst_addr : std_ulogic_vector(4 downto 0); -- destination address
 
 
-- attributes - these are *NOT mandatory*; just for footprint / timing optimization --
-- -------------------------------------------------------------------------------- --
 
-- lattice radiant --
attribute syn_ramstyle : string;
attribute syn_ramstyle of reg_file : signal is "no_rw_check";
attribute syn_ramstyle of reg_file_emb : signal is "no_rw_check";
 
-- intel quartus prime --
attribute ramstyle : string;
attribute ramstyle of reg_file : signal is "no_rw_check";
attribute ramstyle of reg_file_emb : signal is "no_rw_check";
 
begin
 
-- Input mux ------------------------------------------------------------------------------
101,11 → 90,17
end case;
end process input_mux;
 
-- only write if destination is not x0; except we are forcing a r0 write access --
valid_wr <= or_all_f(ctrl_i(ctrl_rf_rd_adr4_c downto ctrl_rf_rd_adr0_c)) or ctrl_i(ctrl_rf_r0_we_c) when (CPU_EXTENSION_RISCV_E = false) else
or_all_f(ctrl_i(ctrl_rf_rd_adr3_c downto ctrl_rf_rd_adr0_c)) or ctrl_i(ctrl_rf_r0_we_c);
-- check if we are writing to x0 --
rd_is_r0 <= not or_all_f(ctrl_i(ctrl_rf_rd_adr4_c downto ctrl_rf_rd_adr0_c)) when (CPU_EXTENSION_RISCV_E = false) else
not or_all_f(ctrl_i(ctrl_rf_rd_adr3_c downto ctrl_rf_rd_adr0_c));
 
-- valid RF write access --
rf_we <= (ctrl_i(ctrl_rf_wb_en_c) and (not rd_is_r0)) or ctrl_i(ctrl_rf_r0_we_c);
 
-- destination address --
dst_addr <= ctrl_i(ctrl_rf_rd_adr4_c downto ctrl_rf_rd_adr0_c) when (ctrl_i(ctrl_rf_r0_we_c) = '0') else (others => '0'); -- force dst=r0?
 
 
-- Register file read/write access --------------------------------------------------------
-- -------------------------------------------------------------------------------------------
rf_access: process(clk_i)
112,21 → 107,19
begin
if rising_edge(clk_i) then -- sync read and write
if (CPU_EXTENSION_RISCV_E = false) then -- normal register file with 32 entries
-- write --
if (ctrl_i(ctrl_rf_wb_en_c) = '1') and ((valid_wr = '1') or (rf_r0_is_reg_c = false)) then -- valid write-back
reg_file(to_integer(unsigned(ctrl_i(ctrl_rf_rd_adr4_c downto ctrl_rf_rd_adr0_c)))) <= rf_write_data;
if (rf_we = '1') then
reg_file(to_integer(unsigned(dst_addr(4 downto 0)))) <= rf_write_data;
else -- read
rs1_o <= reg_file(to_integer(unsigned(ctrl_i(ctrl_rf_rs1_adr4_c downto ctrl_rf_rs1_adr0_c))));
rs2_o <= reg_file(to_integer(unsigned(ctrl_i(ctrl_rf_rs2_adr4_c downto ctrl_rf_rs2_adr0_c))));
end if;
-- read --
rs1_o <= reg_file(to_integer(unsigned(ctrl_i(ctrl_rf_rs1_adr4_c downto ctrl_rf_rs1_adr0_c))));
rs2_o <= reg_file(to_integer(unsigned(ctrl_i(ctrl_rf_rs2_adr4_c downto ctrl_rf_rs2_adr0_c))));
else -- embedded register file with 16 entries
-- write --
if (ctrl_i(ctrl_rf_wb_en_c) = '1') and ((valid_wr = '1') or (rf_r0_is_reg_c = false)) then -- valid write-back
reg_file_emb(to_integer(unsigned(ctrl_i(ctrl_rf_rd_adr3_c downto ctrl_rf_rd_adr0_c)))) <= rf_write_data;
if (rf_we = '1') then
reg_file_emb(to_integer(unsigned(dst_addr(3 downto 0)))) <= rf_write_data;
else -- read
rs1_o <= reg_file_emb(to_integer(unsigned(ctrl_i(ctrl_rf_rs1_adr3_c downto ctrl_rf_rs1_adr0_c))));
rs2_o <= reg_file_emb(to_integer(unsigned(ctrl_i(ctrl_rf_rs2_adr3_c downto ctrl_rf_rs2_adr0_c))));
end if;
-- read --
rs1_o <= reg_file_emb(to_integer(unsigned(ctrl_i(ctrl_rf_rs1_adr3_c downto ctrl_rf_rs1_adr0_c))));
rs2_o <= reg_file_emb(to_integer(unsigned(ctrl_i(ctrl_rf_rs2_adr3_c downto ctrl_rf_rs2_adr0_c))));
end if;
end if;
end process rf_access;
/neorv32_package.vhd
38,22 → 38,22
 
package neorv32_package is
 
-- Architecture Configuration -------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
constant ispace_base_c : std_ulogic_vector(31 downto 0) := x"00000000"; -- default instruction memory address space base address
constant dspace_base_c : std_ulogic_vector(31 downto 0) := x"80000000"; -- default data memory address space base address
constant bus_timeout_c : natural := 127; -- cycles after which a valid bus access will timeout and trigger an access exception
constant wb_pipe_mode_c : boolean := false; -- false: classic/standard wishbone mode, true: pipelined wishbone mode
constant ipb_entries_c : natural := 2; -- entries in instruction prefetch buffer, must be a power of 2, default=2
constant rf_r0_is_reg_c : boolean := true; -- reg_file.r0 is a physical register that has to be initialized to zero by the CPU HW
 
-- Architecture Constants -----------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
constant data_width_c : natural := 32; -- data width - do not change!
constant hw_version_c : std_ulogic_vector(31 downto 0) := x"01040600"; -- no touchy!
constant hw_version_c : std_ulogic_vector(31 downto 0) := x"01040606"; -- no touchy!
constant pmp_max_r_c : natural := 8; -- max PMP regions - FIXED!
constant archid_c : natural := 19; -- official NEORV32 architecture ID - hands off!
 
-- Architecture Configuration -------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
constant ispace_base_c : std_ulogic_vector(data_width_c-1 downto 0) := x"00000000"; -- default instruction memory address space base address
constant dspace_base_c : std_ulogic_vector(data_width_c-1 downto 0) := x"80000000"; -- default data memory address space base address
constant bus_timeout_c : natural := 127; -- cycles after which a valid bus access will timeout and triggers an access exception
constant wb_pipe_mode_c : boolean := false; -- false: classic/standard wishbone mode, true: pipelined wishbone mode (better timing)
constant ipb_entries_c : natural := 2; -- entries in instruction prefetch buffer, must be a power of 2, default=2
constant rf_r0_is_reg_c : boolean := true; -- reg_file.r0 is a physical register that has to be initialized to zero by the CPU HW
 
-- Helper Functions -----------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
function index_size_f(input : natural) return natural;
66,6 → 66,7
function xnor_all_f(a : std_ulogic_vector) return std_ulogic;
function to_hexchar_f(input : std_ulogic_vector(3 downto 0)) return character;
function bit_rev_f(input : std_ulogic_vector) return std_ulogic_vector;
function is_power_of_two_f(input : natural) return boolean;
 
-- Internal Types -------------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
160,57 → 161,73
-- Main Control Bus -----------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
-- register file --
constant ctrl_rf_in_mux_lsb_c : natural := 0; -- input source select lsb (00=ALU, 01=MEM)
constant ctrl_rf_in_mux_msb_c : natural := 1; -- input source select msb (10=PC, 11=CSR)
constant ctrl_rf_rs1_adr0_c : natural := 2; -- source register 1 address bit 0
constant ctrl_rf_rs1_adr1_c : natural := 3; -- source register 1 address bit 1
constant ctrl_rf_rs1_adr2_c : natural := 4; -- source register 1 address bit 2
constant ctrl_rf_rs1_adr3_c : natural := 5; -- source register 1 address bit 3
constant ctrl_rf_rs1_adr4_c : natural := 6; -- source register 1 address bit 4
constant ctrl_rf_rs2_adr0_c : natural := 7; -- source register 2 address bit 0
constant ctrl_rf_rs2_adr1_c : natural := 8; -- source register 2 address bit 1
constant ctrl_rf_rs2_adr2_c : natural := 9; -- source register 2 address bit 2
constant ctrl_rf_rs2_adr3_c : natural := 10; -- source register 2 address bit 3
constant ctrl_rf_rs2_adr4_c : natural := 11; -- source register 2 address bit 4
constant ctrl_rf_rd_adr0_c : natural := 12; -- destiantion register address bit 0
constant ctrl_rf_rd_adr1_c : natural := 13; -- destiantion register address bit 1
constant ctrl_rf_rd_adr2_c : natural := 14; -- destiantion register address bit 2
constant ctrl_rf_rd_adr3_c : natural := 15; -- destiantion register address bit 3
constant ctrl_rf_rd_adr4_c : natural := 16; -- destiantion register address bit 4
constant ctrl_rf_wb_en_c : natural := 17; -- write back enable
constant ctrl_rf_r0_we_c : natural := 18; -- allow write access to r0 (zero)
constant ctrl_rf_in_mux_lsb_c : natural := 0; -- input source select lsb (00=ALU, 01=MEM)
constant ctrl_rf_in_mux_msb_c : natural := 1; -- input source select msb (10=PC, 11=CSR)
constant ctrl_rf_rs1_adr0_c : natural := 2; -- source register 1 address bit 0
constant ctrl_rf_rs1_adr1_c : natural := 3; -- source register 1 address bit 1
constant ctrl_rf_rs1_adr2_c : natural := 4; -- source register 1 address bit 2
constant ctrl_rf_rs1_adr3_c : natural := 5; -- source register 1 address bit 3
constant ctrl_rf_rs1_adr4_c : natural := 6; -- source register 1 address bit 4
constant ctrl_rf_rs2_adr0_c : natural := 7; -- source register 2 address bit 0
constant ctrl_rf_rs2_adr1_c : natural := 8; -- source register 2 address bit 1
constant ctrl_rf_rs2_adr2_c : natural := 9; -- source register 2 address bit 2
constant ctrl_rf_rs2_adr3_c : natural := 10; -- source register 2 address bit 3
constant ctrl_rf_rs2_adr4_c : natural := 11; -- source register 2 address bit 4
constant ctrl_rf_rd_adr0_c : natural := 12; -- destiantion register address bit 0
constant ctrl_rf_rd_adr1_c : natural := 13; -- destiantion register address bit 1
constant ctrl_rf_rd_adr2_c : natural := 14; -- destiantion register address bit 2
constant ctrl_rf_rd_adr3_c : natural := 15; -- destiantion register address bit 3
constant ctrl_rf_rd_adr4_c : natural := 16; -- destiantion register address bit 4
constant ctrl_rf_wb_en_c : natural := 17; -- write back enable
constant ctrl_rf_r0_we_c : natural := 18; -- force write access and force rd=r0
-- alu --
constant ctrl_alu_cmd0_c : natural := 19; -- ALU command bit 0
constant ctrl_alu_cmd1_c : natural := 20; -- ALU command bit 1
constant ctrl_alu_cmd2_c : natural := 21; -- ALU command bit 2
constant ctrl_alu_addsub_c : natural := 22; -- 0=ADD, 1=SUB
constant ctrl_alu_opa_mux_c : natural := 23; -- operand A select (0=rs1, 1=PC)
constant ctrl_alu_opb_mux_c : natural := 24; -- operand B select (0=rs2, 1=IMM)
constant ctrl_alu_unsigned_c : natural := 25; -- is unsigned ALU operation
constant ctrl_alu_shift_dir_c : natural := 26; -- shift direction (0=left, 1=right)
constant ctrl_alu_shift_ar_c : natural := 27; -- is arithmetic shift
constant ctrl_alu_cmd0_c : natural := 19; -- ALU command bit 0
constant ctrl_alu_cmd1_c : natural := 20; -- ALU command bit 1
constant ctrl_alu_cmd2_c : natural := 21; -- ALU command bit 2
constant ctrl_alu_addsub_c : natural := 22; -- 0=ADD, 1=SUB
constant ctrl_alu_opa_mux_c : natural := 23; -- operand A select (0=rs1, 1=PC)
constant ctrl_alu_opb_mux_c : natural := 24; -- operand B select (0=rs2, 1=IMM)
constant ctrl_alu_unsigned_c : natural := 25; -- is unsigned ALU operation
constant ctrl_alu_shift_dir_c : natural := 26; -- shift direction (0=left, 1=right)
constant ctrl_alu_shift_ar_c : natural := 27; -- is arithmetic shift
-- bus interface --
constant ctrl_bus_size_lsb_c : natural := 28; -- transfer size lsb (00=byte, 01=half-word)
constant ctrl_bus_size_msb_c : natural := 29; -- transfer size msb (10=word, 11=?)
constant ctrl_bus_rd_c : natural := 30; -- read data request
constant ctrl_bus_wr_c : natural := 31; -- write data request
constant ctrl_bus_if_c : natural := 32; -- instruction fetch request
constant ctrl_bus_mar_we_c : natural := 33; -- memory address register write enable
constant ctrl_bus_mdo_we_c : natural := 34; -- memory data out register write enable
constant ctrl_bus_mdi_we_c : natural := 35; -- memory data in register write enable
constant ctrl_bus_unsigned_c : natural := 36; -- is unsigned load
constant ctrl_bus_ierr_ack_c : natural := 37; -- acknowledge instruction fetch bus exceptions
constant ctrl_bus_derr_ack_c : natural := 38; -- acknowledge data access bus exceptions
constant ctrl_bus_fence_c : natural := 39; -- executed fence operation
constant ctrl_bus_fencei_c : natural := 40; -- executed fencei operation
constant ctrl_bus_size_lsb_c : natural := 28; -- transfer size lsb (00=byte, 01=half-word)
constant ctrl_bus_size_msb_c : natural := 29; -- transfer size msb (10=word, 11=?)
constant ctrl_bus_rd_c : natural := 30; -- read data request
constant ctrl_bus_wr_c : natural := 31; -- write data request
constant ctrl_bus_if_c : natural := 32; -- instruction fetch request
constant ctrl_bus_mar_we_c : natural := 33; -- memory address register write enable
constant ctrl_bus_mdo_we_c : natural := 34; -- memory data out register write enable
constant ctrl_bus_mdi_we_c : natural := 35; -- memory data in register write enable
constant ctrl_bus_unsigned_c : natural := 36; -- is unsigned load
constant ctrl_bus_ierr_ack_c : natural := 37; -- acknowledge instruction fetch bus exceptions
constant ctrl_bus_derr_ack_c : natural := 38; -- acknowledge data access bus exceptions
constant ctrl_bus_fence_c : natural := 39; -- executed fence operation
constant ctrl_bus_fencei_c : natural := 40; -- executed fencei operation
-- co-processors --
constant ctrl_cp_id_lsb_c : natural := 41; -- cp select ID lsb
constant ctrl_cp_id_msb_c : natural := 42; -- cp select ID msb
constant ctrl_cp_cmd0_c : natural := 43; -- cp command bit 0
constant ctrl_cp_cmd1_c : natural := 44; -- cp command bit 1
constant ctrl_cp_cmd2_c : natural := 45; -- cp command bit 2
constant ctrl_cp_id_lsb_c : natural := 41; -- cp select ID lsb
constant ctrl_cp_id_msb_c : natural := 42; -- cp select ID msb
-- current privilege level --
constant ctrl_priv_lvl_lsb_c : natural := 43; -- privilege level lsb
constant ctrl_priv_lvl_msb_c : natural := 44; -- privilege level msb
-- instruction's control blocks --
constant ctrl_ir_funct3_0_c : natural := 45; -- funct3 bit 0
constant ctrl_ir_funct3_1_c : natural := 46; -- funct3 bit 1
constant ctrl_ir_funct3_2_c : natural := 47; -- funct3 bit 2
constant ctrl_ir_funct12_0_c : natural := 48; -- funct12 bit 0
constant ctrl_ir_funct12_1_c : natural := 49; -- funct12 bit 1
constant ctrl_ir_funct12_2_c : natural := 50; -- funct12 bit 2
constant ctrl_ir_funct12_3_c : natural := 51; -- funct12 bit 3
constant ctrl_ir_funct12_4_c : natural := 52; -- funct12 bit 4
constant ctrl_ir_funct12_5_c : natural := 53; -- funct12 bit 5
constant ctrl_ir_funct12_6_c : natural := 54; -- funct12 bit 6
constant ctrl_ir_funct12_7_c : natural := 55; -- funct12 bit 7
constant ctrl_ir_funct12_8_c : natural := 56; -- funct12 bit 8
constant ctrl_ir_funct12_9_c : natural := 57; -- funct12 bit 9
constant ctrl_ir_funct12_10_c : natural := 58; -- funct12 bit 10
constant ctrl_ir_funct12_11_c : natural := 59; -- funct12 bit 11
-- control bus size --
constant ctrl_width_c : natural := 46; -- control bus size
constant ctrl_width_c : natural := 60; -- control bus size
 
-- ALU Comparator Bus ---------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
308,63 → 325,66
 
-- RISC-V CSR Addresses -------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
constant csr_mstatus_c : std_ulogic_vector(11 downto 0) := x"300"; -- mstatus
constant csr_misa_c : std_ulogic_vector(11 downto 0) := x"301"; -- misa
constant csr_mie_c : std_ulogic_vector(11 downto 0) := x"304"; -- mie
constant csr_mtvec_c : std_ulogic_vector(11 downto 0) := x"305"; -- mtvec
constant csr_mstatus_c : std_ulogic_vector(11 downto 0) := x"300"; -- mstatus
constant csr_misa_c : std_ulogic_vector(11 downto 0) := x"301"; -- misa
constant csr_mie_c : std_ulogic_vector(11 downto 0) := x"304"; -- mie
constant csr_mtvec_c : std_ulogic_vector(11 downto 0) := x"305"; -- mtvec
--
constant csr_mscratch_c : std_ulogic_vector(11 downto 0) := x"340"; -- mscratch
constant csr_mepc_c : std_ulogic_vector(11 downto 0) := x"341"; -- mepc
constant csr_mcause_c : std_ulogic_vector(11 downto 0) := x"342"; -- mcause
constant csr_mtval_c : std_ulogic_vector(11 downto 0) := x"343"; -- mtval
constant csr_mip_c : std_ulogic_vector(11 downto 0) := x"344"; -- mip
constant csr_mscratch_c : std_ulogic_vector(11 downto 0) := x"340"; -- mscratch
constant csr_mepc_c : std_ulogic_vector(11 downto 0) := x"341"; -- mepc
constant csr_mcause_c : std_ulogic_vector(11 downto 0) := x"342"; -- mcause
constant csr_mtval_c : std_ulogic_vector(11 downto 0) := x"343"; -- mtval
constant csr_mip_c : std_ulogic_vector(11 downto 0) := x"344"; -- mip
--
constant csr_pmpcfg0_c : std_ulogic_vector(11 downto 0) := x"3a0"; -- pmpcfg0
constant csr_pmpcfg1_c : std_ulogic_vector(11 downto 0) := x"3a1"; -- pmpcfg1
constant csr_pmpcfg0_c : std_ulogic_vector(11 downto 0) := x"3a0"; -- pmpcfg0
constant csr_pmpcfg1_c : std_ulogic_vector(11 downto 0) := x"3a1"; -- pmpcfg1
--
constant csr_pmpaddr0_c : std_ulogic_vector(11 downto 0) := x"3b0"; -- pmpaddr0
constant csr_pmpaddr1_c : std_ulogic_vector(11 downto 0) := x"3b1"; -- pmpaddr1
constant csr_pmpaddr2_c : std_ulogic_vector(11 downto 0) := x"3b2"; -- pmpaddr2
constant csr_pmpaddr3_c : std_ulogic_vector(11 downto 0) := x"3b3"; -- pmpaddr3
constant csr_pmpaddr4_c : std_ulogic_vector(11 downto 0) := x"3b4"; -- pmpaddr4
constant csr_pmpaddr5_c : std_ulogic_vector(11 downto 0) := x"3b5"; -- pmpaddr5
constant csr_pmpaddr6_c : std_ulogic_vector(11 downto 0) := x"3b6"; -- pmpaddr6
constant csr_pmpaddr7_c : std_ulogic_vector(11 downto 0) := x"3b7"; -- pmpaddr7
constant csr_pmpaddr0_c : std_ulogic_vector(11 downto 0) := x"3b0"; -- pmpaddr0
constant csr_pmpaddr1_c : std_ulogic_vector(11 downto 0) := x"3b1"; -- pmpaddr1
constant csr_pmpaddr2_c : std_ulogic_vector(11 downto 0) := x"3b2"; -- pmpaddr2
constant csr_pmpaddr3_c : std_ulogic_vector(11 downto 0) := x"3b3"; -- pmpaddr3
constant csr_pmpaddr4_c : std_ulogic_vector(11 downto 0) := x"3b4"; -- pmpaddr4
constant csr_pmpaddr5_c : std_ulogic_vector(11 downto 0) := x"3b5"; -- pmpaddr5
constant csr_pmpaddr6_c : std_ulogic_vector(11 downto 0) := x"3b6"; -- pmpaddr6
constant csr_pmpaddr7_c : std_ulogic_vector(11 downto 0) := x"3b7"; -- pmpaddr7
--
constant csr_mcycle_c : std_ulogic_vector(11 downto 0) := x"b00"; -- mcycle
constant csr_minstret_c : std_ulogic_vector(11 downto 0) := x"b02"; -- minstret
constant csr_mcycle_c : std_ulogic_vector(11 downto 0) := x"b00"; -- mcycle
constant csr_minstret_c : std_ulogic_vector(11 downto 0) := x"b02"; -- minstret
--
constant csr_mcycleh_c : std_ulogic_vector(11 downto 0) := x"b80"; -- mcycleh
constant csr_minstreth_c : std_ulogic_vector(11 downto 0) := x"b82"; -- minstreth
constant csr_mcycleh_c : std_ulogic_vector(11 downto 0) := x"b80"; -- mcycleh
constant csr_minstreth_c : std_ulogic_vector(11 downto 0) := x"b82"; -- minstreth
--
constant csr_cycle_c : std_ulogic_vector(11 downto 0) := x"c00"; -- cycle
constant csr_time_c : std_ulogic_vector(11 downto 0) := x"c01"; -- time
constant csr_instret_c : std_ulogic_vector(11 downto 0) := x"c02"; -- instret
constant csr_cycle_c : std_ulogic_vector(11 downto 0) := x"c00"; -- cycle
constant csr_time_c : std_ulogic_vector(11 downto 0) := x"c01"; -- time
constant csr_instret_c : std_ulogic_vector(11 downto 0) := x"c02"; -- instret
--
constant csr_cycleh_c : std_ulogic_vector(11 downto 0) := x"c80"; -- cycleh
constant csr_timeh_c : std_ulogic_vector(11 downto 0) := x"c81"; -- timeh
constant csr_instreth_c : std_ulogic_vector(11 downto 0) := x"c82"; -- instreth
constant csr_cycleh_c : std_ulogic_vector(11 downto 0) := x"c80"; -- cycleh
constant csr_timeh_c : std_ulogic_vector(11 downto 0) := x"c81"; -- timeh
constant csr_instreth_c : std_ulogic_vector(11 downto 0) := x"c82"; -- instreth
--
constant csr_mvendorid_c : std_ulogic_vector(11 downto 0) := x"f11"; -- mvendorid
constant csr_marchid_c : std_ulogic_vector(11 downto 0) := x"f12"; -- marchid
constant csr_mimpid_c : std_ulogic_vector(11 downto 0) := x"f13"; -- mimpid
constant csr_mhartid_c : std_ulogic_vector(11 downto 0) := x"f14"; -- mhartid
constant csr_mvendorid_c : std_ulogic_vector(11 downto 0) := x"f11"; -- mvendorid
constant csr_marchid_c : std_ulogic_vector(11 downto 0) := x"f12"; -- marchid
constant csr_mimpid_c : std_ulogic_vector(11 downto 0) := x"f13"; -- mimpid
constant csr_mhartid_c : std_ulogic_vector(11 downto 0) := x"f14"; -- mhartid
--
constant csr_mzext_c : std_ulogic_vector(11 downto 0) := x"fc0"; -- mzext
constant csr_mzext_c : std_ulogic_vector(11 downto 0) := x"fc0"; -- mzext (custom)
 
-- Co-Processor Operations ----------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
-- cp ids --
constant cp_sel_muldiv_c : std_ulogic_vector(1 downto 0) := "00"; -- MULDIV CP
constant cp_sel_muldiv_c : std_ulogic_vector(1 downto 0) := "00"; -- MULDIV
constant cp_sel_bitmanip_c : std_ulogic_vector(1 downto 0) := "01"; -- BITMANIP
--constant cp_sel_reserved_c : std_ulogic_vector(1 downto 0) := "10"; -- reserved
--constant cp_sel_reserved_c : std_ulogic_vector(1 downto 0) := "11"; -- reserved
-- muldiv cp --
constant cp_op_mul_c : std_ulogic_vector(2 downto 0) := "000"; -- mul
constant cp_op_mulh_c : std_ulogic_vector(2 downto 0) := "001"; -- mulh
constant cp_op_mulhsu_c : std_ulogic_vector(2 downto 0) := "010"; -- mulhsu
constant cp_op_mulhu_c : std_ulogic_vector(2 downto 0) := "011"; -- mulhu
constant cp_op_div_c : std_ulogic_vector(2 downto 0) := "100"; -- div
constant cp_op_divu_c : std_ulogic_vector(2 downto 0) := "101"; -- divu
constant cp_op_rem_c : std_ulogic_vector(2 downto 0) := "110"; -- rem
constant cp_op_remu_c : std_ulogic_vector(2 downto 0) := "111"; -- remu
constant cp_op_mul_c : std_ulogic_vector(2 downto 0) := "000"; -- mul
constant cp_op_mulh_c : std_ulogic_vector(2 downto 0) := "001"; -- mulh
constant cp_op_mulhsu_c : std_ulogic_vector(2 downto 0) := "010"; -- mulhsu
constant cp_op_mulhu_c : std_ulogic_vector(2 downto 0) := "011"; -- mulhu
constant cp_op_div_c : std_ulogic_vector(2 downto 0) := "100"; -- div
constant cp_op_divu_c : std_ulogic_vector(2 downto 0) := "101"; -- divu
constant cp_op_rem_c : std_ulogic_vector(2 downto 0) := "110"; -- rem
constant cp_op_remu_c : std_ulogic_vector(2 downto 0) := "111"; -- remu
 
-- ALU Function Codes ---------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
448,6 → 468,7
CLOCK_FREQUENCY : natural := 0; -- clock frequency of clk_i in Hz
BOOTLOADER_USE : boolean := true; -- implement processor-internal bootloader?
USER_CODE : std_ulogic_vector(31 downto 0) := x"00000000"; -- custom user code
HW_THREAD_ID : std_ulogic_vector(31 downto 0) := (others => '0'); -- hardware thread id (hartid)
-- RISC-V CPU Extensions --
CPU_EXTENSION_RISCV_C : boolean := false; -- implement compressed extension?
CPU_EXTENSION_RISCV_E : boolean := false; -- implement embedded RF extension?
488,6 → 509,7
clk_i : in std_ulogic := '0'; -- global clock, rising edge
rstn_i : in std_ulogic := '0'; -- global reset, low-active, async
-- Wishbone bus interface --
wb_tag_o : out std_ulogic_vector(02 downto 0); -- tag
wb_adr_o : out std_ulogic_vector(31 downto 0); -- address
wb_dat_i : in std_ulogic_vector(31 downto 0) := (others => '0'); -- read data
wb_dat_o : out std_ulogic_vector(31 downto 0); -- write data
498,7 → 520,6
wb_ack_i : in std_ulogic := '0'; -- transfer acknowledge
wb_err_i : in std_ulogic := '0'; -- transfer error
-- Advanced memory control signals (available if MEM_EXT_USE = true) --
priv_o : out std_ulogic_vector(1 downto 0); -- current CPU privilege level
fence_o : out std_ulogic; -- indicates an executed FENCE operation
fencei_o : out std_ulogic; -- indicates an executed FENCEI operation
-- GPIO --
529,8 → 550,8
component neorv32_cpu
generic (
-- General --
HW_THREAD_ID : std_ulogic_vector(31 downto 0):= (others => '0'); -- hardware thread id
CPU_BOOT_ADDR : std_ulogic_vector(31 downto 0):= (others => '0'); -- cpu boot address
HW_THREAD_ID : std_ulogic_vector(31 downto 0) := (others => '0'); -- hardware thread id
CPU_BOOT_ADDR : std_ulogic_vector(31 downto 0) := (others => '0'); -- cpu boot address
-- RISC-V CPU Extensions --
CPU_EXTENSION_RISCV_C : boolean := false; -- implement compressed extension?
CPU_EXTENSION_RISCV_E : boolean := false; -- implement embedded RF extension?
616,7 → 637,8
-- data input --
instr_i : in std_ulogic_vector(data_width_c-1 downto 0); -- instruction
cmp_i : in std_ulogic_vector(1 downto 0); -- comparator status
alu_res_i : in std_ulogic_vector(data_width_c-1 downto 0); -- ALU processing result
alu_add_i : in std_ulogic_vector(data_width_c-1 downto 0); -- ALU address result
rs1_i : in std_ulogic_vector(data_width_c-1 downto 0); -- rf source 1
-- data output --
imm_o : out std_ulogic_vector(data_width_c-1 downto 0); -- immediate
fetch_pc_o : out std_ulogic_vector(data_width_c-1 downto 0); -- PC for instruction fetch
634,7 → 656,6
-- physical memory protection --
pmp_addr_o : out pmp_addr_if_t; -- addresses
pmp_ctrl_o : out pmp_ctrl_if_t; -- configs
priv_mode_o : out std_ulogic_vector(1 downto 0); -- current CPU privilege level
-- bus access exceptions --
mar_i : in std_ulogic_vector(data_width_c-1 downto 0); -- memory address register
ma_instr_i : in std_ulogic; -- misaligned instruction address
687,6 → 708,8
-- data output --
cmp_o : out std_ulogic_vector(1 downto 0); -- comparator status
res_o : out std_ulogic_vector(data_width_c-1 downto 0); -- ALU result
add_o : out std_ulogic_vector(data_width_c-1 downto 0); -- address computation result
opb_o : out std_ulogic_vector(data_width_c-1 downto 0); -- ALU operand B
-- co-processor interface --
cp0_start_o : out std_ulogic; -- trigger co-processor 0
cp0_data_i : in std_ulogic_vector(data_width_c-1 downto 0); -- co-processor 0 result
694,6 → 717,12
cp1_start_o : out std_ulogic; -- trigger co-processor 1
cp1_data_i : in std_ulogic_vector(data_width_c-1 downto 0); -- co-processor 1 result
cp1_valid_i : in std_ulogic; -- co-processor 1 result valid
cp2_start_o : out std_ulogic; -- trigger co-processor 2
cp2_data_i : in std_ulogic_vector(data_width_c-1 downto 0); -- co-processor 2 result
cp2_valid_i : in std_ulogic; -- co-processor 2 result valid
cp3_start_o : out std_ulogic; -- trigger co-processor 3
cp3_data_i : in std_ulogic_vector(data_width_c-1 downto 0); -- co-processor 3 result
cp3_valid_i : in std_ulogic; -- co-processor 3 result valid
-- status --
wait_o : out std_ulogic -- busy due to iterative processing units
);
710,8 → 739,8
clk_i : in std_ulogic; -- global clock, rising edge
rstn_i : in std_ulogic; -- global reset, low-active, async
ctrl_i : in std_ulogic_vector(ctrl_width_c-1 downto 0); -- main control bus
start_i : in std_ulogic; -- trigger operation
-- data input --
start_i : in std_ulogic; -- trigger operation
rs1_i : in std_ulogic_vector(data_width_c-1 downto 0); -- rf source 1
rs2_i : in std_ulogic_vector(data_width_c-1 downto 0); -- rf source 2
-- result and status --
733,7 → 762,6
port (
-- global control --
clk_i : in std_ulogic; -- global clock, rising edge
rstn_i : in std_ulogic; -- global reset, low-active, async
ctrl_i : in std_ulogic_vector(ctrl_width_c-1 downto 0); -- main control bus
-- cpu instruction fetch interface --
fetch_pc_i : in std_ulogic_vector(data_width_c-1 downto 0); -- PC for instruction fetch
756,7 → 784,6
-- physical memory protection --
pmp_addr_i : in pmp_addr_if_t; -- addresses
pmp_ctrl_i : in pmp_ctrl_if_t; -- configs
priv_mode_i : in std_ulogic_vector(1 downto 0); -- current CPU privilege level
-- instruction bus --
i_bus_addr_o : out std_ulogic_vector(data_width_c-1 downto 0); -- bus access address
i_bus_rdata_i : in std_ulogic_vector(data_width_c-1 downto 0); -- bus read data
814,6 → 841,7
cb_bus_ack_o : out std_ulogic; -- bus transfer acknowledge
cb_bus_err_o : out std_ulogic; -- bus transfer error
-- peripheral bus --
p_bus_src_o : out std_ulogic; -- access source: 0 = A, 1 = B
p_bus_addr_o : out std_ulogic_vector(data_width_c-1 downto 0); -- bus access address
p_bus_rdata_i : in std_ulogic_vector(data_width_c-1 downto 0); -- bus read data
p_bus_wdata_o : out std_ulogic_vector(data_width_c-1 downto 0); -- bus write data
1080,6 → 1108,7
clk_i : in std_ulogic; -- global clock line
rstn_i : in std_ulogic; -- global reset line, low-active
-- host access --
src_i : in std_ulogic; -- access type (0: data, 1:instruction)
addr_i : in std_ulogic_vector(31 downto 0); -- address
rden_i : in std_ulogic; -- read enable
wren_i : in std_ulogic; -- write enable
1089,7 → 1118,9
cancel_i : in std_ulogic; -- cancel current bus transaction
ack_o : out std_ulogic; -- transfer acknowledge
err_o : out std_ulogic; -- transfer error
priv_i : in std_ulogic_vector(1 downto 0); -- current CPU privilege level
-- wishbone interface --
wb_tag_o : out std_ulogic_vector(2 downto 0); -- tag
wb_adr_o : out std_ulogic_vector(31 downto 0); -- address
wb_dat_i : in std_ulogic_vector(31 downto 0); -- read data
wb_dat_o : out std_ulogic_vector(31 downto 0); -- write data
1326,4 → 1357,15
return output_v;
end function bit_rev_f;
 
-- Function: Test if input number is a power of two ---------------------------------------
-- -------------------------------------------------------------------------------------------
function is_power_of_two_f(input : natural) return boolean is
begin
if ((input / 2) /= 0) and ((input mod 2) = 0) then
return true;
else
return false;
end if;
end function is_power_of_two_f;
 
end neorv32_package;
/neorv32_spi.vhd
1,8 → 1,9
-- #################################################################################################
-- # << NEORV32 - Serial Peripheral Interface Controller (SPI) >> #
-- # ********************************************************************************************* #
-- # Frame format: 8/16/24/32-bit RTX, MSB or LSB first, 2 clock modes, 8 clock speeds, #
-- # 8 dedicated CS lines (low-active). Interrupt: SPI_transfer_done #
-- # Frame format: 8/16/24/32-bit receive/transmit data, always MSB first, 2 clock modes, #
-- # 8 clock speeds (derived from system clock), 8 dedicated chip-select lines (low-active). #
-- # Interrupt: SPI_transfer_done #
-- # ********************************************************************************************* #
-- # BSD 3-Clause License #
-- # #
86,12 → 87,10
constant ctrl_spi_prsc0_c : natural := 10; -- r/w: spi prescaler select bit 0
constant ctrl_spi_prsc1_c : natural := 11; -- r/w: spi prescaler select bit 1
constant ctrl_spi_prsc2_c : natural := 12; -- r/w: spi prescaler select bit 2
constant ctrl_spi_dir_c : natural := 13; -- r/w: shift direction (0: MSB first, 1: LSB first)
constant ctrl_spi_size0_c : natural := 14; -- r/w: data size (00: 8-bit, 01: 16-bit)
constant ctrl_spi_size1_c : natural := 15; -- r/w: data size (10: 24-bit, 11: 32-bit)
constant ctrl_spi_size0_c : natural := 13; -- r/w: data size (00: 8-bit, 01: 16-bit)
constant ctrl_spi_size1_c : natural := 14; -- r/w: data size (10: 24-bit, 11: 32-bit)
constant ctrl_spi_irq_en_c : natural := 15; -- r/w: spi transmission done interrupt enable
--
constant ctrl_spi_irq_en_c : natural := 16; -- r/w: spi transmission done interrupt enable
--
constant ctrl_spi_busy_c : natural := 31; -- r/-: spi transceiver is busy
 
-- access control --
101,22 → 100,24
signal rden : std_ulogic; -- read enable
 
-- accessible regs --
signal ctrl : std_ulogic_vector(16 downto 0);
signal tx_data : std_ulogic_vector(31 downto 0);
signal ctrl : std_ulogic_vector(15 downto 0);
signal tx_data_reg : std_ulogic_vector(31 downto 0);
signal rx_data : std_ulogic_vector(31 downto 0);
 
-- clock generator --
signal spi_clk : std_ulogic;
 
-- spi transceiver --
signal spi_start : std_ulogic;
signal spi_busy : std_ulogic;
signal spi_state0 : std_ulogic;
signal spi_state1 : std_ulogic;
signal spi_rtx_sreg : std_ulogic_vector(31 downto 0);
signal spi_rx_data : std_ulogic_vector(31 downto 0);
signal spi_bitcnt : std_ulogic_vector(05 downto 0);
signal spi_sdi_ff0 : std_ulogic;
signal spi_sdi_ff1 : std_ulogic;
signal spi_start : std_ulogic;
signal spi_busy : std_ulogic;
signal spi_state0 : std_ulogic;
signal spi_state1 : std_ulogic;
signal spi_rtx_sreg : std_ulogic_vector(31 downto 0);
signal spi_rx_data : std_ulogic_vector(31 downto 0);
signal spi_bitcnt : std_ulogic_vector(05 downto 0);
signal spi_bitcnt_max : std_ulogic_vector(05 downto 0);
signal spi_sdi_ff0 : std_ulogic;
signal spi_sdi_ff1 : std_ulogic;
 
begin
 
134,17 → 135,15
begin
if rising_edge(clk_i) then
ack_o <= acc_en and (rden_i or wren_i);
-- write access --
spi_start <= '0';
-- write access --
if (wren = '1') then
-- control regsiter --
if (addr = spi_ctrl_addr_c) then
if (addr = spi_ctrl_addr_c) then -- control
ctrl <= data_i(ctrl'left downto 0);
end if;
-- data regsiter --
if (addr = spi_rtx_addr_c) then
tx_data <= data_i;
spi_start <= '1';
if (addr = spi_rtx_addr_c) then -- tx data
tx_data_reg <= data_i;
spi_start <= '1';
end if;
end if;
-- read access --
165,29 → 164,20
data_o(ctrl_spi_prsc0_c) <= ctrl(ctrl_spi_prsc0_c);
data_o(ctrl_spi_prsc1_c) <= ctrl(ctrl_spi_prsc1_c);
data_o(ctrl_spi_prsc2_c) <= ctrl(ctrl_spi_prsc2_c);
data_o(ctrl_spi_dir_c) <= ctrl(ctrl_spi_dir_c);
data_o(ctrl_spi_size0_c) <= ctrl(ctrl_spi_size0_c);
data_o(ctrl_spi_size1_c) <= ctrl(ctrl_spi_size1_c);
--
data_o(ctrl_spi_irq_en_c) <= ctrl(ctrl_spi_irq_en_c);
--
data_o(ctrl_spi_busy_c) <= spi_busy;
else -- spi_rtx_addr_c
data_o <= spi_rx_data;
data_o <= rx_data;
end if;
end if;
end if;
end process rw_access;
 
-- direct CS (output is low-active) --
spi_csn_o(0) <= '0' when (ctrl(ctrl_spi_cs0_c) = '1') else '1';
spi_csn_o(1) <= '0' when (ctrl(ctrl_spi_cs1_c) = '1') else '1';
spi_csn_o(2) <= '0' when (ctrl(ctrl_spi_cs2_c) = '1') else '1';
spi_csn_o(3) <= '0' when (ctrl(ctrl_spi_cs3_c) = '1') else '1';
spi_csn_o(4) <= '0' when (ctrl(ctrl_spi_cs4_c) = '1') else '1';
spi_csn_o(5) <= '0' when (ctrl(ctrl_spi_cs5_c) = '1') else '1';
spi_csn_o(6) <= '0' when (ctrl(ctrl_spi_cs6_c) = '1') else '1';
spi_csn_o(7) <= '0' when (ctrl(ctrl_spi_cs7_c) = '1') else '1';
-- direct chip-select (CS) (output is low-active) --
spi_csn_o(7 downto 0) <= not ctrl(ctrl_spi_cs7_c downto ctrl_spi_cs0_c);
 
 
-- Clock Selection ------------------------------------------------------------------------
211,61 → 201,50
-- serial engine --
spi_irq_o <= '0';
if (spi_state0 = '0') or (ctrl(ctrl_spi_en_c) = '0') then -- idle or disabled
case ctrl(ctrl_spi_size1_c downto ctrl_spi_size0_c) is
when "00" => spi_bitcnt <= "001000"; -- 8-bit mode
when "01" => spi_bitcnt <= "010000"; -- 16-bit mode
when "10" => spi_bitcnt <= "011000"; -- 24-bit mode
when others => spi_bitcnt <= "100000"; -- 32-bit mode
end case;
-- --------------------------------------------------------------
spi_bitcnt <= (others => '0');
spi_state1 <= '0';
spi_sdo_o <= '0';
spi_sck_o <= '0';
spi_sdo_o <= '0';
spi_sck_o <= '0';
if (ctrl(ctrl_spi_en_c) = '0') then -- disabled
spi_busy <= '0';
elsif (spi_start = '1') then -- start new transmission
case ctrl(ctrl_spi_size1_c downto ctrl_spi_size0_c) is
when "00" => spi_rtx_sreg <= tx_data(07 downto 0) & x"000000"; -- 8-bit mode
when "01" => spi_rtx_sreg <= tx_data(15 downto 0) & x"0000"; -- 16-bit mode
when "10" => spi_rtx_sreg <= tx_data(23 downto 0) & x"00"; -- 24-bit mode
when others => spi_rtx_sreg <= tx_data(31 downto 0); -- 32-bit mode
end case;
spi_busy <= '1';
spi_rtx_sreg <= tx_data_reg;
spi_busy <= '1';
end if;
spi_state0 <= spi_busy and spi_clk; -- start with next new clock pulse
 
else -- transmission in progress
-- --------------------------------------------------------------
if (spi_state1 = '0') then -- first half of transmission
-- --------------------------------------------------------------
spi_sck_o <= ctrl(ctrl_spi_cpha_c);
 
spi_sck_o <= ctrl(ctrl_spi_cpha_c);
if (ctrl(ctrl_spi_dir_c) = '0') then
spi_sdo_o <= spi_rtx_sreg(31); -- MSB first
else
spi_sdo_o <= spi_rtx_sreg(0); -- LSB first
end if;
case ctrl(ctrl_spi_size1_c downto ctrl_spi_size0_c) is
when "00" => spi_sdo_o <= spi_rtx_sreg(07); -- 8-bit mode
when "01" => spi_sdo_o <= spi_rtx_sreg(15); -- 16-bit mode
when "10" => spi_sdo_o <= spi_rtx_sreg(23); -- 24-bit mode
when others => spi_sdo_o <= spi_rtx_sreg(31); -- 32-bit mode
end case;
 
if (spi_clk = '1') then
spi_state1 <= '1';
if (ctrl(ctrl_spi_cpha_c) = '0') then
if (ctrl(ctrl_spi_dir_c) = '0') then
spi_rtx_sreg <= spi_rtx_sreg(30 downto 0) & spi_sdi_ff1; -- MSB first
else
spi_rtx_sreg <= spi_sdi_ff1 & spi_rtx_sreg(31 downto 1); -- LSB first
end if;
spi_rtx_sreg <= spi_rtx_sreg(30 downto 0) & spi_sdi_ff1;
end if;
spi_bitcnt <= std_ulogic_vector(unsigned(spi_bitcnt) - 1);
spi_bitcnt <= std_ulogic_vector(unsigned(spi_bitcnt) + 1);
end if;
 
else -- second half of transmission
-- --------------------------------------------------------------
spi_sck_o <= not ctrl(ctrl_spi_cpha_c);
 
spi_sck_o <= not ctrl(ctrl_spi_cpha_c);
if (spi_clk = '1') then
spi_state1 <= '0';
if (ctrl(ctrl_spi_cpha_c) = '1') then
if (ctrl(ctrl_spi_dir_c) = '0') then
spi_rtx_sreg <= spi_rtx_sreg(30 downto 0) & spi_sdi_ff1; -- MSB first
else
spi_rtx_sreg <= spi_sdi_ff1 & spi_rtx_sreg(31 downto 1); -- LSB first
end if;
spi_rtx_sreg <= spi_rtx_sreg(30 downto 0) & spi_sdi_ff1;
end if;
if (spi_bitcnt = "000000") then
if (spi_bitcnt = spi_bitcnt_max) then
spi_state0 <= '0';
spi_busy <= '0';
spi_irq_o <= ctrl(ctrl_spi_irq_en_c);
276,16 → 255,31
end if;
end process spi_rtx_unit;
 
-- SPI receiver output --
spi_rx_output: process(ctrl, spi_rtx_sreg)
 
-- RTX Data size ------------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
data_size: process(ctrl)
begin
case ctrl(ctrl_spi_size1_c downto ctrl_spi_size0_c) is
when "00" => spi_rx_data <= x"000000" & spi_rtx_sreg(7 downto 0); -- 8-bit mode
when "01" => spi_rx_data <= x"0000" & spi_rtx_sreg(15 downto 0); -- 16-bit mode
when "10" => spi_rx_data <= x"00" & spi_rtx_sreg(23 downto 0); -- 24-bit mode
when others => spi_rx_data <= spi_rtx_sreg(31 downto 0); -- 32-bit mode
when "00" => spi_bitcnt_max <= "001000"; -- 8-bit mode
when "01" => spi_bitcnt_max <= "010000"; -- 16-bit mode
when "10" => spi_bitcnt_max <= "011000"; -- 24-bit mode
when others => spi_bitcnt_max <= "100000"; -- 32-bit mode
end case;
end process spi_rx_output;
end process data_size;
 
 
-- RX-Data Masking ------------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
rx_mapping: process(ctrl, spi_rtx_sreg)
begin
case ctrl(ctrl_spi_size1_c downto ctrl_spi_size0_c) is
when "00" => rx_data <= x"000000" & spi_rtx_sreg(07 downto 0); -- 8-bit mode
when "01" => rx_data <= x"0000" & spi_rtx_sreg(15 downto 0); -- 16-bit mode
when "10" => rx_data <= x"00" & spi_rtx_sreg(23 downto 0); -- 24-bit mode
when others => rx_data <= spi_rtx_sreg(31 downto 0); -- 32-bit mode
end case;
end process rx_mapping;
 
 
end neorv32_spi_rtl;
/neorv32_top.vhd
51,6 → 51,7
CLOCK_FREQUENCY : natural := 0; -- clock frequency of clk_i in Hz
BOOTLOADER_USE : boolean := true; -- implement processor-internal bootloader?
USER_CODE : std_ulogic_vector(31 downto 0) := x"00000000"; -- custom user code
HW_THREAD_ID : std_ulogic_vector(31 downto 0) := (others => '0'); -- hardware thread id (hartid)
-- RISC-V CPU Extensions --
CPU_EXTENSION_RISCV_C : boolean := false; -- implement compressed extension?
CPU_EXTENSION_RISCV_E : boolean := false; -- implement embedded RF extension?
91,6 → 92,7
clk_i : in std_ulogic := '0'; -- global clock, rising edge
rstn_i : in std_ulogic := '0'; -- global reset, low-active, async
-- Wishbone bus interface (available if MEM_EXT_USE = true) --
wb_tag_o : out std_ulogic_vector(02 downto 0); -- tag
wb_adr_o : out std_ulogic_vector(31 downto 0); -- address
wb_dat_i : in std_ulogic_vector(31 downto 0) := (others => '0'); -- read data
wb_dat_o : out std_ulogic_vector(31 downto 0); -- write data
101,7 → 103,6
wb_ack_i : in std_ulogic := '0'; -- transfer acknowledge
wb_err_i : in std_ulogic := '0'; -- transfer error
-- Advanced memory control signals (available if MEM_EXT_USE = true) --
priv_o : out std_ulogic_vector(1 downto 0); -- current CPU privilege level
fence_o : out std_ulogic; -- indicates an executed FENCE operation
fencei_o : out std_ulogic; -- indicates an executed FENCEI operation
-- GPIO (available if IO_GPIO_USE = true) --
170,6 → 171,7
err : std_ulogic; -- bus transfer error
fence : std_ulogic; -- fence(i) instruction executed
priv : std_ulogic_vector(1 downto 0); -- current privilege level
src : std_ulogic; -- access source
end record;
signal cpu_i, cpu_d, p_bus : bus_interface_t;
 
227,6 → 229,8
 
-- Sanity Checks --------------------------------------------------------------------------
-- -------------------------------------------------------------------------------------------
-- clock --
assert not (CLOCK_FREQUENCY = 0) report "NEORV32 PROCESSOR CONFIG ERROR! Core clock frequency (CLOCK_FREQUENCY) not specified." severity error;
-- internal bootloader ROM --
assert not ((BOOTLOADER_USE = true) and (boot_rom_size_c > boot_rom_max_size_c)) report "NEORV32 PROCESSOR CONFIG ERROR! Boot ROM size out of range." severity error;
assert not ((BOOTLOADER_USE = true) and (MEM_INT_IMEM_ROM = true)) report "NEORV32 PROCESSOR CONFIG WARNING! IMEM is configured as read-only. Bootloader will not be able to load new executables." severity warning;
233,17 → 237,18
-- memory system - data/instruction fetch --
assert not ((MEM_EXT_USE = false) and (MEM_INT_DMEM_USE = false)) report "NEORV32 PROCESSOR CONFIG ERROR! Core cannot fetch data without external memory interface and internal data memory." severity error;
assert not ((MEM_EXT_USE = false) and (MEM_INT_IMEM_USE = false) and (BOOTLOADER_USE = false)) report "NEORV32 PROCESSOR CONFIG ERROR! Core cannot fetch instructions without external memory interface, internal data memory and bootloader." severity error;
-- memory system - size --
assert not ((MEM_INT_DMEM_USE = true) and (is_power_of_two_f(MEM_INT_IMEM_SIZE) = false)) report "NEORV32 PROCESSOR CONFIG WARNING! MEM_INT_IMEM_SIZE should be a power of 2 to allow optimal hardware mapping." severity warning;
assert not ((MEM_INT_IMEM_USE = true) and (is_power_of_two_f(MEM_INT_DMEM_SIZE) = false)) report "NEORV32 PROCESSOR CONFIG WARNING! MEM_INT_DMEM_SIZE should be a power of 2 to allow optimal hardware mapping." severity warning;
-- memory system - alignment --
assert not (ispace_base_c(1 downto 0) /= "00") report "NEORV32 PROCESSOR CONFIG ERROR! Instruction memory space base address must be 4-byte-aligned." severity error;
assert not (dspace_base_c(1 downto 0) /= "00") report "NEORV32 PROCESSOR CONFIG ERROR! Data memory space base address must be 4-byte-aligned." severity error;
assert not ((ispace_base_c(index_size_f(MEM_INT_IMEM_SIZE)-1 downto 0) /= imem_align_check_c) and (MEM_INT_IMEM_USE = true)) report "NEORV32 PROCESSOR CONFIG ERROR! Instruction memory space base address has to be aligned to IMEM size." severity error;
assert not ((dspace_base_c(index_size_f(MEM_INT_DMEM_SIZE)-1 downto 0) /= dmem_align_check_c) and (MEM_INT_DMEM_USE = true)) report "NEORV32 PROCESSOR CONFIG ERROR! Data memory space base address has to be aligned to DMEM size." severity error;
-- clock --
assert not (CLOCK_FREQUENCY = 0) report "NEORV32 PROCESSOR CONFIG ERROR! Core clock frequency (CLOCK_FREQUENCY) not specified." severity error;
-- memory layout warning --
-- memory system - layout warning --
assert not (ispace_base_c /= x"00000000") report "NEORV32 PROCESSOR CONFIG WARNING! Non-default base address for instruction address space. Make sure this is sync with the software framework." severity warning;
assert not (dspace_base_c /= x"80000000") report "NEORV32 PROCESSOR CONFIG WARNING! Non-default base address for data address space. Make sure this is sync with the software framework." severity warning;
-- memory latency notifier (warning) --
-- (external) memory latency notifier (warning) --
assert not (MEM_EXT_USE = true) report "NEORV32 PROCESSOR CONFIG NOTE: Implementing external memory interface with max latency = " & integer'image(bus_timeout_c) & " cycles." severity warning;
-- external memory iterface protocol notifier (warning) --
assert not ((MEM_EXT_USE = true) and (wb_pipe_mode_c = false)) report "NEORV32 PROCESSOR CONFIG NOTE: Implementing external memory interface using STANDARD Wishbone protocol." severity warning;
313,7 → 318,7
neorv32_cpu_inst: neorv32_cpu
generic map (
-- General --
HW_THREAD_ID => (others => '0'), -- hardware thread id
HW_THREAD_ID => HW_THREAD_ID, -- hardware thread id
CPU_BOOT_ADDR => cpu_boot_addr_c, -- cpu boot address
-- RISC-V CPU Extensions --
CPU_EXTENSION_RISCV_C => CPU_EXTENSION_RISCV_C, -- implement compressed extension?
368,8 → 373,11
firq_i => fast_irq
);
 
-- misc --
cpu_i.src <= '1';
cpu_d.src <= '0';
 
-- advanced memory control --
priv_o <= cpu_i.priv; -- is the same as "cpu_d.priv"
fence_o <= cpu_d.fence; -- indicates an executed FENCE operation
fencei_o <= cpu_i.fence; -- indicates an executed FENCEI operation
 
412,6 → 420,7
cb_bus_ack_o => cpu_i.ack, -- bus transfer acknowledge
cb_bus_err_o => cpu_i.err, -- bus transfer error
-- peripheral bus --
p_bus_src_o => p_bus.src, -- access source: 0 = A (data), 1 = B (instructions)
p_bus_addr_o => p_bus.addr, -- bus access address
p_bus_rdata_i => p_bus.rdata, -- bus read data
p_bus_wdata_o => p_bus.wdata, -- bus write data
434,7 → 443,10
-- processor bus: CPU data bus error input --
p_bus.err <= wishbone_err;
 
-- current CPU privilege level --
p_bus.priv <= cpu_i.priv; -- cpu_i.priv == cpu_d.priv
 
 
-- Processor-Internal Instruction Memory (IMEM) -------------------------------------------
-- -------------------------------------------------------------------------------------------
neorv32_int_imem_inst_true:
538,6 → 550,7
clk_i => clk_i, -- global clock line
rstn_i => sys_rstn, -- global reset line, low-active
-- host access --
src_i => p_bus.src, -- access type (0: data, 1:instruction)
addr_i => p_bus.addr, -- address
rden_i => p_bus.re, -- read enable
wren_i => p_bus.we, -- write enable
547,7 → 560,9
cancel_i => p_bus.cancel, -- cancel current transaction
ack_o => wishbone_ack, -- transfer acknowledge
err_o => wishbone_err, -- transfer error
priv_i => p_bus.priv, -- current CPU privilege level
-- wishbone interface --
wb_tag_o => wb_tag_o, -- tag
wb_adr_o => wb_adr_o, -- address
wb_dat_i => wb_dat_i, -- read data
wb_dat_o => wb_dat_o, -- write data
572,6 → 587,7
wb_sel_o <= (others => '0');
wb_stb_o <= '0';
wb_cyc_o <= '0';
wb_tag_o <= (others => '0');
end generate;
 
 
/neorv32_wishbone.vhd
64,6 → 64,7
clk_i : in std_ulogic; -- global clock line
rstn_i : in std_ulogic; -- global reset line, low-active
-- host access --
src_i : in std_ulogic; -- access type (0: data, 1:instruction)
addr_i : in std_ulogic_vector(31 downto 0); -- address
rden_i : in std_ulogic; -- read enable
wren_i : in std_ulogic; -- write enable
73,7 → 74,9
cancel_i : in std_ulogic; -- cancel current bus transaction
ack_o : out std_ulogic; -- transfer acknowledge
err_o : out std_ulogic; -- transfer error
priv_i : in std_ulogic_vector(1 downto 0); -- current CPU privilege level
-- wishbone interface --
wb_tag_o : out std_ulogic_vector(2 downto 0); -- tag
wb_adr_o : out std_ulogic_vector(31 downto 0); -- address
wb_dat_i : in std_ulogic_vector(31 downto 0); -- read data
wb_dat_o : out std_ulogic_vector(31 downto 0); -- write data
112,11 → 115,13
ack : std_ulogic;
err : std_ulogic;
timeout : std_ulogic_vector(index_size_f(wb_timeout_c)-1 downto 0);
src : std_ulogic;
priv : std_ulogic_vector(1 downto 0);
end record;
signal ctrl : ctrl_t;
signal ctrl : ctrl_t;
signal stb_int : std_ulogic;
signal cyc_int : std_ulogic;
 
signal stb_int, cyc_int : std_ulogic;
 
begin
 
-- Sanity Checks --------------------------------------------------------------------------
157,6 → 162,8
ctrl.timeout <= (others => '0');
ctrl.ack <= '0';
ctrl.err <= '0';
ctrl.src <= '0';
ctrl.priv <= "00";
elsif rising_edge(clk_i) then
-- defaults --
ctrl.state_prev <= ctrl.state;
177,6 → 184,8
ctrl.adr <= addr_i;
ctrl.wdat <= data_i;
ctrl.sel <= ben_i;
ctrl.src <= src_i;
ctrl.priv <= priv_i;
-- valid read/write access --
if ((wb_access and (wren_i or ctrl.wr_req or rden_i or ctrl.rd_req)) = '1') then
ctrl.state <= BUSY;
214,7 → 223,6
end if;
end process bus_arbiter;
 
 
-- host access --
data_o <= ctrl.rdat;
ack_o <= ctrl.ack;
221,6 → 229,10
err_o <= ctrl.err;
 
-- wishbone interface --
wb_tag_o(0) <= '1' when (ctrl.priv = priv_mode_m_c) else '0'; -- privileged access when in machine mode
wb_tag_o(1) <= '0'; -- 0=secure, 1=non-secure
wb_tag_o(2) <= ctrl.src; -- 0=data access, 1=instruction access
 
wb_adr_o <= ctrl.adr;
wb_dat_o <= ctrl.wdat;
wb_we_o <= ctrl.we;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.