From 6d2ac36e53370b1f9668d1ad71c2bf0ab33343e6 Mon Sep 17 00:00:00 2001 From: stnolting Date: Wed, 2 Feb 2022 15:03:39 +0100 Subject: [PATCH 1/7] [sw/bootloader] testing LTO for bootloader --- sw/bootloader/makefile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sw/bootloader/makefile b/sw/bootloader/makefile index b34ab61b1..48abf117e 100644 --- a/sw/bootloader/makefile +++ b/sw/bootloader/makefile @@ -5,7 +5,7 @@ # ********************************************************************************************* # # BSD 3-Clause License # # # -# Copyright (c) 2021, Stephan Nolting. All rights reserved. # +# Copyright (c) 2022, Stephan Nolting. All rights reserved. # # # # Redistribution and use in source and binary forms, with or without modification, are # # permitted provided that the following conditions are met: # @@ -37,4 +37,11 @@ # Modify this variable to fit your NEORV32 setup (neorv32 home folder) NEORV32_HOME ?= ../.. +# Set ISA to minimal rv32i to allow bootloader to run on any processor ISA configuration +MARCH=rv32i + +# Enable link-time-optimization and add debug symbols +USER_FLAGS="-flto" +USER_FLAGS+="-g" + include $(NEORV32_HOME)/sw/common/common.mk From 6e245464e08c714f55274ec8289fbc38c2c81964 Mon Sep 17 00:00:00 2001 From: stnolting Date: Wed, 2 Feb 2022 15:57:55 +0100 Subject: [PATCH 2/7] [sw/bootloader] minor edits in console output --- sw/bootloader/bootloader.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sw/bootloader/bootloader.c b/sw/bootloader/bootloader.c index bda29094e..13f896722 100644 --- a/sw/bootloader/bootloader.c +++ b/sw/bootloader/bootloader.c @@ -371,7 +371,7 @@ int main(void) { #if (AUTO_BOOT_TIMEOUT != 0) if (neorv32_mtime_available()) { - PRINT_TEXT("\n\nAutoboot in "xstr(AUTO_BOOT_TIMEOUT)"s. Press key to abort.\n"); + PRINT_TEXT("\n\nAutoboot in "xstr(AUTO_BOOT_TIMEOUT)"s. Press any key to abort.\n"); uint64_t timeout_time = neorv32_mtime_get_time() + (uint64_t)(AUTO_BOOT_TIMEOUT * NEORV32_SYSINFO.CLK); while(1){ @@ -438,6 +438,9 @@ int main(void) { start_app(); } } + else if (c == '?') { + PRINT_TEXT("(c) by Stephan Nolting\nhttps://github.com/stnolting/neorv32"); + } else { // unknown command PRINT_TEXT("Invalid CMD"); } From a64f8cc48fbed3173a9065d5038c2aae23c95c48 Mon Sep 17 00:00:00 2001 From: stnolting Date: Thu, 3 Feb 2022 09:07:35 +0100 Subject: [PATCH 3/7] [sw/bootloader] improved user console more detailed messages --- sw/bootloader/bootloader.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/sw/bootloader/bootloader.c b/sw/bootloader/bootloader.c index 13f896722..b3fee036d 100644 --- a/sw/bootloader/bootloader.c +++ b/sw/bootloader/bootloader.c @@ -144,6 +144,16 @@ enum ERROR_CODES { ERROR_FLASH = 3 /**< 3: SPI flash access error */ }; +/**********************************************************************//** + * Error messages + **************************************************************************/ +const char error_message[4][24] = { + "exe signature fail", + "exceeding IMEM capacity", + "checksum fail", + "SPI flash access failed" +}; + /**********************************************************************//** * SPI flash commands @@ -170,7 +180,7 @@ enum NEORV32_EXECUTABLE { /**********************************************************************//** - * Valid executable identification signature. + * Valid executable identification signature **************************************************************************/ #define EXE_SIGNATURE 0x4788CAFE @@ -521,13 +531,13 @@ void __attribute__((__interrupt__)) bootloader_trap_handler(void) { register uint32_t epc = neorv32_cpu_csr_read(CSR_MEPC); #if (UART_EN != 0) if (neorv32_uart0_available()) { - PRINT_TEXT("\n[ERR "); + PRINT_TEXT("\n[ERROR - Unexpected exception! mcause="); PRINT_XNUM(cause); // MCAUSE - PRINT_PUTC(' '); + PRINT_TEXT(" mepc="); PRINT_XNUM(epc); // MEPC - PRINT_PUTC(' '); + PRINT_TEXT(" mtval="); PRINT_XNUM(neorv32_cpu_csr_read(CSR_MTVAL)); // MTVAL - PRINT_TEXT("]\n"); + PRINT_TEXT("] trying to resume...\n"); } #endif neorv32_cpu_csr_write(CSR_MEPC, epc + 4); // advance to next instruction @@ -702,12 +712,15 @@ uint32_t get_exe_word(int src, uint32_t addr) { /**********************************************************************//** * Output system error ID and stall. * - * @param[in] err_code Error code. See #ERROR_CODES. + * @param[in] err_code Error code. See #ERROR_CODES and #error_message. **************************************************************************/ void system_error(uint8_t err_code) { PRINT_TEXT("\a\nERROR_"); // output error code with annoying bell sound PRINT_PUTC('0' + ((char)err_code)); + PRINT_PUTC(':'); + PRINT_PUTC(' '); + PRINT_TEXT(error_message[err_code]); neorv32_cpu_dint(); // deactivate IRQs #if (STATUS_LED_EN != 0) From d232fa88a33c16077495f969603c69efb0fd58c0 Mon Sep 17 00:00:00 2001 From: stnolting Date: Thu, 3 Feb 2022 09:08:09 +0100 Subject: [PATCH 4/7] [rtl/core] updated pre-built bootloader image --- rtl/core/neorv32_bootloader_image.vhd | 1819 ++++++++++++------------- rtl/core/neorv32_package.vhd | 2 +- 2 files changed, 899 insertions(+), 922 deletions(-) diff --git a/rtl/core/neorv32_bootloader_image.vhd b/rtl/core/neorv32_bootloader_image.vhd index 974bb70ce..cf3703947 100644 --- a/rtl/core/neorv32_bootloader_image.vhd +++ b/rtl/core/neorv32_bootloader_image.vhd @@ -1,6 +1,6 @@ -- The NEORV32 RISC-V Processor, https://github.com/stnolting/neorv32 -- Auto-generated memory init file (for BOOTLOADER) from source file --- Size: 4020 bytes +-- Size: 3928 bytes library ieee; use ieee.std_logic_1164.all; @@ -51,7 +51,7 @@ package neorv32_bootloader_image is 00000037 => x"00158593", 00000038 => x"ff5ff06f", 00000039 => x"00001597", - 00000040 => x"f1858593", + 00000040 => x"ebc58593", 00000041 => x"80010617", 00000042 => x"f5c60613", 00000043 => x"80010697", @@ -88,934 +88,911 @@ package neorv32_bootloader_image is 00000074 => x"00412483", 00000075 => x"00810113", 00000076 => x"30200073", - 00000077 => x"fd010113", - 00000078 => x"02912223", + 00000077 => x"fb010113", + 00000078 => x"04912223", 00000079 => x"800004b7", 00000080 => x"00048793", - 00000081 => x"02112623", - 00000082 => x"02812423", - 00000083 => x"03212023", - 00000084 => x"01312e23", - 00000085 => x"01412c23", - 00000086 => x"01512a23", - 00000087 => x"01612823", - 00000088 => x"01712623", - 00000089 => x"01812423", - 00000090 => x"01912223", - 00000091 => x"0007a023", - 00000092 => x"8001a223", - 00000093 => x"ffff07b7", - 00000094 => x"4a078793", - 00000095 => x"30579073", - 00000096 => x"00000693", - 00000097 => x"00000613", - 00000098 => x"00000593", - 00000099 => x"00200513", - 00000100 => x"355000ef", - 00000101 => x"3e9000ef", - 00000102 => x"00048493", - 00000103 => x"00050863", - 00000104 => x"00100513", - 00000105 => x"00000593", - 00000106 => x"415000ef", - 00000107 => x"00005537", - 00000108 => x"00000613", - 00000109 => x"00000593", - 00000110 => x"b0050513", - 00000111 => x"1f1000ef", - 00000112 => x"191000ef", - 00000113 => x"02050063", - 00000114 => x"fe002503", - 00000115 => x"00000593", - 00000116 => x"00255513", - 00000117 => x"1a1000ef", - 00000118 => x"08000793", - 00000119 => x"30479073", - 00000120 => x"30046073", - 00000121 => x"ffff1537", - 00000122 => x"ee450513", - 00000123 => x"2a1000ef", - 00000124 => x"f1302573", - 00000125 => x"23c000ef", - 00000126 => x"ffff1537", - 00000127 => x"f1c50513", - 00000128 => x"28d000ef", - 00000129 => x"fe002503", - 00000130 => x"228000ef", - 00000131 => x"ffff1537", - 00000132 => x"f2450513", - 00000133 => x"279000ef", - 00000134 => x"30102573", - 00000135 => x"214000ef", - 00000136 => x"ffff1537", - 00000137 => x"f2c50513", - 00000138 => x"265000ef", - 00000139 => x"fe402503", - 00000140 => x"ffff1437", - 00000141 => x"1fc000ef", + 00000081 => x"04112623", + 00000082 => x"04812423", + 00000083 => x"05212023", + 00000084 => x"03312e23", + 00000085 => x"03412c23", + 00000086 => x"03512a23", + 00000087 => x"03612823", + 00000088 => x"03712623", + 00000089 => x"03812423", + 00000090 => x"03912223", + 00000091 => x"03a12023", + 00000092 => x"01b12e23", + 00000093 => x"0007a023", + 00000094 => x"800007b7", + 00000095 => x"0007a223", + 00000096 => x"ffff07b7", + 00000097 => x"77078793", + 00000098 => x"30579073", + 00000099 => x"000017b7", + 00000100 => x"fa002423", + 00000101 => x"90078793", + 00000102 => x"faf02423", + 00000103 => x"fe802783", + 00000104 => x"00010737", + 00000105 => x"00048493", + 00000106 => x"00e7f7b3", + 00000107 => x"00078863", + 00000108 => x"00100793", + 00000109 => x"fcf02423", + 00000110 => x"fc002623", + 00000111 => x"fa002023", + 00000112 => x"fe002683", + 00000113 => x"000097b7", + 00000114 => x"ffff7637", + 00000115 => x"00000713", + 00000116 => x"5ff78793", + 00000117 => x"a0060613", + 00000118 => x"1ed7e463", + 00000119 => x"000016b7", + 00000120 => x"00000793", + 00000121 => x"ffe68693", + 00000122 => x"1ee6e663", + 00000123 => x"fff70713", + 00000124 => x"01879793", + 00000125 => x"00e7e7b3", + 00000126 => x"10000737", + 00000127 => x"00e7e7b3", + 00000128 => x"faf02023", + 00000129 => x"fe802783", + 00000130 => x"00020737", + 00000131 => x"00e7f7b3", + 00000132 => x"02078463", + 00000133 => x"fe002783", + 00000134 => x"fff00713", + 00000135 => x"f8e02c23", + 00000136 => x"0027d793", + 00000137 => x"f8002e23", + 00000138 => x"f8f02c23", + 00000139 => x"08000793", + 00000140 => x"30479073", + 00000141 => x"30046073", 00000142 => x"ffff1537", - 00000143 => x"f3450513", - 00000144 => x"24d000ef", - 00000145 => x"fe802503", - 00000146 => x"1e8000ef", + 00000143 => x"d2c50513", + 00000144 => x"3b8000ef", + 00000145 => x"f1302573", + 00000146 => x"4b8000ef", 00000147 => x"ffff1537", - 00000148 => x"f3c50513", - 00000149 => x"239000ef", - 00000150 => x"ff802503", - 00000151 => x"1d4000ef", - 00000152 => x"f4440513", - 00000153 => x"229000ef", - 00000154 => x"ff002503", - 00000155 => x"1c4000ef", - 00000156 => x"ffff1537", - 00000157 => x"f5050513", - 00000158 => x"215000ef", - 00000159 => x"ffc02503", - 00000160 => x"1b0000ef", - 00000161 => x"f4440513", - 00000162 => x"205000ef", - 00000163 => x"ff402503", - 00000164 => x"1a0000ef", - 00000165 => x"0bd000ef", - 00000166 => x"06050663", - 00000167 => x"ffff1537", - 00000168 => x"f5850513", - 00000169 => x"1e9000ef", - 00000170 => x"0b9000ef", - 00000171 => x"fe002403", - 00000172 => x"00341413", - 00000173 => x"00a40933", - 00000174 => x"00893433", - 00000175 => x"00b40433", - 00000176 => x"0dd000ef", - 00000177 => x"02051663", - 00000178 => x"099000ef", - 00000179 => x"fe85eae3", - 00000180 => x"00b41463", - 00000181 => x"ff2566e3", - 00000182 => x"00100513", - 00000183 => x"4c8000ef", - 00000184 => x"ffff1537", - 00000185 => x"f8050513", - 00000186 => x"1a5000ef", - 00000187 => x"0d4000ef", - 00000188 => x"191000ef", - 00000189 => x"fc050ae3", + 00000148 => x"d6450513", + 00000149 => x"3a4000ef", + 00000150 => x"fe002503", + 00000151 => x"4a4000ef", + 00000152 => x"ffff1537", + 00000153 => x"d6c50513", + 00000154 => x"390000ef", + 00000155 => x"30102573", + 00000156 => x"490000ef", + 00000157 => x"ffff1537", + 00000158 => x"d7450513", + 00000159 => x"37c000ef", + 00000160 => x"fe402503", + 00000161 => x"ffff1437", + 00000162 => x"478000ef", + 00000163 => x"ffff1537", + 00000164 => x"d7c50513", + 00000165 => x"364000ef", + 00000166 => x"fe802503", + 00000167 => x"464000ef", + 00000168 => x"ffff1537", + 00000169 => x"d8450513", + 00000170 => x"350000ef", + 00000171 => x"ff802503", + 00000172 => x"450000ef", + 00000173 => x"d8c40513", + 00000174 => x"340000ef", + 00000175 => x"ff002503", + 00000176 => x"440000ef", + 00000177 => x"ffff1537", + 00000178 => x"d9850513", + 00000179 => x"32c000ef", + 00000180 => x"ffc02503", + 00000181 => x"42c000ef", + 00000182 => x"d8c40513", + 00000183 => x"31c000ef", + 00000184 => x"ff402503", + 00000185 => x"41c000ef", + 00000186 => x"fe802783", + 00000187 => x"00020737", + 00000188 => x"00e7f7b3", + 00000189 => x"04078c63", 00000190 => x"ffff1537", - 00000191 => x"f8450513", - 00000192 => x"18d000ef", - 00000193 => x"0b0000ef", - 00000194 => x"ffff19b7", - 00000195 => x"ffff1a37", - 00000196 => x"07200a93", - 00000197 => x"06800b13", - 00000198 => x"07500b93", - 00000199 => x"07300c13", - 00000200 => x"ffff1937", - 00000201 => x"ffff1cb7", - 00000202 => x"f9098513", - 00000203 => x"161000ef", - 00000204 => x"141000ef", - 00000205 => x"00050413", - 00000206 => x"105000ef", - 00000207 => x"f80a0513", - 00000208 => x"14d000ef", - 00000209 => x"111000ef", - 00000210 => x"fe051ee3", - 00000211 => x"01541863", - 00000212 => x"ffff02b7", - 00000213 => x"00028067", - 00000214 => x"fd1ff06f", - 00000215 => x"01641663", - 00000216 => x"054000ef", - 00000217 => x"fc5ff06f", - 00000218 => x"01741663", - 00000219 => x"438000ef", - 00000220 => x"fb9ff06f", - 00000221 => x"01841663", - 00000222 => x"65c000ef", - 00000223 => x"fadff06f", - 00000224 => x"06c00793", - 00000225 => x"00f41663", - 00000226 => x"00100513", - 00000227 => x"fe1ff06f", - 00000228 => x"06500793", - 00000229 => x"00f41c63", - 00000230 => x"0004a783", - 00000231 => x"f40798e3", - 00000232 => x"e8cc8513", - 00000233 => x"0e9000ef", - 00000234 => x"f81ff06f", - 00000235 => x"f9890513", - 00000236 => x"ff5ff06f", - 00000237 => x"ffff1537", - 00000238 => x"dcc50513", - 00000239 => x"0d10006f", - 00000240 => x"ff010113", - 00000241 => x"00112623", - 00000242 => x"30047073", - 00000243 => x"ffff1537", - 00000244 => x"e3050513", - 00000245 => x"0b9000ef", - 00000246 => x"07d000ef", - 00000247 => x"fe051ee3", - 00000248 => x"ff002783", - 00000249 => x"00078067", - 00000250 => x"0000006f", - 00000251 => x"ff010113", - 00000252 => x"00812423", - 00000253 => x"00050413", - 00000254 => x"ffff1537", - 00000255 => x"e4050513", - 00000256 => x"00112623", - 00000257 => x"089000ef", - 00000258 => x"03040513", - 00000259 => x"0ff57513", - 00000260 => x"02d000ef", - 00000261 => x"30047073", - 00000262 => x"165000ef", - 00000263 => x"00050863", - 00000264 => x"00100513", - 00000265 => x"00000593", - 00000266 => x"195000ef", - 00000267 => x"0000006f", - 00000268 => x"fe010113", - 00000269 => x"01212823", - 00000270 => x"00050913", - 00000271 => x"ffff1537", - 00000272 => x"00912a23", - 00000273 => x"e4c50513", - 00000274 => x"ffff14b7", - 00000275 => x"00812c23", - 00000276 => x"01312623", - 00000277 => x"00112e23", - 00000278 => x"01c00413", - 00000279 => x"031000ef", - 00000280 => x"fa448493", - 00000281 => x"ffc00993", - 00000282 => x"008957b3", - 00000283 => x"00f7f793", - 00000284 => x"00f487b3", - 00000285 => x"0007c503", - 00000286 => x"ffc40413", - 00000287 => x"7c0000ef", - 00000288 => x"ff3414e3", - 00000289 => x"01c12083", - 00000290 => x"01812403", - 00000291 => x"01412483", - 00000292 => x"01012903", - 00000293 => x"00c12983", - 00000294 => x"02010113", - 00000295 => x"00008067", - 00000296 => x"fb010113", - 00000297 => x"04112623", - 00000298 => x"04512423", - 00000299 => x"04612223", - 00000300 => x"04712023", - 00000301 => x"02812e23", - 00000302 => x"02912c23", - 00000303 => x"02a12a23", - 00000304 => x"02b12823", - 00000305 => x"02c12623", - 00000306 => x"02d12423", - 00000307 => x"02e12223", - 00000308 => x"02f12023", - 00000309 => x"01012e23", - 00000310 => x"01112c23", - 00000311 => x"01c12a23", - 00000312 => x"01d12823", - 00000313 => x"01e12623", - 00000314 => x"01f12423", - 00000315 => x"342024f3", - 00000316 => x"800007b7", - 00000317 => x"00778793", - 00000318 => x"08f49463", - 00000319 => x"081000ef", - 00000320 => x"00050663", - 00000321 => x"00000513", - 00000322 => x"085000ef", - 00000323 => x"644000ef", - 00000324 => x"02050063", - 00000325 => x"678000ef", - 00000326 => x"fe002783", - 00000327 => x"0027d793", - 00000328 => x"00a78533", - 00000329 => x"00f537b3", - 00000330 => x"00b785b3", - 00000331 => x"648000ef", - 00000332 => x"03c12403", - 00000333 => x"04c12083", - 00000334 => x"04812283", - 00000335 => x"04412303", - 00000336 => x"04012383", - 00000337 => x"03812483", - 00000338 => x"03412503", - 00000339 => x"03012583", - 00000340 => x"02c12603", - 00000341 => x"02812683", - 00000342 => x"02412703", - 00000343 => x"02012783", - 00000344 => x"01c12803", - 00000345 => x"01812883", - 00000346 => x"01412e03", - 00000347 => x"01012e83", - 00000348 => x"00c12f03", - 00000349 => x"00812f83", - 00000350 => x"05010113", - 00000351 => x"30200073", - 00000352 => x"00700793", - 00000353 => x"00f49a63", - 00000354 => x"8041a783", - 00000355 => x"00078663", - 00000356 => x"00100513", - 00000357 => x"e59ff0ef", - 00000358 => x"34102473", - 00000359 => x"600000ef", - 00000360 => x"04050263", - 00000361 => x"ffff1537", - 00000362 => x"e5050513", - 00000363 => x"6e0000ef", - 00000364 => x"00048513", - 00000365 => x"e7dff0ef", - 00000366 => x"02000513", - 00000367 => x"680000ef", - 00000368 => x"00040513", - 00000369 => x"e6dff0ef", - 00000370 => x"02000513", - 00000371 => x"670000ef", - 00000372 => x"34302573", - 00000373 => x"e5dff0ef", - 00000374 => x"ffff1537", - 00000375 => x"e5850513", - 00000376 => x"6ac000ef", - 00000377 => x"00440413", - 00000378 => x"34141073", - 00000379 => x"f45ff06f", - 00000380 => x"ff010113", - 00000381 => x"00000513", - 00000382 => x"00112623", + 00000191 => x"da050513", + 00000192 => x"2f8000ef", + 00000193 => x"f9402683", + 00000194 => x"f9002703", + 00000195 => x"f9402783", + 00000196 => x"fef69ae3", + 00000197 => x"fe002783", + 00000198 => x"000405b7", + 00000199 => x"00379793", + 00000200 => x"00e78733", + 00000201 => x"00f737b3", + 00000202 => x"00d787b3", + 00000203 => x"fe802683", + 00000204 => x"00b6f6b3", + 00000205 => x"0c068263", + 00000206 => x"fa402683", + 00000207 => x"0a06de63", + 00000208 => x"ffff1537", + 00000209 => x"dcc50513", + 00000210 => x"2b0000ef", + 00000211 => x"ffff1937", + 00000212 => x"ddc90513", + 00000213 => x"2a4000ef", + 00000214 => x"ffff1a37", + 00000215 => x"ffff1ab7", + 00000216 => x"ffff1b37", + 00000217 => x"ffff1bb7", + 00000218 => x"ffff1c37", + 00000219 => x"ffff1cb7", + 00000220 => x"ffff1d37", + 00000221 => x"e40a0513", + 00000222 => x"280000ef", + 00000223 => x"fa402403", + 00000224 => x"fe045ee3", + 00000225 => x"0ff47413", + 00000226 => x"00040513", + 00000227 => x"254000ef", + 00000228 => x"dd8a8513", + 00000229 => x"264000ef", + 00000230 => x"00010737", + 00000231 => x"fa002783", + 00000232 => x"fe07cee3", + 00000233 => x"00e7f7b3", + 00000234 => x"fe078ae3", + 00000235 => x"07200793", + 00000236 => x"06f41e63", + 00000237 => x"ffff02b7", + 00000238 => x"00028067", + 00000239 => x"fb9ff06f", + 00000240 => x"00170713", + 00000241 => x"01071713", + 00000242 => x"00c686b3", + 00000243 => x"01075713", + 00000244 => x"e09ff06f", + 00000245 => x"ffe78613", + 00000246 => x"0fd67613", + 00000247 => x"00061a63", + 00000248 => x"00375713", + 00000249 => x"00178793", + 00000250 => x"0ff7f793", + 00000251 => x"dfdff06f", + 00000252 => x"00175713", + 00000253 => x"ff1ff06f", + 00000254 => x"f9402683", + 00000255 => x"f9002603", + 00000256 => x"f9402503", + 00000257 => x"fea69ae3", + 00000258 => x"f2f6e2e3", + 00000259 => x"00d79463", + 00000260 => x"f0e66ee3", + 00000261 => x"00100513", + 00000262 => x"6a4000ef", + 00000263 => x"ffff1537", + 00000264 => x"dd850513", + 00000265 => x"1d4000ef", + 00000266 => x"228000ef", + 00000267 => x"06800793", + 00000268 => x"ddc90513", + 00000269 => x"02f40263", + 00000270 => x"07500793", + 00000271 => x"00000513", + 00000272 => x"16f40663", + 00000273 => x"07300793", + 00000274 => x"14f41c63", + 00000275 => x"0004a403", + 00000276 => x"00041863", + 00000277 => x"e48b8513", + 00000278 => x"1a0000ef", + 00000279 => x"f19ff06f", + 00000280 => x"e64c0513", + 00000281 => x"194000ef", + 00000282 => x"00040513", + 00000283 => x"294000ef", + 00000284 => x"e6cc8513", + 00000285 => x"184000ef", + 00000286 => x"08000537", + 00000287 => x"284000ef", + 00000288 => x"e84d0513", + 00000289 => x"174000ef", + 00000290 => x"fa402d83", + 00000291 => x"fe0ddee3", + 00000292 => x"0ffdfd93", + 00000293 => x"000d8513", + 00000294 => x"148000ef", + 00000295 => x"07900793", + 00000296 => x"ecfd9ae3", + 00000297 => x"468000ef", + 00000298 => x"00051663", + 00000299 => x"00300513", + 00000300 => x"1d8000ef", + 00000301 => x"ffff1537", + 00000302 => x"e9050513", + 00000303 => x"01045d93", + 00000304 => x"138000ef", + 00000305 => x"001d8d93", + 00000306 => x"080009b7", + 00000307 => x"fff00693", + 00000308 => x"fffd8d93", + 00000309 => x"06dd9063", + 00000310 => x"4788d5b7", + 00000311 => x"afe58593", + 00000312 => x"08000537", + 00000313 => x"718000ef", + 00000314 => x"08000537", + 00000315 => x"00040593", + 00000316 => x"00450513", + 00000317 => x"708000ef", + 00000318 => x"ff002603", + 00000319 => x"08000737", + 00000320 => x"ffc47413", + 00000321 => x"00000d93", + 00000322 => x"00000793", + 00000323 => x"00c70813", + 00000324 => x"010d8533", + 00000325 => x"00cd86b3", + 00000326 => x"05b41c63", + 00000327 => x"00870513", + 00000328 => x"40f005b3", + 00000329 => x"6d8000ef", + 00000330 => x"ffff1537", + 00000331 => x"d2850513", + 00000332 => x"f29ff06f", + 00000333 => x"468000ef", + 00000334 => x"fa802703", + 00000335 => x"0d800513", + 00000336 => x"00176713", + 00000337 => x"fae02423", + 00000338 => x"3b0000ef", + 00000339 => x"00098513", + 00000340 => x"48c000ef", + 00000341 => x"fa802703", + 00000342 => x"ffe77713", + 00000343 => x"fae02423", + 00000344 => x"3f8000ef", + 00000345 => x"00010637", + 00000346 => x"00c989b3", + 00000347 => x"f61ff06f", + 00000348 => x"0006a583", + 00000349 => x"00c12623", + 00000350 => x"004d8d93", + 00000351 => x"00b787b3", + 00000352 => x"00f12423", + 00000353 => x"678000ef", + 00000354 => x"080007b7", + 00000355 => x"00c78813", + 00000356 => x"00c12603", + 00000357 => x"00812783", + 00000358 => x"08000737", + 00000359 => x"f75ff06f", + 00000360 => x"06c00793", + 00000361 => x"00f41863", + 00000362 => x"00100513", + 00000363 => x"510000ef", + 00000364 => x"dc5ff06f", + 00000365 => x"06500793", + 00000366 => x"00f41863", + 00000367 => x"0004a783", + 00000368 => x"e8078ae3", + 00000369 => x"e65ff06f", + 00000370 => x"03f00793", + 00000371 => x"ea0b0513", + 00000372 => x"e8f404e3", + 00000373 => x"ffff17b7", + 00000374 => x"edc78513", + 00000375 => x"e7dff06f", + 00000376 => x"00040737", + 00000377 => x"fa002783", + 00000378 => x"00e7f7b3", + 00000379 => x"fe079ce3", + 00000380 => x"faa02223", + 00000381 => x"00008067", + 00000382 => x"ff010113", 00000383 => x"00812423", - 00000384 => x"724000ef", - 00000385 => x"09e00513", - 00000386 => x"760000ef", - 00000387 => x"00000513", - 00000388 => x"758000ef", - 00000389 => x"00050413", - 00000390 => x"00000513", - 00000391 => x"728000ef", + 00000384 => x"01212023", + 00000385 => x"00112623", + 00000386 => x"00912223", + 00000387 => x"00050413", + 00000388 => x"00a00913", + 00000389 => x"00044483", + 00000390 => x"00140413", + 00000391 => x"00049e63", 00000392 => x"00c12083", - 00000393 => x"0ff47513", - 00000394 => x"00812403", - 00000395 => x"01010113", - 00000396 => x"00008067", - 00000397 => x"ff010113", - 00000398 => x"00112623", - 00000399 => x"00812423", - 00000400 => x"00000513", - 00000401 => x"6e0000ef", - 00000402 => x"00500513", - 00000403 => x"71c000ef", - 00000404 => x"00000513", - 00000405 => x"714000ef", - 00000406 => x"00050413", - 00000407 => x"00147413", - 00000408 => x"00000513", - 00000409 => x"6e0000ef", - 00000410 => x"fc041ce3", - 00000411 => x"00c12083", - 00000412 => x"00812403", - 00000413 => x"01010113", - 00000414 => x"00008067", - 00000415 => x"ff010113", - 00000416 => x"00000513", - 00000417 => x"00112623", - 00000418 => x"69c000ef", - 00000419 => x"00600513", - 00000420 => x"6d8000ef", - 00000421 => x"00c12083", - 00000422 => x"00000513", - 00000423 => x"01010113", - 00000424 => x"6a40006f", - 00000425 => x"ff010113", - 00000426 => x"00812423", - 00000427 => x"00050413", - 00000428 => x"01055513", - 00000429 => x"0ff57513", - 00000430 => x"00112623", - 00000431 => x"6ac000ef", - 00000432 => x"00845513", - 00000433 => x"0ff57513", - 00000434 => x"6a0000ef", - 00000435 => x"0ff47513", - 00000436 => x"00812403", - 00000437 => x"00c12083", - 00000438 => x"01010113", - 00000439 => x"68c0006f", - 00000440 => x"ff010113", - 00000441 => x"00812423", - 00000442 => x"00050413", - 00000443 => x"00000513", - 00000444 => x"00112623", - 00000445 => x"630000ef", - 00000446 => x"00300513", - 00000447 => x"66c000ef", - 00000448 => x"00040513", - 00000449 => x"fa1ff0ef", - 00000450 => x"00000513", - 00000451 => x"65c000ef", - 00000452 => x"00050413", - 00000453 => x"00000513", - 00000454 => x"62c000ef", - 00000455 => x"00c12083", - 00000456 => x"0ff47513", - 00000457 => x"00812403", - 00000458 => x"01010113", - 00000459 => x"00008067", - 00000460 => x"fd010113", - 00000461 => x"02812423", - 00000462 => x"02912223", - 00000463 => x"03212023", - 00000464 => x"01312e23", - 00000465 => x"02112623", - 00000466 => x"00050993", - 00000467 => x"00058493", - 00000468 => x"00c10913", - 00000469 => x"00358413", - 00000470 => x"04099063", - 00000471 => x"514000ef", - 00000472 => x"00a90023", - 00000473 => x"fff40793", - 00000474 => x"00190913", - 00000475 => x"02849263", - 00000476 => x"02c12083", - 00000477 => x"02812403", - 00000478 => x"00c12503", - 00000479 => x"02412483", - 00000480 => x"02012903", - 00000481 => x"01c12983", - 00000482 => x"03010113", - 00000483 => x"00008067", - 00000484 => x"00078413", - 00000485 => x"fc5ff06f", - 00000486 => x"00040513", - 00000487 => x"f45ff0ef", - 00000488 => x"fc1ff06f", - 00000489 => x"fd010113", - 00000490 => x"01412c23", - 00000491 => x"02812423", - 00000492 => x"80418793", - 00000493 => x"02112623", - 00000494 => x"02912223", - 00000495 => x"03212023", - 00000496 => x"01312e23", - 00000497 => x"01512a23", - 00000498 => x"01612823", - 00000499 => x"01712623", - 00000500 => x"01812423", - 00000501 => x"00100713", - 00000502 => x"00e7a023", - 00000503 => x"00050413", - 00000504 => x"80418a13", - 00000505 => x"02051863", - 00000506 => x"ffff1537", - 00000507 => x"e5c50513", - 00000508 => x"49c000ef", - 00000509 => x"080005b7", - 00000510 => x"00040513", - 00000511 => x"f35ff0ef", - 00000512 => x"4788d7b7", - 00000513 => x"afe78793", - 00000514 => x"02f50463", - 00000515 => x"00000513", - 00000516 => x"01c0006f", - 00000517 => x"ffff1537", - 00000518 => x"e7c50513", - 00000519 => x"470000ef", - 00000520 => x"dd1ff0ef", - 00000521 => x"fc0518e3", - 00000522 => x"00300513", - 00000523 => x"bc1ff0ef", - 00000524 => x"080009b7", - 00000525 => x"00498593", - 00000526 => x"00040513", - 00000527 => x"ef5ff0ef", - 00000528 => x"00050a93", - 00000529 => x"00898593", - 00000530 => x"00040513", - 00000531 => x"ee5ff0ef", - 00000532 => x"ff002c03", - 00000533 => x"00050b13", - 00000534 => x"ffcafb93", - 00000535 => x"00000913", - 00000536 => x"00000493", - 00000537 => x"00c98993", - 00000538 => x"013905b3", - 00000539 => x"052b9c63", - 00000540 => x"016484b3", - 00000541 => x"00200513", - 00000542 => x"fa049ae3", - 00000543 => x"ffff1537", - 00000544 => x"e8850513", - 00000545 => x"408000ef", - 00000546 => x"02c12083", - 00000547 => x"02812403", - 00000548 => x"800007b7", - 00000549 => x"0157a023", - 00000550 => x"000a2023", - 00000551 => x"02412483", - 00000552 => x"02012903", - 00000553 => x"01c12983", - 00000554 => x"01812a03", - 00000555 => x"01412a83", - 00000556 => x"01012b03", - 00000557 => x"00c12b83", - 00000558 => x"00812c03", - 00000559 => x"03010113", - 00000560 => x"00008067", + 00000393 => x"00812403", + 00000394 => x"00412483", + 00000395 => x"00012903", + 00000396 => x"01010113", + 00000397 => x"00008067", + 00000398 => x"01249663", + 00000399 => x"00d00513", + 00000400 => x"fa1ff0ef", + 00000401 => x"00048513", + 00000402 => x"f99ff0ef", + 00000403 => x"fc9ff06f", + 00000404 => x"ff010113", + 00000405 => x"00112623", + 00000406 => x"30047073", + 00000407 => x"ffff1537", + 00000408 => x"c8c50513", + 00000409 => x"f95ff0ef", + 00000410 => x"00010737", + 00000411 => x"fa002783", + 00000412 => x"fe07cee3", + 00000413 => x"00e7f7b3", + 00000414 => x"fe078ae3", + 00000415 => x"ff002783", + 00000416 => x"00078067", + 00000417 => x"0000006f", + 00000418 => x"ff010113", + 00000419 => x"00812423", + 00000420 => x"00050413", + 00000421 => x"ffff1537", + 00000422 => x"c9c50513", + 00000423 => x"00112623", + 00000424 => x"f59ff0ef", + 00000425 => x"03040513", + 00000426 => x"0ff57513", + 00000427 => x"f35ff0ef", + 00000428 => x"03a00513", + 00000429 => x"f2dff0ef", + 00000430 => x"02000513", + 00000431 => x"f25ff0ef", + 00000432 => x"00141793", + 00000433 => x"008787b3", + 00000434 => x"ffff1537", + 00000435 => x"00379793", + 00000436 => x"ee850513", + 00000437 => x"00f50533", + 00000438 => x"f21ff0ef", + 00000439 => x"30047073", + 00000440 => x"fe802783", + 00000441 => x"00010737", + 00000442 => x"00e7f7b3", + 00000443 => x"00078863", + 00000444 => x"00100793", + 00000445 => x"fcf02423", + 00000446 => x"fc002623", + 00000447 => x"0000006f", + 00000448 => x"fe010113", + 00000449 => x"01212823", + 00000450 => x"00050913", + 00000451 => x"ffff1537", + 00000452 => x"00912a23", + 00000453 => x"ca850513", + 00000454 => x"ffff14b7", + 00000455 => x"00812c23", + 00000456 => x"01312623", + 00000457 => x"00112e23", + 00000458 => x"01c00413", + 00000459 => x"ecdff0ef", + 00000460 => x"f4848493", + 00000461 => x"ffc00993", + 00000462 => x"008957b3", + 00000463 => x"00f7f793", + 00000464 => x"00f487b3", + 00000465 => x"0007c503", + 00000466 => x"ffc40413", + 00000467 => x"e95ff0ef", + 00000468 => x"ff3414e3", + 00000469 => x"01c12083", + 00000470 => x"01812403", + 00000471 => x"01412483", + 00000472 => x"01012903", + 00000473 => x"00c12983", + 00000474 => x"02010113", + 00000475 => x"00008067", + 00000476 => x"fb010113", + 00000477 => x"04112623", + 00000478 => x"04512423", + 00000479 => x"04612223", + 00000480 => x"04712023", + 00000481 => x"02812e23", + 00000482 => x"02912c23", + 00000483 => x"02a12a23", + 00000484 => x"02b12823", + 00000485 => x"02c12623", + 00000486 => x"02d12423", + 00000487 => x"02e12223", + 00000488 => x"02f12023", + 00000489 => x"01012e23", + 00000490 => x"01112c23", + 00000491 => x"01c12a23", + 00000492 => x"01d12823", + 00000493 => x"01e12623", + 00000494 => x"01f12423", + 00000495 => x"342024f3", + 00000496 => x"800007b7", + 00000497 => x"00778793", + 00000498 => x"0af49663", + 00000499 => x"fe802783", + 00000500 => x"00010737", + 00000501 => x"00e7f7b3", + 00000502 => x"00078863", + 00000503 => x"fc802783", + 00000504 => x"0017c793", + 00000505 => x"fcf02423", + 00000506 => x"fe802783", + 00000507 => x"00020737", + 00000508 => x"00e7f7b3", + 00000509 => x"02078863", + 00000510 => x"f9802703", + 00000511 => x"f9c02683", + 00000512 => x"fe002783", + 00000513 => x"0027d793", + 00000514 => x"00e78733", + 00000515 => x"00f737b3", + 00000516 => x"00d787b3", + 00000517 => x"fff00693", + 00000518 => x"f8d02c23", + 00000519 => x"f8f02e23", + 00000520 => x"f8e02c23", + 00000521 => x"03c12403", + 00000522 => x"04c12083", + 00000523 => x"04812283", + 00000524 => x"04412303", + 00000525 => x"04012383", + 00000526 => x"03812483", + 00000527 => x"03412503", + 00000528 => x"03012583", + 00000529 => x"02c12603", + 00000530 => x"02812683", + 00000531 => x"02412703", + 00000532 => x"02012783", + 00000533 => x"01c12803", + 00000534 => x"01812883", + 00000535 => x"01412e03", + 00000536 => x"01012e83", + 00000537 => x"00c12f03", + 00000538 => x"00812f83", + 00000539 => x"05010113", + 00000540 => x"30200073", + 00000541 => x"00700793", + 00000542 => x"00f49c63", + 00000543 => x"800007b7", + 00000544 => x"0047a783", + 00000545 => x"00078663", + 00000546 => x"00100513", + 00000547 => x"dfdff0ef", + 00000548 => x"34102473", + 00000549 => x"fe802783", + 00000550 => x"00040737", + 00000551 => x"00e7f7b3", + 00000552 => x"04078663", + 00000553 => x"ffff1537", + 00000554 => x"cac50513", + 00000555 => x"d4dff0ef", + 00000556 => x"00048513", + 00000557 => x"e4dff0ef", + 00000558 => x"ffff1537", + 00000559 => x"cd450513", + 00000560 => x"d39ff0ef", 00000561 => x"00040513", - 00000562 => x"e69ff0ef", - 00000563 => x"012c07b3", - 00000564 => x"00a484b3", - 00000565 => x"00a7a023", - 00000566 => x"00490913", - 00000567 => x"f8dff06f", - 00000568 => x"ff010113", - 00000569 => x"00112623", - 00000570 => x"00812423", - 00000571 => x"00912223", - 00000572 => x"00058413", - 00000573 => x"00050493", - 00000574 => x"d85ff0ef", - 00000575 => x"00000513", - 00000576 => x"424000ef", - 00000577 => x"00200513", - 00000578 => x"460000ef", - 00000579 => x"00048513", - 00000580 => x"d95ff0ef", - 00000581 => x"00040513", - 00000582 => x"450000ef", - 00000583 => x"00000513", - 00000584 => x"424000ef", - 00000585 => x"00812403", - 00000586 => x"00c12083", - 00000587 => x"00412483", - 00000588 => x"01010113", - 00000589 => x"d01ff06f", - 00000590 => x"fe010113", - 00000591 => x"00812c23", - 00000592 => x"00912a23", - 00000593 => x"01212823", - 00000594 => x"00112e23", - 00000595 => x"00050413", - 00000596 => x"00b12623", - 00000597 => x"00c10913", - 00000598 => x"00350493", - 00000599 => x"00094583", - 00000600 => x"00048513", - 00000601 => x"00190913", - 00000602 => x"f79ff0ef", - 00000603 => x"00048793", - 00000604 => x"fff48493", - 00000605 => x"fef414e3", - 00000606 => x"01c12083", - 00000607 => x"01812403", - 00000608 => x"01412483", - 00000609 => x"01012903", - 00000610 => x"02010113", - 00000611 => x"00008067", - 00000612 => x"ff010113", - 00000613 => x"00112623", - 00000614 => x"00812423", - 00000615 => x"00050413", - 00000616 => x"cddff0ef", - 00000617 => x"00000513", - 00000618 => x"37c000ef", - 00000619 => x"0d800513", - 00000620 => x"3b8000ef", - 00000621 => x"00040513", - 00000622 => x"cedff0ef", - 00000623 => x"00000513", - 00000624 => x"384000ef", - 00000625 => x"00812403", - 00000626 => x"00c12083", - 00000627 => x"01010113", - 00000628 => x"c65ff06f", - 00000629 => x"fe010113", - 00000630 => x"800007b7", - 00000631 => x"00812c23", - 00000632 => x"0007a403", - 00000633 => x"00112e23", - 00000634 => x"00912a23", - 00000635 => x"01212823", - 00000636 => x"01312623", - 00000637 => x"01412423", - 00000638 => x"01512223", - 00000639 => x"02041863", - 00000640 => x"ffff1537", - 00000641 => x"e8c50513", - 00000642 => x"01812403", - 00000643 => x"01c12083", - 00000644 => x"01412483", - 00000645 => x"01012903", - 00000646 => x"00c12983", - 00000647 => x"00812a03", - 00000648 => x"00412a83", - 00000649 => x"02010113", - 00000650 => x"2640006f", - 00000651 => x"ffff1537", - 00000652 => x"ea850513", - 00000653 => x"258000ef", - 00000654 => x"00040513", - 00000655 => x"9f5ff0ef", - 00000656 => x"ffff1537", - 00000657 => x"eb050513", - 00000658 => x"244000ef", - 00000659 => x"08000537", - 00000660 => x"9e1ff0ef", - 00000661 => x"ffff1537", - 00000662 => x"ec850513", - 00000663 => x"230000ef", - 00000664 => x"210000ef", - 00000665 => x"00050493", - 00000666 => x"1d4000ef", - 00000667 => x"07900793", - 00000668 => x"0af49e63", - 00000669 => x"b7dff0ef", - 00000670 => x"00051663", - 00000671 => x"00300513", - 00000672 => x"96dff0ef", - 00000673 => x"ffff1537", - 00000674 => x"ed450513", - 00000675 => x"01045493", - 00000676 => x"1fc000ef", - 00000677 => x"00148493", - 00000678 => x"08000937", - 00000679 => x"fff00993", - 00000680 => x"00010a37", - 00000681 => x"fff48493", - 00000682 => x"07349063", - 00000683 => x"4788d5b7", - 00000684 => x"afe58593", - 00000685 => x"08000537", - 00000686 => x"e81ff0ef", - 00000687 => x"08000537", - 00000688 => x"00040593", - 00000689 => x"00450513", - 00000690 => x"e71ff0ef", - 00000691 => x"ff002a03", - 00000692 => x"080009b7", - 00000693 => x"ffc47413", - 00000694 => x"00000493", - 00000695 => x"00000913", - 00000696 => x"00c98a93", - 00000697 => x"01548533", - 00000698 => x"009a07b3", - 00000699 => x"02849663", - 00000700 => x"00898513", - 00000701 => x"412005b3", - 00000702 => x"e41ff0ef", - 00000703 => x"ffff1537", - 00000704 => x"e8850513", - 00000705 => x"f05ff06f", - 00000706 => x"00090513", - 00000707 => x"e85ff0ef", - 00000708 => x"01490933", - 00000709 => x"f91ff06f", - 00000710 => x"0007a583", - 00000711 => x"00448493", - 00000712 => x"00b90933", - 00000713 => x"e15ff0ef", - 00000714 => x"fbdff06f", - 00000715 => x"01c12083", - 00000716 => x"01812403", - 00000717 => x"01412483", - 00000718 => x"01012903", - 00000719 => x"00c12983", - 00000720 => x"00812a03", - 00000721 => x"00412a83", - 00000722 => x"02010113", - 00000723 => x"00008067", - 00000724 => x"fe802503", - 00000725 => x"01155513", - 00000726 => x"00157513", - 00000727 => x"00008067", - 00000728 => x"f9402583", - 00000729 => x"f9002503", - 00000730 => x"f9402783", - 00000731 => x"fef59ae3", - 00000732 => x"00008067", - 00000733 => x"f9000793", - 00000734 => x"fff00713", - 00000735 => x"00e7a423", - 00000736 => x"00b7a623", - 00000737 => x"00a7a423", - 00000738 => x"00008067", - 00000739 => x"f9000793", - 00000740 => x"0087a503", - 00000741 => x"00c7a583", - 00000742 => x"00008067", - 00000743 => x"fe802503", - 00000744 => x"01255513", - 00000745 => x"00157513", - 00000746 => x"00008067", - 00000747 => x"fa002023", - 00000748 => x"fe002703", - 00000749 => x"00151513", - 00000750 => x"00000793", - 00000751 => x"04a77463", - 00000752 => x"000016b7", - 00000753 => x"00000713", - 00000754 => x"ffe68693", - 00000755 => x"04f6e663", - 00000756 => x"00367613", - 00000757 => x"0035f593", - 00000758 => x"fff78793", - 00000759 => x"01461613", - 00000760 => x"00c7e7b3", - 00000761 => x"01659593", - 00000762 => x"01871713", - 00000763 => x"00b7e7b3", - 00000764 => x"00e7e7b3", - 00000765 => x"10000737", - 00000766 => x"00e7e7b3", - 00000767 => x"faf02023", - 00000768 => x"00008067", - 00000769 => x"00178793", - 00000770 => x"01079793", - 00000771 => x"40a70733", - 00000772 => x"0107d793", - 00000773 => x"fa9ff06f", - 00000774 => x"ffe70513", - 00000775 => x"0fd57513", - 00000776 => x"00051a63", - 00000777 => x"0037d793", - 00000778 => x"00170713", - 00000779 => x"0ff77713", - 00000780 => x"f9dff06f", - 00000781 => x"0017d793", - 00000782 => x"ff1ff06f", - 00000783 => x"00040737", - 00000784 => x"fa002783", - 00000785 => x"00e7f7b3", - 00000786 => x"fe079ce3", - 00000787 => x"faa02223", - 00000788 => x"00008067", - 00000789 => x"fa002783", - 00000790 => x"00100513", - 00000791 => x"0007c863", - 00000792 => x"0107d513", - 00000793 => x"00154513", - 00000794 => x"00157513", - 00000795 => x"00008067", - 00000796 => x"fa402503", - 00000797 => x"fe055ee3", - 00000798 => x"0ff57513", - 00000799 => x"00008067", - 00000800 => x"fa402503", - 00000801 => x"01f55513", + 00000562 => x"e39ff0ef", + 00000563 => x"ffff1537", + 00000564 => x"cdc50513", + 00000565 => x"d25ff0ef", + 00000566 => x"34302573", + 00000567 => x"e25ff0ef", + 00000568 => x"ffff1537", + 00000569 => x"ce450513", + 00000570 => x"d11ff0ef", + 00000571 => x"00440413", + 00000572 => x"34141073", + 00000573 => x"f31ff06f", + 00000574 => x"faa02623", + 00000575 => x"fa802783", + 00000576 => x"fe07cee3", + 00000577 => x"fac02503", + 00000578 => x"00008067", + 00000579 => x"ff010113", + 00000580 => x"00812423", + 00000581 => x"fa800413", + 00000582 => x"00042783", + 00000583 => x"00112623", + 00000584 => x"09e00513", + 00000585 => x"0017e793", + 00000586 => x"00f42023", + 00000587 => x"fcdff0ef", + 00000588 => x"00000513", + 00000589 => x"fc5ff0ef", + 00000590 => x"00042783", + 00000591 => x"00c12083", + 00000592 => x"0ff57513", + 00000593 => x"ffe7f793", + 00000594 => x"00f42023", + 00000595 => x"00812403", + 00000596 => x"01010113", + 00000597 => x"00008067", + 00000598 => x"ff010113", + 00000599 => x"00112623", + 00000600 => x"fa802783", + 00000601 => x"00500513", + 00000602 => x"0017e793", + 00000603 => x"faf02423", + 00000604 => x"f89ff0ef", + 00000605 => x"00000513", + 00000606 => x"f81ff0ef", + 00000607 => x"fa802783", + 00000608 => x"00157513", + 00000609 => x"ffe7f793", + 00000610 => x"faf02423", + 00000611 => x"fc051ae3", + 00000612 => x"00c12083", + 00000613 => x"01010113", + 00000614 => x"00008067", + 00000615 => x"ff010113", + 00000616 => x"00812423", + 00000617 => x"fa800413", + 00000618 => x"00042783", + 00000619 => x"00112623", + 00000620 => x"00600513", + 00000621 => x"0017e793", + 00000622 => x"00f42023", + 00000623 => x"f3dff0ef", + 00000624 => x"00042783", + 00000625 => x"00c12083", + 00000626 => x"ffe7f793", + 00000627 => x"00f42023", + 00000628 => x"00812403", + 00000629 => x"01010113", + 00000630 => x"00008067", + 00000631 => x"ff010113", + 00000632 => x"00812423", + 00000633 => x"00050413", + 00000634 => x"01055513", + 00000635 => x"0ff57513", + 00000636 => x"00112623", + 00000637 => x"f05ff0ef", + 00000638 => x"00845513", + 00000639 => x"0ff57513", + 00000640 => x"ef9ff0ef", + 00000641 => x"0ff47513", + 00000642 => x"00812403", + 00000643 => x"00c12083", + 00000644 => x"01010113", + 00000645 => x"ee5ff06f", + 00000646 => x"fd010113", + 00000647 => x"02812423", + 00000648 => x"02912223", + 00000649 => x"03212023", + 00000650 => x"01312e23", + 00000651 => x"02112623", + 00000652 => x"00050993", + 00000653 => x"00058493", + 00000654 => x"00c10913", + 00000655 => x"00358413", + 00000656 => x"04099263", + 00000657 => x"fa402783", + 00000658 => x"fe07dee3", + 00000659 => x"00f90023", + 00000660 => x"00190913", + 00000661 => x"fff40793", + 00000662 => x"02849263", + 00000663 => x"02c12083", + 00000664 => x"02812403", + 00000665 => x"00c12503", + 00000666 => x"02412483", + 00000667 => x"02012903", + 00000668 => x"01c12983", + 00000669 => x"03010113", + 00000670 => x"00008067", + 00000671 => x"00078413", + 00000672 => x"fc1ff06f", + 00000673 => x"fa802783", + 00000674 => x"00300513", + 00000675 => x"0017e793", + 00000676 => x"faf02423", + 00000677 => x"e65ff0ef", + 00000678 => x"00040513", + 00000679 => x"f41ff0ef", + 00000680 => x"00000513", + 00000681 => x"e55ff0ef", + 00000682 => x"fa802783", + 00000683 => x"ffe7f793", + 00000684 => x"faf02423", + 00000685 => x"00a90023", + 00000686 => x"f99ff06f", + 00000687 => x"fd010113", + 00000688 => x"01412c23", + 00000689 => x"80000a37", + 00000690 => x"02812423", + 00000691 => x"004a0793", + 00000692 => x"02112623", + 00000693 => x"02912223", + 00000694 => x"03212023", + 00000695 => x"01312e23", + 00000696 => x"01512a23", + 00000697 => x"01612823", + 00000698 => x"01712623", + 00000699 => x"01812423", + 00000700 => x"00100713", + 00000701 => x"00e7a023", + 00000702 => x"00050413", + 00000703 => x"004a0a13", + 00000704 => x"02051863", + 00000705 => x"ffff1537", + 00000706 => x"cfc50513", + 00000707 => x"aedff0ef", + 00000708 => x"080005b7", + 00000709 => x"00040513", + 00000710 => x"f01ff0ef", + 00000711 => x"4788d7b7", + 00000712 => x"afe78793", + 00000713 => x"02f50463", + 00000714 => x"00000513", + 00000715 => x"01c0006f", + 00000716 => x"ffff1537", + 00000717 => x"d1c50513", + 00000718 => x"ac1ff0ef", + 00000719 => x"dd1ff0ef", + 00000720 => x"fc0518e3", + 00000721 => x"00300513", + 00000722 => x"b41ff0ef", + 00000723 => x"080009b7", + 00000724 => x"00498593", + 00000725 => x"00040513", + 00000726 => x"ec1ff0ef", + 00000727 => x"00050a93", + 00000728 => x"00898593", + 00000729 => x"00040513", + 00000730 => x"eb1ff0ef", + 00000731 => x"ff002c03", + 00000732 => x"00050b13", + 00000733 => x"ffcafb93", + 00000734 => x"00000913", + 00000735 => x"00000493", + 00000736 => x"00c98993", + 00000737 => x"013905b3", + 00000738 => x"05791c63", + 00000739 => x"016484b3", + 00000740 => x"00200513", + 00000741 => x"fa049ae3", + 00000742 => x"ffff1537", + 00000743 => x"d2850513", + 00000744 => x"a59ff0ef", + 00000745 => x"02c12083", + 00000746 => x"02812403", + 00000747 => x"800007b7", + 00000748 => x"0157a023", + 00000749 => x"000a2023", + 00000750 => x"02412483", + 00000751 => x"02012903", + 00000752 => x"01c12983", + 00000753 => x"01812a03", + 00000754 => x"01412a83", + 00000755 => x"01012b03", + 00000756 => x"00c12b83", + 00000757 => x"00812c03", + 00000758 => x"03010113", + 00000759 => x"00008067", + 00000760 => x"00040513", + 00000761 => x"e35ff0ef", + 00000762 => x"012c07b3", + 00000763 => x"00a484b3", + 00000764 => x"00a7a023", + 00000765 => x"00490913", + 00000766 => x"f8dff06f", + 00000767 => x"fd010113", + 00000768 => x"02812423", + 00000769 => x"02912223", + 00000770 => x"03212023", + 00000771 => x"02112623", + 00000772 => x"01312e23", + 00000773 => x"00050413", + 00000774 => x"00b12623", + 00000775 => x"00c10913", + 00000776 => x"00350493", + 00000777 => x"00094983", + 00000778 => x"d75ff0ef", + 00000779 => x"fa802783", + 00000780 => x"00200513", + 00000781 => x"00190913", + 00000782 => x"0017e793", + 00000783 => x"faf02423", + 00000784 => x"cb9ff0ef", + 00000785 => x"00048513", + 00000786 => x"d95ff0ef", + 00000787 => x"00098513", + 00000788 => x"ca9ff0ef", + 00000789 => x"fa802783", + 00000790 => x"ffe7f793", + 00000791 => x"faf02423", + 00000792 => x"cf9ff0ef", + 00000793 => x"00048793", + 00000794 => x"fff48493", + 00000795 => x"faf41ce3", + 00000796 => x"02c12083", + 00000797 => x"02812403", + 00000798 => x"02412483", + 00000799 => x"02012903", + 00000800 => x"01c12983", + 00000801 => x"03010113", 00000802 => x"00008067", - 00000803 => x"ff010113", - 00000804 => x"00812423", - 00000805 => x"01212023", - 00000806 => x"00112623", - 00000807 => x"00912223", - 00000808 => x"00050413", - 00000809 => x"00a00913", - 00000810 => x"00044483", - 00000811 => x"00140413", - 00000812 => x"00049e63", - 00000813 => x"00c12083", - 00000814 => x"00812403", - 00000815 => x"00412483", - 00000816 => x"00012903", - 00000817 => x"01010113", - 00000818 => x"00008067", - 00000819 => x"01249663", - 00000820 => x"00d00513", - 00000821 => x"f69ff0ef", - 00000822 => x"00048513", - 00000823 => x"f61ff0ef", - 00000824 => x"fc9ff06f", - 00000825 => x"00757513", - 00000826 => x"0036f793", - 00000827 => x"00167613", - 00000828 => x"00a51513", - 00000829 => x"00d79793", - 00000830 => x"0015f593", - 00000831 => x"00f567b3", - 00000832 => x"00f61613", - 00000833 => x"00c7e7b3", - 00000834 => x"00959593", - 00000835 => x"fa800713", - 00000836 => x"00b7e7b3", - 00000837 => x"00072023", - 00000838 => x"1007e793", - 00000839 => x"00f72023", - 00000840 => x"00008067", - 00000841 => x"fa800713", - 00000842 => x"00072683", - 00000843 => x"00757793", - 00000844 => x"00100513", - 00000845 => x"00f51533", - 00000846 => x"00d56533", - 00000847 => x"00a72023", - 00000848 => x"00008067", - 00000849 => x"fa800713", - 00000850 => x"00072683", - 00000851 => x"00757513", - 00000852 => x"00100793", - 00000853 => x"00a797b3", - 00000854 => x"fff7c793", - 00000855 => x"00d7f7b3", - 00000856 => x"00f72023", - 00000857 => x"00008067", - 00000858 => x"faa02623", - 00000859 => x"fa802783", - 00000860 => x"fe07cee3", - 00000861 => x"fac02503", - 00000862 => x"00008067", - 00000863 => x"fe802503", - 00000864 => x"01055513", - 00000865 => x"00157513", - 00000866 => x"00008067", - 00000867 => x"00100793", - 00000868 => x"01f00713", - 00000869 => x"00a797b3", - 00000870 => x"00a74a63", - 00000871 => x"fc802703", - 00000872 => x"00f747b3", - 00000873 => x"fcf02423", - 00000874 => x"00008067", - 00000875 => x"fcc02703", - 00000876 => x"00f747b3", - 00000877 => x"fcf02623", - 00000878 => x"00008067", - 00000879 => x"fc000793", - 00000880 => x"00a7a423", - 00000881 => x"00b7a623", - 00000882 => x"00008067", - 00000883 => x"69617641", - 00000884 => x"6c62616c", - 00000885 => x"4d432065", - 00000886 => x"0a3a7344", - 00000887 => x"203a6820", - 00000888 => x"706c6548", - 00000889 => x"3a72200a", - 00000890 => x"73655220", - 00000891 => x"74726174", - 00000892 => x"3a75200a", - 00000893 => x"6c705520", - 00000894 => x"0a64616f", - 00000895 => x"203a7320", - 00000896 => x"726f7453", - 00000897 => x"6f742065", - 00000898 => x"616c6620", - 00000899 => x"200a6873", - 00000900 => x"4c203a6c", - 00000901 => x"2064616f", - 00000902 => x"6d6f7266", - 00000903 => x"616c6620", - 00000904 => x"200a6873", - 00000905 => x"45203a65", - 00000906 => x"75636578", - 00000907 => x"00006574", - 00000908 => x"746f6f42", - 00000909 => x"2e676e69", - 00000910 => x"0a0a2e2e", - 00000911 => x"00000000", - 00000912 => x"52450a07", - 00000913 => x"5f524f52", - 00000914 => x"00000000", - 00000915 => x"00007830", - 00000916 => x"52455b0a", - 00000917 => x"00002052", - 00000918 => x"00000a5d", - 00000919 => x"69617741", - 00000920 => x"676e6974", - 00000921 => x"6f656e20", - 00000922 => x"32337672", - 00000923 => x"6578655f", - 00000924 => x"6e69622e", - 00000925 => x"202e2e2e", - 00000926 => x"00000000", - 00000927 => x"64616f4c", - 00000928 => x"2e676e69", - 00000929 => x"00202e2e", - 00000930 => x"00004b4f", - 00000931 => x"65206f4e", - 00000932 => x"75636578", - 00000933 => x"6c626174", - 00000934 => x"76612065", - 00000935 => x"616c6961", - 00000936 => x"2e656c62", - 00000937 => x"00000000", - 00000938 => x"74697257", - 00000939 => x"00002065", - 00000940 => x"74796220", - 00000941 => x"74207365", - 00000942 => x"5053206f", - 00000943 => x"6c662049", - 00000944 => x"20687361", - 00000945 => x"00783040", - 00000946 => x"7928203f", - 00000947 => x"20296e2f", - 00000948 => x"00000000", - 00000949 => x"616c460a", - 00000950 => x"6e696873", - 00000951 => x"2e2e2e67", - 00000952 => x"00000020", - 00000953 => x"3c0a0a0a", - 00000954 => x"454e203c", - 00000955 => x"3356524f", - 00000956 => x"6f422032", - 00000957 => x"6f6c746f", - 00000958 => x"72656461", - 00000959 => x"0a3e3e20", - 00000960 => x"444c420a", - 00000961 => x"4a203a56", - 00000962 => x"33206e61", - 00000963 => x"30322031", - 00000964 => x"480a3232", - 00000965 => x"203a5657", - 00000966 => x"00000020", - 00000967 => x"4b4c430a", - 00000968 => x"0020203a", - 00000969 => x"53494d0a", - 00000970 => x"00203a41", - 00000971 => x"5550430a", - 00000972 => x"0020203a", - 00000973 => x"434f530a", - 00000974 => x"0020203a", - 00000975 => x"454d490a", - 00000976 => x"00203a4d", - 00000977 => x"74796220", - 00000978 => x"40207365", - 00000979 => x"00000000", - 00000980 => x"454d440a", - 00000981 => x"00203a4d", - 00000982 => x"75410a0a", - 00000983 => x"6f626f74", - 00000984 => x"6920746f", - 00000985 => x"7338206e", - 00000986 => x"7250202e", - 00000987 => x"20737365", - 00000988 => x"2079656b", - 00000989 => x"61206f74", - 00000990 => x"74726f62", - 00000991 => x"00000a2e", - 00000992 => x"0000000a", - 00000993 => x"726f6241", - 00000994 => x"2e646574", - 00000995 => x"00000a0a", - 00000996 => x"444d430a", - 00000997 => x"00203e3a", - 00000998 => x"61766e49", - 00000999 => x"2064696c", - 00001000 => x"00444d43", - 00001001 => x"33323130", - 00001002 => x"37363534", - 00001003 => x"62613938", - 00001004 => x"66656463" + 00000803 => x"746f6f42", + 00000804 => x"2e676e69", + 00000805 => x"0a0a2e2e", + 00000806 => x"00000000", + 00000807 => x"52450a07", + 00000808 => x"5f524f52", + 00000809 => x"00000000", + 00000810 => x"00007830", + 00000811 => x"52455b0a", + 00000812 => x"20524f52", + 00000813 => x"6e55202d", + 00000814 => x"65707865", + 00000815 => x"64657463", + 00000816 => x"63786520", + 00000817 => x"69747065", + 00000818 => x"20216e6f", + 00000819 => x"7561636d", + 00000820 => x"003d6573", + 00000821 => x"70656d20", + 00000822 => x"00003d63", + 00000823 => x"76746d20", + 00000824 => x"003d6c61", + 00000825 => x"7274205d", + 00000826 => x"676e6979", + 00000827 => x"206f7420", + 00000828 => x"75736572", + 00000829 => x"2e2e656d", + 00000830 => x"00000a2e", + 00000831 => x"69617741", + 00000832 => x"676e6974", + 00000833 => x"6f656e20", + 00000834 => x"32337672", + 00000835 => x"6578655f", + 00000836 => x"6e69622e", + 00000837 => x"202e2e2e", + 00000838 => x"00000000", + 00000839 => x"64616f4c", + 00000840 => x"2e676e69", + 00000841 => x"00202e2e", + 00000842 => x"00004b4f", + 00000843 => x"3c0a0a0a", + 00000844 => x"454e203c", + 00000845 => x"3356524f", + 00000846 => x"6f422032", + 00000847 => x"6f6c746f", + 00000848 => x"72656461", + 00000849 => x"0a3e3e20", + 00000850 => x"444c420a", + 00000851 => x"46203a56", + 00000852 => x"20206265", + 00000853 => x"30322033", + 00000854 => x"480a3232", + 00000855 => x"203a5657", + 00000856 => x"00000020", + 00000857 => x"4b4c430a", + 00000858 => x"0020203a", + 00000859 => x"53494d0a", + 00000860 => x"00203a41", + 00000861 => x"5550430a", + 00000862 => x"0020203a", + 00000863 => x"434f530a", + 00000864 => x"0020203a", + 00000865 => x"454d490a", + 00000866 => x"00203a4d", + 00000867 => x"74796220", + 00000868 => x"40207365", + 00000869 => x"00000000", + 00000870 => x"454d440a", + 00000871 => x"00203a4d", + 00000872 => x"75410a0a", + 00000873 => x"6f626f74", + 00000874 => x"6920746f", + 00000875 => x"7338206e", + 00000876 => x"7250202e", + 00000877 => x"20737365", + 00000878 => x"20796e61", + 00000879 => x"2079656b", + 00000880 => x"61206f74", + 00000881 => x"74726f62", + 00000882 => x"00000a2e", + 00000883 => x"726f6241", + 00000884 => x"2e646574", + 00000885 => x"00000a0a", + 00000886 => x"0000000a", + 00000887 => x"69617641", + 00000888 => x"6c62616c", + 00000889 => x"4d432065", + 00000890 => x"0a3a7344", + 00000891 => x"203a6820", + 00000892 => x"706c6548", + 00000893 => x"3a72200a", + 00000894 => x"73655220", + 00000895 => x"74726174", + 00000896 => x"3a75200a", + 00000897 => x"6c705520", + 00000898 => x"0a64616f", + 00000899 => x"203a7320", + 00000900 => x"726f7453", + 00000901 => x"6f742065", + 00000902 => x"616c6620", + 00000903 => x"200a6873", + 00000904 => x"4c203a6c", + 00000905 => x"2064616f", + 00000906 => x"6d6f7266", + 00000907 => x"616c6620", + 00000908 => x"200a6873", + 00000909 => x"45203a65", + 00000910 => x"75636578", + 00000911 => x"00006574", + 00000912 => x"444d430a", + 00000913 => x"00203e3a", + 00000914 => x"65206f4e", + 00000915 => x"75636578", + 00000916 => x"6c626174", + 00000917 => x"76612065", + 00000918 => x"616c6961", + 00000919 => x"2e656c62", + 00000920 => x"00000000", + 00000921 => x"74697257", + 00000922 => x"00002065", + 00000923 => x"74796220", + 00000924 => x"74207365", + 00000925 => x"5053206f", + 00000926 => x"6c662049", + 00000927 => x"20687361", + 00000928 => x"00783040", + 00000929 => x"7928203f", + 00000930 => x"20296e2f", + 00000931 => x"00000000", + 00000932 => x"616c460a", + 00000933 => x"6e696873", + 00000934 => x"2e2e2e67", + 00000935 => x"00000020", + 00000936 => x"20296328", + 00000937 => x"53207962", + 00000938 => x"68706574", + 00000939 => x"4e206e61", + 00000940 => x"69746c6f", + 00000941 => x"680a676e", + 00000942 => x"73707474", + 00000943 => x"672f2f3a", + 00000944 => x"75687469", + 00000945 => x"6f632e62", + 00000946 => x"74732f6d", + 00000947 => x"746c6f6e", + 00000948 => x"2f676e69", + 00000949 => x"726f656e", + 00000950 => x"00323376", + 00000951 => x"61766e49", + 00000952 => x"2064696c", + 00000953 => x"00444d43", + 00000954 => x"20657865", + 00000955 => x"6e676973", + 00000956 => x"72757461", + 00000957 => x"61662065", + 00000958 => x"00006c69", + 00000959 => x"00000000", + 00000960 => x"65637865", + 00000961 => x"6e696465", + 00000962 => x"4d492067", + 00000963 => x"63204d45", + 00000964 => x"63617061", + 00000965 => x"00797469", + 00000966 => x"63656863", + 00000967 => x"6d75736b", + 00000968 => x"69616620", + 00000969 => x"0000006c", + 00000970 => x"00000000", + 00000971 => x"00000000", + 00000972 => x"20495053", + 00000973 => x"73616c66", + 00000974 => x"63612068", + 00000975 => x"73736563", + 00000976 => x"69616620", + 00000977 => x"0064656c", + 00000978 => x"33323130", + 00000979 => x"37363534", + 00000980 => x"62613938", + 00000981 => x"66656463" ); end neorv32_bootloader_image; diff --git a/rtl/core/neorv32_package.vhd b/rtl/core/neorv32_package.vhd index 03320a7b2..8e3eb5327 100644 --- a/rtl/core/neorv32_package.vhd +++ b/rtl/core/neorv32_package.vhd @@ -63,7 +63,7 @@ package neorv32_package is -- Architecture Constants (do not modify!) ------------------------------------------------ -- ------------------------------------------------------------------------------------------- constant data_width_c : natural := 32; -- native data path width - do not change! - constant hw_version_c : std_ulogic_vector(31 downto 0) := x"01060702"; -- no touchy! + constant hw_version_c : std_ulogic_vector(31 downto 0) := x"01060703"; -- no touchy! constant archid_c : natural := 19; -- official NEORV32 architecture ID - hands off! -- Check if we're inside the Matrix ------------------------------------------------------- From b8c782b231a27da09af1cba2fab4bbb466fa0a93 Mon Sep 17 00:00:00 2001 From: stnolting Date: Thu, 3 Feb 2022 09:08:30 +0100 Subject: [PATCH 5/7] [docs/userguide] minor updates on bootloader console --- docs/userguide/executable_upload.adoc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/userguide/executable_upload.adoc b/docs/userguide/executable_upload.adoc index 0f24bb4f5..0b9e5ecb2 100644 --- a/docs/userguide/executable_upload.adoc +++ b/docs/userguide/executable_upload.adoc @@ -49,25 +49,25 @@ automatic boot sequence and to start the actual bootloader user interface consol ---- << NEORV32 Bootloader >> -BLDV: Mar 23 2021 -HWV: 0x01050208 -CLK: 0x05F5E100 -MISA: 0x40901105 -ZEXT: 0x00000023 -PROC: 0x0EFF0037 +BLDV: Feb 3 2022 +HWV: 0x01060703 +CLK: 0x05f5e100 +MISA: 0x40901107 +CPU: 0xc00006ab +SOC: 0x7b7f402f IMEM: 0x00004000 bytes @ 0x00000000 DMEM: 0x00002000 bytes @ 0x80000000 -Autoboot in 8s. Press key to abort. +Autoboot in 8s. Press any key to abort. Aborted. Available commands: -h: Help -r: Restart -u: Upload -s: Store to flash -l: Load from flash -e: Execute + h: Help + r: Restart + u: Upload + s: Store to flash + l: Load from flash + e: Execute CMD:> ---- From 94ed9d344a6cd534ebbd36cac046e81e846e57f4 Mon Sep 17 00:00:00 2001 From: stnolting Date: Thu, 3 Feb 2022 09:14:08 +0100 Subject: [PATCH 6/7] :books: [docs/datasheet] reworked section "Bootloader" --- docs/datasheet/software.adoc | 110 ++++++++++++++++++----------------- 1 file changed, 58 insertions(+), 52 deletions(-) diff --git a/docs/datasheet/software.adoc b/docs/datasheet/software.adoc index 7be369093..0599c3f84 100644 --- a/docs/datasheet/software.adoc +++ b/docs/datasheet/software.adoc @@ -405,35 +405,42 @@ int __neorv32_crt0_after_main(int32_t return_code) { === Bootloader [NOTE] -This section illustrated the **default** bootloader from the repository. The bootloader can be customized +This section refers to the **default** bootloader from the repository. The bootloader can be customized to target application-specific scenarios. See User Guide section https://stnolting.github.io/neorv32/ug/#_customizing_the_internal_bootloader[Customizing the Internal Bootloader] for more information. -The default NEORV32 bootloader (source code `sw/bootloader/bootloader.c`) provides a build-in firmware that -allows to upload new application executables via UART at every time and to optionally store/boot them to/from -an external SPI flash. It features a simple "automatic boot" feature that will try to fetch an executable -from SPI flash if there is _no_ UART user interaction. This allows to build processor setup with -non-volatile application storage, which can be updated at any time. +The NEORV32 bootloader (source code `sw/bootloader/bootloader.c`) provides an optional build-in firmware that +allows to upload new application executables without the need to re-synthesize the FPGA's bitstream. +A UART connection is used to provide a simple text-based user interface that allows to upload executables. -The bootloader is only implemented if the <<_int_bootloader_en>> generic is _true_. This will -select the <<_indirect_boot>> boot configuration. +Furthermore, the bootloader provides options to program executable to a processor-external SPI flash. +An "auto boot" feature can optionally fetch this executable +right after reset if there is no user interaction via UART. This allows to build processor setup with +non-volatile application storage, which can still be updated at any time. -.Hardware requirements of the _default_ NEORV32 bootloader +The bootloader is implemented if the <<_int_bootloader_en>> generic is _true_ (default). This will automatically +select the CPU's <<_indirect_boot>> boot configuration. + +.Hardware Requirements for the _Default_ NEORV32 Bootloader [IMPORTANT] -**REQUIRED**: The bootloader requires the CSR access CPU extension (<<_cpu_extension_riscv_zicsr>> generic is _true_) +**REQUIRED**: The bootloader requires the privileged architecture CPU extension +(<<_zicsr_control_and_status_register_access_privileged_architecture>>) and at least 512 bytes of data memory (processor-internal DMEM or external DMEM). + + -_RECOMMENDED_: For user interaction via UART (like uploading executables) the primary UART (UART0) has to be -implemented (<<_io_uart0_en>> generic is _true_). Without UART the bootloader does not make much sense. However, auto-boot -via SPI is still supported but the bootloader should be customized (see User Guide) for this purpose. + +**RECOMMENDED**: For user interaction via UART (like uploading executables) the primary UART +(<<_primary_universal_asynchronous_receiver_and_transmitter_uart0>>) has to be implemented. +Without UART0 the auto-boot via SPI is still supported but the bootloader should be customized +(see User Guide) for this purpose. + + + +**RECOMMENDED**: The default bootloader uses bit 0 of the GPIO controller's +(<<_general_purpose_input_and_output_port_gpio>>) output port to drive a high-active "heart beat" status LED. + + -_OPTIONAL_: The default bootloader uses bit 0 of the GPIO output port as "heart beat" and status LED if the -GPIO controller is implemented (<<_io_gpio_en>> generic is _true_). + +**RECOMMENDED**: The MTIME machine timer (<<_machine_system_timer_mtime>> generic is _true_) is used to control +blinking of the status LED and also to automatically trigger the auto-boot sequence. + + -_OPTIONAL_: The MTIME machine timer (<<_io_mtime_en>> generic is _true_) and the SPI controller -(<<_io_spi_en>> generic is _true_) are required in order to use the bootloader's auto-boot feature -(automatic boot from external SPI flash if there is no user interaction via UART). +**OPTIONAL**: The SPI controller (<<_serial_peripheral_interface_controller_spi>>) is required +to store/load executable from external flash (for the auto boot feature). To interact with the bootloader, connect the primary UART (UART0) signals (`uart0_txd_o` and `uart0_rxd_o`) of the processor's top entity via a serial port (-adapter) to your computer (hardware flow control is @@ -447,32 +454,32 @@ Terminal console settings (`19200-8-N-1`): * no parity bit * 1 stop bit * newline on `\r\n` (carriage return, newline) -* no transfer protocol / control flow protocol - just the raw byte stuff +* no transfer protocol / control flow protocol - just raw bytes [IMPORTANT] _Any_ terminal program that can connect to a serial port should work. However, make sure the program can transfer data in _raw_ byte mode without any protocol overhead around it. Some terminal programs struggle with transmitting files larger than 4kB (see https://github.com/stnolting/neorv32/pull/215). Try a different program -if uploading a binary does not work (terminal stall). +if uploading a binary does not work. -The bootloader uses the LSB of the top entity's `gpio_o` output port as high-active status LED (all other -output pin are set to low level by the bootloader). After reset, this LED will start blinking at ~2Hz and the +The bootloader uses the LSB of the top entity's `gpio_o` output port as high-active **status LED** (all other +output pin are set to low level). After reset, this LED will start blinking at ~2Hz and the following intro screen should show up in your terminal: [source] ---- << NEORV32 Bootloader >> -BLDV: Mar 23 2021 -HWV: 0x01050208 -CLK: 0x05F5E100 -MISA: 0x40901105 -CPU: 0x00000023 -SOC: 0x0EFF0037 +BLDV: Feb 3 2022 +HWV: 0x01060703 +CLK: 0x05f5e100 +MISA: 0x40901107 +CPU: 0xc00006ab +SOC: 0x7b7f402f IMEM: 0x00004000 bytes @ 0x00000000 DMEM: 0x00002000 bytes @ 0x80000000 -Autoboot in 8s. Press key to abort. +Autoboot in 8s. Press any key to abort. ---- This start-up screen also gives some brief information about the bootloader and several system configuration parameters: @@ -490,38 +497,37 @@ This start-up screen also gives some brief information about the bootloader and | `DMEM` | DMEM memory base address and size in byte (from the _MEM_INT_DMEM_SIZE_ generic). |======================= -Now you have 8 seconds to press any key. Otherwise, the bootloader starts the auto boot sequence. When +Now you have 8 seconds to press _any_ key. Otherwise, the bootloader starts the <<_auto_boot_sequence>>. When you press any key within the 8 seconds, the actual bootloader user console starts: [source] ---- << NEORV32 Bootloader >> -BLDV: Mar 23 2021 -HWV: 0x01050208 -CLK: 0x05F5E100 -USER: 0x10000DE0 -MISA: 0x40901105 -CPU: 0x00000023 -SOC: 0x0EFF0037 +BLDV: Feb 3 2022 +HWV: 0x01060703 +CLK: 0x05f5e100 +MISA: 0x40901107 +CPU: 0xc00006ab +SOC: 0x7b7f402f IMEM: 0x00004000 bytes @ 0x00000000 DMEM: 0x00002000 bytes @ 0x80000000 -Autoboot in 8s. Press key to abort. -Aborted. +Autoboot in 8s. Press any key to abort. +Aborted. <1> Available commands: -h: Help -r: Restart -u: Upload -s: Store to flash -l: Load from flash -e: Execute + h: Help + r: Restart + u: Upload + s: Store to flash + l: Load from flash + e: Execute CMD:> ---- +<1> Auto boot sequence aborted due to user console input. -The auto-boot countdown is stopped and now you can enter a command from the list to perform the -corresponding operation: +The auto boot countdown is stopped and the bootloader's user console is ready to receive one of the following commands: * `h`: Show the help text (again) * `r`: Restart the bootloader and the auto-boot sequence @@ -546,6 +552,7 @@ https://stnolting.github.io/neorv32/ug/#_programming_an_external_spi_flash_via_t :sectnums: ==== Auto Boot Sequence + When you reset the NEORV32 processor, the bootloader waits 8 seconds for a UART console input before it starts the automatic boot sequence. This sequence tries to fetch a valid boot image from the external SPI flash, connected to SPI chip select `spi_csn_o(0)`. If a valid boot image is found that can be successfully @@ -556,21 +563,20 @@ is no valid boot image found, and error code will be shown. :sectnums: ==== Bootloader Error Codes -If something goes wrong during bootloader operation, an error code is shown. In this case the processor -stalls, a bell command and one of the following error codes are send to the terminal, the bootloader status -LED is permanently activated and the system must be manually reset. +If something goes wrong during bootloader operation, an error code and a short message is shown. In this case the processor +stalls,, the bootloader status LED is permanently activated and the processor must be reset manually. [TIP] In many cases the error source is just _temporary_ (like some HF spike during an UART upload). Just try again. -[cols="<2,<13"] +[cols="<2,<8"] [grid="rows"] |======================= | **`ERROR_0`** | If you try to transfer an invalid executable (via UART or from the external SPI flash), this error message shows up. There might be a transfer protocol configuration error in the terminal program. Also, if no SPI flash was found during an auto-boot attempt, this message will be displayed. | **`ERROR_1`** | Your program is way too big for the internal processor’s instructions memory. Increase the memory size or reduce your application code. | **`ERROR_2`** | This indicates a checksum error. Something went wrong during the transfer of the program image (upload via UART or loading from the external SPI flash). If the error was caused by a UART upload, just try it again. When the error was generated during a flash access, the stored image might be corrupted. | **`ERROR_3`** | This error occurs if the attached SPI flash cannot be accessed. Make sure you have the right type of flash and that it is properly connected to the NEORV32 SPI port using chip select #0. -| **`ERR 0x???????? 0x???????? 0x????????`** | The bootloader encountered an exception during operation. This might be caused when it tries to access peripherals that were not implemented during synthesis. Example: executing `l` or `s` (SPI flash operations) without the SPI module beeing implemented. +| **`ERROR - Unexpected exception!`** | The bootloader encountered an exception during operation. This might be caused when it tries to access peripherals that were not implemented during synthesis. Example: executing commands `l` or `s` (SPI flash operations) without the SPI module beeing implemented. |======================= From 42c4acc2734e83661340f233172bfd899bf9ae26 Mon Sep 17 00:00:00 2001 From: stnolting Date: Thu, 3 Feb 2022 09:14:44 +0100 Subject: [PATCH 7/7] [CHANGELOG] added version 1.6.7.3 bootloader rework --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86493d7eb..4ee6d37a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ The version number is globally defined by the `hw_version_c` constant in the mai | Date (*dd.mm.yyyy*) | Version | Comment | |:----------:|:-------:|:--------| +| 03.02.2022 | 1.6.7.3 | using `LTO` (link-time-optimization) option for **bootloader**; improved bootloader user console; see [PR #268](https://github.com/stnolting/neorv32/pull/268) | | 31.01.2022 | 1.6.7.2 | :bug: fixed minor bug in **bootloader'd MTIME handling** (bootloader crashed if `Zicntr` ISA extension not enabled), fixed minor issues in MTIME and `time` CSRs handling; added MTIME example program; see [PR #267](https://github.com/stnolting/neorv32/pull/267) | | 30.01.2022 | 1.6.7.1 | :sparkles: added **`Zxcfu` ISA extension for user-defined custom RISC-V instructions**; see [PR #264](https://github.com/stnolting/neorv32/pull/264) | | 28.01.2022 |[**:rocket:1.6.7**](https://github.com/stnolting/neorv32/releases/tag/v1.6.7) | **New release** |