The Open Hardware Group's Software Task Group supports the software ecosystem.
The core-v-mcu project has a FreeRTOS/Eclipse based project that runs software on the emulation system to verify the correct operation of the system. The software validation system is in the core-v-mcu-cli-test repo. There are two components:
- a FreeRTOS/Eclipse app called cli-test that uses a Command Line Interface to exercise features
- a Python script that automates using the cli-test to validate correct system operation
The goals of the whole product tests are to:
- Confirm that the entire address space is accessible by the core
- All of the TCDM
- All of the peripheral registers
- All special registers
- Confirm that gdb can:
- halt and resume the core
- can single step the core
- access entire addressable memory space
- memories
- peripherals
- CSRS
- NOTE: for performance reasons, may use gdb for sampling test and another mechanism for exhaustive testing
- Confirm that the interrupts work as expected:
- All sources
- Masking
- Confirm that the timers work as expected:
- TBD
- Confirm that the clock trees & divisors work as expected:
- Can set FLL to desired frequency
- Clock tree enables work
- Clock tree divisors work
- uDMA
- Covered by peripheral tests
- Peripherals (details later in document)
- UART
- I2Cm
- I2Cs
- SPIm
- QSPIm
- CAMI
- GPIO
- PWM
- EFPGA
- TCMD
- APB
- Math blocks
- IO
- Configuration
- Test mode
- Confirm I/O control works as expected:
- Peripherals can access I/O
- GPIO can access all I/O
- EFPGA can access all I/O
- Mux select works properly
- All IO configurations can be set properly
- Test modes
- Confirm JTAG can be set in scan mode
- Confirm JTAG can be set in mem BIST mode
- Confirm JTAG can be set in EFPGA test mode
- Significant application
- TfLu person detection application reading from HiMax camera and using eFPGA acceleration
Peripheral tests use the specified peripherals (typically PMOD) to confirm correct system operation.
Pmod used for regression testing: PmodUSBUART
Type | Mode | Notes |
---|---|---|
Blocking | ||
Set config | baud, stop, bits, parity | |
Read char | ||
Write char | ||
Read N char | ||
Write N char | ||
Read through '\n' | ||
Rx empty | ||
Tx empty | ||
Wait for idle | ||
Non-blocking |
Pmod used for regression testing: PmodRTCC (has small SRAM)
Type | Mode | Notes |
---|---|---|
Blocking | ||
Set clock frequency | ||
Wait for idle | ||
Read register | ||
Read non-existant register | Test NAK handling | |
Write register | ||
Write non-existant register | Test NAK handling | |
Read N of M registers, M >= N | ||
Read N of M registers, M < N | Test NAK handling | |
Write N of M registers, M >= N | ||
Write N of M registers, M < N | Test NAK handling | |
Not tested | ||
Clock stretching |
Note: APIs are on host, so used for purposes of describing tested functionality
Type | Mode | Notes |
---|---|---|
Read register | ||
Read non-existant register | Test NAK handling | |
Write register | ||
Write non-existant register | Test NAK handling | |
Read N of M registers, M >= N | ||
Read N of M registers, M < N | Test NAK handling | |
Write N of M registers, M >= N | ||
Write N of M registers, M < N | Test NAK handling |
Pmod used for regression testing: PmodSF3 (serial NOR flash memory)
Type | Mode | Notes |
---|---|---|
Blocking | ||
Set configuration | clock rate, cpol, cpha, endianness, cs# | |
Wait for idle | ||
Non-blocking | ||
Write N bytes in single bit mode | ||
Write N bytes in dual bit mode | ||
Write N bytes in quad bit mode | ||
Read N bytes in single bit mode | ||
Read N bytes in dual bit mode | ||
Read N bytes in quad bit mode | ||
Write/Read N bytes in single mode |