Releases: Nuclei-Software/nuclei-sdk
Nuclei embedded Software Development Kit, Release 0.7.1
Nuclei embedded Software Development Kit, Release 0.7.0
This is release version 0.7.0 of Nuclei SDK.
-
Application
- Add
demo_plic
case to show how to use PLIC related API in PLIC interrupt mode. - Add
demo_clint_timer
case to show how to use systimer in CLINT interrupt mode not ECLIC interrupt mode. - Update
demo_pmp
case to make it suitable for when PMP not present. - Change download mode from
ddr
tosram
for smp and cache cases to be suitable for some custom soc sdk.
- Add
-
NMSIS
- Add more ECC related macros for
milm_ctl/mdlm_ctl/mcache_ctl
csr - Add more PLIC interrupt API in
core_feature_plic.h
- Add more interrupt related API when in plic interrupt mode, see changes in
core_feature_base.h
- Bump NMSIS version to 1.3.0 with updated NMSIS Core/DSP/NN header files and prebuilt library
- Add more ECC related macros for
-
SoC
- Add Terapines ZCC NPK support, require Nuclei Studio >= 2024.06
- Merge newlib stub code from many files into one file called
stubs.c
for all SoC supported in Nuclei SDK - Enable I/D cache for evalsoc before data/bss initialization steps using
cpufeature.h
for faster data initialization - gd32vf103 default CORE name changed from
n205
ton203
which are the same in software - gd32vw55x default CORE name changed from
n307fd
ton300fd
which are the same in software - evalsoc default CORE name changed from
n307fd
ton300fd
which are the same in software - Add plic interrupt and exception related handling code for evalsoc
- Fix BPU is not enabled during startup for startup code for IAR compiler, which will increase performance of 600/900/1000 series a lot
-
Build System
- Introduce
XLCFG_xxx
make variable for evalsoc which is only internally used by Nuclei to overwrite default cpufeature.h macro definition, which will be useful for some applications such as demo_cidu, demo_cache, demo_spmp, demo_smpu and demo_smode_eclic - Introduce
ECC_EN
make variable for evalsoc which is only internally used by Nuclei to control whether ECC check is enabled or disabled. - Add core
n200e/n202/n202e
and removen205/n205e/n305/n307/n307fd
which can be replaced byn203/n203e/n300/n300f/n300fd
- Prebuilt IAR projects and workbench are updated due to evalsoc support changes for plic and clint interrupt modes.
- Add
SYSCLK
make variable for manually set default SYSTEM_CLOCK macro in evalsoc, it is useful forCODESIZE=1
case - Add
QEMU_MC_EXTOPT
make variable to pass extra Nuclei Qemu-M
machine options for evalsoc. - Add
QEMU_CPU_EXTOPT
make variable to pass extra Nuclei Qemu-cpu
cpu options for evalsoc.
- Introduce
Full Changelog: 0.6.0...0.7.0
Nuclei embedded Software Development Kit, Release 0.6.0
This is release version 0.6.0 of Nuclei SDK.
Note
- Please use Nuclei Studio 2024.06 with this Nuclei SDK 0.6.0.
- There are many changes in this release, so we decide to name it as 0.6.0, not 0.5.1
- This version introduced ThreadX and FreeRTOS-SMP support for Nuclei RISC-V Processors.
- This version introduced a
profiling
middleware and an example to show code coverage and profiling technology
using gcov and gprof in Nuclei Studio 2024.06. - This version introduced support for Nuclei 100 series RISC-V CPU, but in seperated Nuclei SDK branches called master_n100 or develop_n100, see https://github.com/Nuclei-Software/nuclei-sdk/tree/master_n100
- This version introduced support for gd32vw55x chip and Nuclei DLink Board.
- Better Terapines ZCC toolchain integrated in Nuclei SDK and Nuclei Studio, try ZStudio Lite version here https://www.terapines.com/products/, if you want to take a try, please use nuclei sdk develop branch code and import to Nuclei Studio, and take a try.
- Better IAR Workbench support in Nuclei SDK, with Baremetal SMP and FreeRTOS SMP supported.
-
Application
- Add ThreadX RTOS example to show how to use ThreadX in SDK.
- Add Nuclei 1000 series benchmark flags for benchmark examples.
- Add
demo_vnice
example to show how to use Nuclei Vector NICE feature. - Add
demo_profiling
example to how to use gprof and gcov in Nuclei Studio. - Add
smphello
,demo_cidu
baremetal SMP examples in IAR workbench. - Add FreeRTOS
smpdemo
example to show how to use SMP version of FreeRTOS. - Optimize and fix
cpuinfo
example for better cpu feature dection. - Optimize benchmark gcc13 flags to provide better performance.
- Fix wrong ipc calculating for benchmark examples.
- Reset mcycle and minstret when read cycle or instret in benchmark examples.
- Fix dhrystone strcmp_xlcz.S removed by make clean in windows.
- Update benchmark flags for benchmark examples when compiled with Terapines ZCC Toolchain.
- Fix
lowpower
example no need to usenewlib_full
library.
-
NMSIS
- Update many CSR structure defined in
core_feature_base.h
such asCSR_MCFGINFO_Type
,CSR_MDLMCTL_Type
andCSR_MCACHECTL_Type
etc. - Add
__set_rv_cycle
and__set_rv_instret
API to set cycle and instret csr registers. - Add
CSR_MTLBCFGINFO_Type
CSR structure incore_feature_base.h
. - Fix protection type error in PMP/sPMP API.
- Fix wrong CLIC_CLICINFO_VER_Msk and CLIC_CLICINFO_NUM_Msk macro value in
core_feature_eclic.h
- Add
__ROR64
incore_compatiable.h
. - Add and update DSP intrinsic APIs in
core_feature_dsp.h
. - Add and update Nuclei customized CSRs in
riscv_encoding.h
. - Sync NMSIS DSP/NN library 1.2.1
- Update many CSR structure defined in
-
SoC
- Redesign
evalsoc
reference SoC support software for better evalsoc and nuclei cpu support, see https://doc.nucleisys.com/nuclei_sdk/design/soc/evalsoc.html#usage - Remove
-msave-restore
in npk.yml to fix dhrystone benchmark value is low in Nuclei Studio issue. - No need to get system clock using
get_cpu_freq
for gd32vf103. - In npk.yml, when pass
-isystem=
should be changed to-isystem =
as a workaround for Nuclei Studio to pass correct system include header. - Update standard c library and arch ext prompt for soc npk.yml for better hints.
- Add
gd32vf103c_dlink
board support for Nuclei DLink development. - Fix non-ABS relocation R_RISCV_JAL against symbol '_start' fail for nuclei_llvm toolchain
- Add Nuclei
ux1000fd
support in both NPK and Makefile based Build System. - Add support for gd32vw55x SoC which is Gigadevice new Nuclei RISC-V N300 Processor based WiFi MCU.
- Add SPLITMODE support for evalsoc when evaluate NA class Core.
- Allow custom linker script if npk variable
linker_script
is not empty. - Explicit declare asm function in gcc asm code if that part of code is a function, which is required by
gprof
plugin in Nuclei Studio. - Clear zc bit for non zc elf in mmsic_ctl csr for cases when cpu is not reset but zc bit is set before.
- Only print CSR value when CSR is present during
__premain_init
for evalsoc. - Fix undefined symbol when link cpp for clang
__eh_frame_start/__eh_frame_hdr_start/__eh_frame_end/__eh_frame_hdr_end
- Add LDSPEC_EN, L2_EN and BPU_EN for evalsoc in Makefile based build system to control
load speculative, L2 cache and BPU enable or disable, which is only internally used. - Move eclic and interrupt and exception initialization from startup asm code into premain c code for evalsoc.
- Optimize cpu startup when ECLIC not present it will not be initialized, which is helpful for CPU without ECLIC unit.
- evalsoc
SystemIRegionInfo
variable is removed now, if you want to access to the base address of cpu internal device, you can use*_BASEADDR
, such as__CIDU_BASEADDR
. - Introduce an IAR startup asm code called
IAR/startup.S
for evalsoc to support SMP boot, and for SMP stack setup,
different IAR linker script is required, see the iar linker script provided insmphello
orfreertos/smpdemo
.
- Redesign
-
Build System
- Now disassemble elf will show no alias instructions
- Add
u600*/u900*/ux1000fd
into support CORE list - Update and optimize toolchain support for Terapines ZCC Toolchain, which can provide better performance
- In
Build/toolchain/nuclei_gnu.mk
,-mmemcpy-strategy=scalar
option is replaced by-mstringop-strategy=scalar
in official gcc 14, see
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=4ae5a7336ac8e1ba57ee1e885b5b76ed86cdbfd5
-
RTOS
- Bump FreeRTOS Kernel to V11.1.0
- Bump RTThread Nano to V3.1.5
- Introduce FreeRTOS SMP support for Nuclei RISC-V CPU
- Introduce Eclipse ThreadX v6.4.1 Support for Nuclei RISC-V CPU
-
Misc
- Add
Zc/Zicond
and1000
series support in SDK CLI script used internally - Optimize gitlab ci jobs to speedup job execution time and better merge request pipeline check
- Add
Full Changelog: 0.5.0...0.6.0
Nuclei N100 Software Development Kit, Release 0.1.0
This is release version 0.1.0
of N100 SDK.
Note
- Please use Nuclei N100 SDK with Nuclei Studio 2024.06, get it from https://nucleisys.com/download.php#tools
- Nuclei N100 SDK is modified based on Nuclei SDK 0.5.0 release, and will not merge back to Nuclei SDK in the future.
- This SDK is not compatible with Nuclei SDK for 200/300/600/900/1000 series, if you want SDK for these series, please switch to master or develop branch, see https://github.com/Nuclei-Software/nuclei-sdk/tree/master
-
Application
- Added baremetal/freertos/ucosii/rtthread examples.
- Baremetal examples contains helloworld, demo_irqc, demo_timer, demo_extirq, lowpower cases to show cpu interrupt and timer usage.
- Baremetal examples also contains benchmark examples such as coremark, dhrystone, whetstone which can demostrate the performance of Nuclei CPU.
- RTOS examples contains different samples to show how to use FreeRTOS, UCOSII and RT-Thread on Nuclei N100.
-
Build System
- Support Nuclei 100 series RISC-V CPU Cores.
- Support Nuclei RISC-V GCC toolchain, IAR Compiler and Terapines ZCC toolchain.
-
NMSIS
- NMSIS in N100 SDK is not compatible with standard NMSIS, this is modified to match Nuclei 100 series CPU.
- Most of the APIs in this modified NMSIS are similar to standard NMSIS, but some APIs have been changed or added.
- Please refer to the header files in
NMSIS/Core/Include
directory for more details.
-
SoC
- Only Nuclei Evaluation SoC for 100 series is supported by this SDK.
- If you want to port to your own SoC, you modify based on this
evalsoc
implementation. - This SDK will also be generated by 100 series
nuclei_gen
tool, please take a look at theevalsoc.memory
,openocd_evalsoc.cfg
,cpufeature.h
andcpufeature.mk
,
for IAR projects, you need to also check the linker script inside it. - Only
sram
andflashxip
download modes are supported in this SDK, and the linker script is quite different to normal Nuclei SDK,
please take care, especially the vector table and exception entry address are RTL configurable which means when your RTL configuration
is different to ourevalsoc
, you need to modify the linker script to match your rtl configuration. - IAR support is also added in this SDK, and linker and startup/exception code are different from GCC, please take care when you port to your own SoC.
-
RTOS
- FreeRTOS/UCOSII/RT-Thread port for 100 series CPU are added in this SDK.
- IAR compiler port and gcc/clang port are also supported by these RTOSes.
-
IDE support
- Nuclei Studio 2024.06 will support this Nuclei N100 SDK via NPK solution just like Nuclei SDK.
- IAR Workbench support is also done in this SDK, please take a try with it in
ideprojects/iar
folder.
-
Documentation
- The documentation is modified based on Nuclei SDK.
- We have go through the whole documentation and modified it to match Nuclei N100 SDK, maybe some of them are not perfect, please feel free to correct me if you find any mistakes.
Nuclei embedded Software Development Kit, Release 0.5.0
This is release version 0.5.0
of Nuclei SDK, please use it with Nuclei Studio 2023.10 release.
- This 0.5.0 version is a big change version for Nuclei SDK, it now support Nuclei Toolchain 2023.10,
which have gnu toolchain and llvm toolchain in it, gcc version increased to gcc 13, and clang version
used is clang 17. It will no longer support old gcc 10 version, since gcc and clang-march
option
changed a lot, such as b extension changed to_zba_zbb_zbc_zbs
.- This version also introduced other compiler support such as terapines zcc and IAR compiler.
For terapines zcc compiler, please visit https://www.terapines.com/ to contact them for toolchain evaluation, passTOOLCHAIN=terapines
during make to select terapines zcc compiler.
For IAR compiler, please visit https://www.iar.com/riscv for IAR workbench evaluation, we provided iar projects to take a try with it.- This version introduced libncrt v3.0.0 support, which split libncrt library into three parts, you need to take care when using newer toolchain.
- This version removed demosoc support, please use evalsoc instead.
- This version introduced qemu 8.0 support, old qemu will not be supported.
- This version introduced Nuclei Studio 2023.10 support which introduced llvm toolchain support via npk, so it can only works with 2023.10 or later version.
- This version required a lot of new npk features introduced in Nuclei Studio 2023.10, so it can only be imported as npk package in Nuclei Studio 2023.10 or later version.
Please create issue if you are facing issues using Nuclei SDK, see https://github.com/Nuclei-Software/nuclei-sdk/issues
-
Application
- Add cpuinfo case to dump nuclei cpu feature
- Add stack check demo to demostrate nuclei stack check feature
- Add support for gcc13/clang17/terapines/iar compiler
- Fix missing break in
__set_hpm_event
function, take care if you are using this API. - For different compiler option support, we introduced
toolchain_$(TOOLCHAIN).mk
file to place toolchain specified options, see benchmark examples' Makefile - Optimize demo_cidu smp case
- Optimize application code and makefile when port for clang, terapines zcc and iar compiler
- Change ARCH_EXT makefile comment for demo_dsp when using gcc 13
- Auto choose proper CPU_SERIES and proper optimization flags for benchmark cases
- Optimize whetstone cost to decrease execution time for better ci testing in qemu and fpga
- Add Zc and Xxlcz extension optimization for coremark and dhrystone cases
- Do specical adaption for demo_pmp/demo_spmp for iar compiler which require customized iar linker icf for this cases
- Optimize benchmark flags when using gcc 13
-
NMSIS
- Add bench reset/sample/stop/stat and get usecyc/sumcyc/lpcnt APIs in NMSIS Core
- Add more CSRs such as Zc/Stack Check in riscv_encoding.h
- Rename NMSIS DSP/NN library name to match gcc 13 changes, eg. b -> zba_zbb_zbc_zbs, so the library name changed a lot
- Add IAR compiler support in NMSIS Core
- No more bitmanip extension intrinsic header <rvintrin.h> for gcc13
- Fix __RV_CLAMP macro and add __MACHINE/SUPERVISOR/USER_INTERRUPT macros
- Add __get_hart_index and SysTimer_GetHartID and modify __get_hart_id API
- In <Device.h>, we introduced __HARTID_OFFSET and __SYSTIMER_HARTID macro to represent timer hart index relation with cpu hartid for AMP SoC
- Update NMSIS Core/DSP/NN header files to v1.2.0
- Update NMSIS DSP/NN prebuilt library to v1.2.0, and added F16 prebuilt library
-
SOC
- CAUTION: Demosoc support is removed since evalsoc is the successor, please use evalsoc now.
- Set RUNMODE_CCM_EN macro when CCM_EN make variable passed and allow __CCM_PRESENT overwrite by RUNMODE_CCM_EN macro
- Enable __CIDU_PRESENT macro passed via compiler option
- Update cpu startup asm code to fix clang compile issue such as STB_WEAK warning and non-ABS relocation error
- Update cpu startup asm code to support zcmt jump table
- Update gnu linker files to support zcmt extension
- Update gnu linker files to fix 2 byte gap issue, and align section to 8bytes and reorg sections
- Update openocd configuration files to support openocd new version
- Make metal_tty_putc/getc with __USED attribute to avoid -flto build fail
- Add startup and exception code and iar linker icf files for IAR compiler support
- Add new macros __HARTID_OFFSET and __SYSTIMER_HARTID in evalsoc.h
- Add HARTID_OFFSET make variable to control hartid offset for evalsoc
- Boot hartid check no longer only compare lower 8bits for evalsoc
- Currently IAR compiler support is only for single core support, smp support is not yet ready and need to use in IAR workbench
- Update Nuclei Studio NPK files to support both gcc and llvm toolchain support, this require 2023.10 Nuclei Studio, which is incompatiable with previous IDE version.
-
Build System
- Fix semihost not working when link with semihost library
- Add support for gcc 13, clang 17, terapines zcc toolchain using TOOLCHAIN make variable, eg. TOOLCHAIN=nuclei_gnu for gnu gcc toolchain, TOOLCHAIN=nuclei_llvm for llvm toolchain, TOOLCHAIN=terapines for terapines zcc toolchain
- Add support for libncrt v3.0.0, which spilt libncrt into 3 parts, the c library part, fileops part, and heapops part, so NCRTHEAP and NCRTIO makefile variable are added to support new version of libncrt, about upgrading libncrt, please check :ref:
develop_buildsystem_var_stdclib
- To support both gcc, clang, zcc, now we no longer use
--specs=nano.specs
like--specs=
gcc only options, since clang don't support it, we directly link the required libraries according to the library type you want to use in Makefile, group all the required libraries using--start-group archives --end-group
of linker option, see https://sourceware.org/binutils/docs/ld/Options.html, but when using Nuclei Studio, the Eclipse CDT based IDE didn't provided a good way to do library group, here is an issue tracking it, see eclipse-embed-cdt/eclipse-plugins#592- And also now we defaultly enabled
-nodefaultlibs
option to not use any standard system libraries when linking, so we need to specify the system libraries we want to use during linking, which is the best way to support both gcc and clang toolchain.
- And also now we defaultly enabled
- When using libncrt library, this is no need to link with other libgcc library, c library or math library, such as gcc libgcc library(
-lgcc
), newlib c library(-lc/-lc_nano
) and math library(-lm
), the c and math features are also provided in libncrt library - When using Nuclei Studio with imported Nuclei SDK NPK package, you might meet with undefined reference issue during link
- The use of ARCH_EXT is changed for new toolchain, eg. you can't pass ARCH_EXT=bp to represent b/p extension, instead you need to pass ARCH_EXT=_zba_zbb_zbc_zbs_xxldspn1x
- Show CC/CXX/GDB when make showflags
- Add u900 series cores support
- No longer support gd32vf103 soc run on qemu
- Add extra
-fomit-frame-pointer -fno-shrink-wrap-separate
options for Zc extension to enable zcmp instruction generation - Extra CPU_SERIES macro is passed such (200/300/600/900) during compiling for benchmark examples
- When you want to select different nmsis library arch, please use NMSIS_LIB_ARCH make variable, see demo_dsp as example
-
Tools
- A lot of changes mainly in nsdk cli configs have been made to remove support of demosoc, and change it to evalsoc
- A lot of changes mainly in nsdk cli configs have been made to support newer ARCH_EXT variable format
- Add llvm ci related nsdk cli config files
- Add Zc/Xxlcz fpga benchmark config files
- Support qemu 8.0 in nsdk cli tools
- Update configurations due to application adding and updating
-
RTOS
- Add freertos/ucosii/rtthread porting code for IAR compiler
- Enable vector when startup new task for rtos for possible execute rvv related instruction exception
-
Misc
- Change gitlab ci to use gnu toolchain 2023.10
- Add IAR workbench workspace and projects for evalsoc, so user can quickly evaluate IAR support in IAR workbench
Check https://doc.nucleisys.com/nuclei_sdk/quickstart.html#quickstart to know how to get started with Nuclei SDK.
Full Changelog: 0.4.1...0.5.0
Nuclei embedded Software Development Kit, Release 0.4.1
This is release version 0.4.1
of Nuclei SDK.
-
Application
- Add demo_cidu to demo cidu feature of Nuclei RISC-V Processor
- Add demo_cache to demo ccm feature of Nuclei RISC-V Processor
- Optimize demo_nice for rv64
- Fix compile error when -Werror=shadow
- Update helloworld and smphello due to mhartid changes
-
NMSIS
-
Bump NMSIS to 1.1.1 release version, NMSIS DSP/NN prebuilt libraries are built with 1.1.1 release.
-
Add CIDU support via core_feature_cidu.h, and
__CIDU_PRESENT
macro is required in<Device>.h
to represent CIDU present or not -
Add macros of HPM m/s/u event enable, events type, events idx
-
Fix define error of HPM_INIT macro
-
Due to mhartid csr update for nuclei subsystem reference design, two new API added called
__get_hart_id
and__get_cluster_id
- mhartid csr is now used to present cluster id and hart id for nuclei subsystem reference design
- bit 0-7 is used for hart id in current cluster
- bit 8-15 is used for cluster id of current cluster
- for normal nuclei riscv cpu design, the mhartid csr is used as usual, but in NMSIS Core, we only take
lower 8bits in use cases like systimer, startup code to support nuclei subsystem
-
-
Build System
- Add semihost support in build system via SEMIHOST make variable, if SEMIHOST=1, will link semihost library, currently only works with newlibc library, not working with libncrt
- Add support for compile cpp files with suffix like .cc or .CC
- Remove
--specs=nosys.specs
compile options used during compiling, since we have implement almost all necessary newlibc stub functions, no need to link the nosys version, which will throw warning of link with empty newlibc stub functions.
-
SoC
- Fix missing definition of BOOT_HARTID in
startup_demosoc.S
- Update demosoc and evalsoc interrupt id and handler definition for CIDU changes
- Add
__CIDU_PRESENT
macro to control CIDU present or not indemosoc.h
andevalsoc.h
which is the<Device>.h
- Add uart status get and clear api for evalsoc and demosoc, which is used by cidu demo
- Add semihost support for all SoCs, currently only works with newlib,
SEMIHOST=1
control semihost support - Update openocd configuration file to support semihosting feature
- Add extra run/restart command for openocd debug configuration in smp debug in npk for Nuclei Studio
- Update smp/boot flow to match mhartid csr update
- BOOT_HARTID is the choosen boot hart id in current cluster, not the full mhartid register value, for example, it the mhartid csr register is 0x0101, and the BOOT_HARTID should be set to 1, if you want hart 1 to be boot hart
- Update and add more newlib stub functions in demosoc/evalsoc/gd32vf103 SoC's newlibc stub implementation, since we are no longer compile with
--specs=nosys.specs
- Fix missing definition of BOOT_HARTID in
-
CI
- Add demo_cidu and demo_cache in ci configuration files, but expect it to run fail when run in qemu
- Don't check certificate when download tool
-
Tools
- Modify openocd configuration file in nsdk_utils.oy support win32 now
- Add new feature to generate cpu json when knowing cpu arch in nsdk_runcpu.py script
- Add runresult_diff.py script to compare the difference of two runresult.xlsx.csvtable.json files, useful when
do benchmark difference check - Add
--uniqueid <id>
option for nsdk cli tools
Full Changelog: 0.4.0...0.4.1
Nuclei embedded Software Development Kit, Release 0.4.0
This is release version 0.4.0
of Nuclei SDK.
-
Application
- Add
app_demo_pmp
application to demostrate pmp feature. - Add
app_demo_spmp
application to demostrate smode pmp feature, spmp is present when TEE feature is enabled. - Add
demo_smode_eclic
application to demonstrate ECLIC interrupt with TEE feature of Nuclei Processor. - Changed
test/core
test case due toEXC_Frame_Type
struct member name changes. - Fix XS bit set bug in demo_nice application.
- Add return value in smphello application.
- Add
-
NMSIS
- Add
__CTZ
count trailing zero API in core_compatiable.h - Add
__switch_mode
switch risc-v privilege mode API in core_feature_base.h - Add
__enable_irq_s
,__disable_irq_s
smode irq control(on/off) API in core_feature_base.h - Add
__set_medeleg
exception delegation API in core_feature_base.h - Update and add smode eclic related API in core_feature_eclic.h only present when TEE_PRESENT=1
- Optimize APIs of PMP and add
__set_PMPENTRYx
and__get_PMPENTRYx
API for easily PMP configuration in core_feature_pmp.h - Add spmp related APIs for smode pmp hardware feature when __SPMP_PRESENT=1
- Add per-hart related APIs for systimer such as
SysTimer_SetHartCompareValue
,SysTimer_SetHartSWIRQ
and etc in core_feature_timer.h, this is mainly needed when configure timer in smode per hart - Add TEE related csr macros in riscv_encoding.h
- Add iregion offset macros and N3/VP mask in riscv_encoding.h and use it in demosoc/evalsoc implementation.
- Add
ICachePresent/DCachePresent
API - Don't sub extra cost for BENCH_xxx API
- Update NMSIS Core/DSP/NN and prebuilt library to version 1.1.0
- Add
-
Build System
- Add
intexc_<Device>_s.S
asm file into compiling for evalsoc and demosoc - Show
ARCH_EXT
information when run make info - Don't specify elf filename when run gdb, only specify it when do load to avoid some gdb internal error
- Add
BOOT_HARTID
andJTAGSN
support, which need to be done in SoC support code and build system
- Add
-
SoC
-
Add smode interrupt and exception handling framework for evalsoc and demosoc, for details see code changes.
- A new section called
.vector_s
is added(required in linker script) to store smode vector table which is initialized insystem_<Device>.c
- A new
intexc_<Device>_s.S
asm source file is added to handle s-mode interrupt and exception - A default smode exception register and handling framework is added in
system_<Device>.c
- API Changes:
Exception_DumpFrame
parameters changed to add mode passing insystem_<Device>.c/h
- API Changes:
EXC_Frame_Type
struct member mcause/mepc changed to cause/epc insystem_<Device>.c/h
- A new section called
-
Print
\0
instead of\r
when do simulation exit for better integration in Nuclei Studio QEMU simulation. -
Add
clock
stub function for libncrt library in demosoc/evalsoc/gd32vf103 SoC support software. -
Add
sram
download mode for evalsoc/demosoc, for details directly check the linker script -
Change default
__ICACHE_PRESENT/__DCACHE_PRESENT
to 1 for evalsoc/demosoc, when evalsoc/demosoc startup, it will
enable i/d cache if it really present. -
Update openocd configuration files to remove deprecated command which might not be support in future
-
Merge smp and single core openocd config into one configuration for evalsoc and demosoc
-
Add BOOT_HARTID support for evalsoc and demosoc, which is used to specify the boot hartid, used together with SMP
can support SMP or AMP run mode -
Add JTAGSN support to specify a unified hummingbird jtag debugger via
adapter serial
-
For AMP support, we can work together with Nuclei Linux SDK, see https://github.com/Nuclei-Software/nsdk_ampdemo
-
Add NPK support for SMP/AMP working mode, and sram download mode
-
-
CI
- Start to use Nuclei QEMU/Toolchain/OpenOCD 2022.12 in daily ci for gitlab runner
-
Tools
- Add
httpserver.py
tool to create a http server on selected folder, good to preview built documentation. - Fix many issues related to nsdk_cli scripts when integrated using fpga hardware ci flow.
- Support extra parsing benchmark python script for nsdk_cli tools, see 5f546fa
- Add
nsdk_runcpu.py
tool to run fpga baremetal benchmark
- Add
-
Documentation
- Add
make preview
to preview build documentation.
- Add
Full Changelog: 0.3.9...0.4.0
Nuclei embedded Software Development Kit, Release 0.3.9
This is release version 0.3.9
of Nuclei SDK.
-
Application
- Add
lowpower
application to demostrate lowpower feature of Nuclei Processor. - Update
demo_nice
application due to RTL change in cpu. - Change dhrystone compiling options to match better with Nuclei CPU IP.
- Add
-
NMSIS
- Update riscv_encoding.h, a lot of changes in the CSRs and macros, VPU are added.
- Add nmsis_bench.h, this header file will not be included in nmsis_core.h, if you want to
use it, please directly include in your source code. It is used to help provide NMSIS
benchmark and high performance monitor macro helpers. - Add hpm related API in core_feature_base.h
- Add enable/disable vector API only when VPU available
-
Build System
- Fix upload program the pc is not set correctly to _start when cpu is reset in flash programming mode.
- Add run_qemu_debug/run_xlspike_rbb/run_xlspike_openocd make targets
-
SoC
-
Add npk support for smp, required to update ide plugin in Nuclei Studio 2022.04. And also a new version
of qemu is required, if you want to run in qemu. -
Add
evalsoc
in Nuclei SDK,evalsoc
is a new evaluation SoC for Nuclei RISC-V Core, for next generation
of cpu evaluation with iregion feature support.demosoc
will be deprecated in future, when all our CPU IP
provide iregion support. -
Important: A lot of changes are maded to linker script of SDK.
- rodata are placed in data section for ilm/flash/ddrdownload mode, but placed in text section for flashxip download mode.
- For ilm download mode, if you want to make the generated binary smaller, you can change REGION_ALIAS of DATA_LMA from
ram
toilm
. - Add
_text_lma/_text/_etext
to replace_ilm_lma/_ilm/_eilm
, and startup code now using new ld symbols. - Use REGION_ALIAS to make linker script portable
- Linker scripts of gd32vf103/evalsoc/demosoc are all changed.
-
FPU state are set to initial state when startup, not previous dirty state.
-
Vector are enabled and set to initial state when startup, when vector are enabled during compiling.
-
For latest version of Nuclei CPU IP, BPU cold init need many cycles, so we placed bpu enable before enter to main.
-
For detailed changes, please check commit histories since 0.3.8 release.
Nuclei embedded Software Development Kit, Release 0.3.8
This is release version 0.3.8
of Nuclei SDK.
-
Application
- Add
smphello
application to test baremetal smp support, this will do demostration
to boot default 2 core and each hart print hello world.
- Add
-
NMSIS
- Some macros used in NMSIS need to expose when DSP present
- nmsis_core.h might be included twice, it might be included by <Device.h> and <riscv_math.h>
-
Build
- Add
SYSCLK
andCLKSRC
make variable for gd32vf103 SoC to set system clock in hz and clock source, such asSYSCLK=72000000 CLKSRC=hxtal
- Exclude source files using
EXCLUDE_SRCS
make variable in Makefile C_SRCS/ASM_SRCS/CXX_SRCS
now support wildcard patternUSB_DRV_SUPPORT
in gd32vf103 is removed, newUSB_DRIVER
is introduced,USB_DRIVER=device/host/both
to choose device,
host or both driver code.SMP
,HEAPSZ
andSTACKSZ
make variable are introduced to control stack/heap
size and smp cpu count used in SDK
- Add
-
SoC
- Add libncrt 2.0.0 support for demosoc and gd32vf103, libncrt stub functions need to be adapted, see 2e09b6b and 2e09b6b
- Fix ram size from 20K to 32K for gd32vf103v_eval and gd32vf103v_rvstar
- Change demosoc eclic/timer baseaddr to support future cpu iregion feature, see eab2832 and 18109d0
- Adapt system_gd32vf103.c to support control system clock in hz and clock source via macro SYSTEM_CLOCK and CLOCK_USING_IRC8M or CLOCK_USING_HXTAL
- Merge various changes for gd32vf103 support from @gsauthof, see PR #37, #38, #40
- Remove usb config header files and usb config source code for gd32vf103
- Change gd32vf103 linker scripts to support
HEAPSZ
andSTACKSZ
- Change demosoc linker scripts to support
HEAPSZ
,STACKSZ
andSMP
- Add baremetal SMP support for demosoc, user can pass
SMP=2
to build for 2 smp cpu.
-
Tools
- Record more flags in
nsdk_report.py
such asNUCLEI_SDK_ROOT
,OPENOCD_CFG
andLINKER_SCRIPT
. - Fix nsdk_report.py generated runresult.xls file content is not correct when some application failed
- Add benchmark c standard script in tools/misc/barebench
- Change to support
SMP
variable
- Record more flags in
-
OS
- RT_HEAP_SIZE defined in cpuport.c is small, need to be 2048 for msh example when RT_USING_HEAP is enabled
- Application can define RT_HEAP_SIZE in rtconfig.h to change the size
For detailed changes, please check commit histories since 0.3.7 release.
Nuclei embedded Software Development Kit, Release 0.3.7
This is release version 0.3.7
of Nuclei SDK.
-
Application
- CAUTION: Fix benchmark value not correct printed when print without float c library,
which means the CSV printed value in previous release is not correct, please take care - Add DHRY_MODE variable to support different dhrystone run options in dhrystone benchmark,
ground
,inline
andbest
are supported
- CAUTION: Fix benchmark value not correct printed when print without float c library,
-
NMSIS
- Bump to v1.0.4
- Add B-extension support for NMSIS
- Fix various issues reported in github
-
Build
- add
showflags
target to show compiling information and flags - add
showtoolver
target to show tool version used
- add
-
SoC
- Change all un-registered interrupt default handler to
default_intexc_handler
, which means user need to register
the interrupt handler usingECLIC_SetVector
before enable it. - Add RUNMODE support only in
demosoc
, internal usage - Add jlink debug configuration for gd32vf103 soc
- Change all un-registered interrupt default handler to
-
Tools
- Update
nsdk_report.py
script to support generate benchmark run result in excel. - Add
ncycm
cycle model runner support innsdk_bench.py
- Add
nsdk_runner.py
script for running directly on different fpga board with feature of programing fpga bitstream using vivado
- Update
For detailed changes, please check commit histories since 0.3.6 release.