Software Support

The Open Hardware Group’s Software Task Group supports the software ecosystem.

Software Validation System

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

Goals of the System Validation Tests

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

Peripheral tests use the specified peripherals (typically PMOD) to confirm correct system operation.

UART tests

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

I2Cmaster

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

I2Cslave

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

QSPImaster

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

CAMI

GPIO

PWM