Vicharak Shrike-Lite

The Vicharak Shrike-Lite is a tiny development board based on the Raspberry Pi RP2040 microcontroller paired with a Renesas ForgeFPGA SLG47910V FPGA.

Interfaces

Interface Hardware Supported TinyGo Support
GPIO YES YES
UART YES YES
SPI YES YES
I2C YES YES
ADC YES YES
PWM YES YES
USBDevice YES YES

Pins

Pin Hardware pin Alternative names I2C PWM
IO0 GPIO0 F6 I2C0 (SDA) PWM0 (channel A)
IO1 GPIO1 F4 I2C0 (SCL) PWM0 (channel B)
IO2 GPIO2 F3 I2C1 (SDA) PWM1 (channel A)
IO3 GPIO3 F5 I2C1 (SCL) PWM1 (channel B)
IO4 GPIO4 LED I2C0 (SDA) PWM2 (channel A)
IO5 GPIO5 I2C0 (SCL) PWM2 (channel B)
IO6 GPIO6 I2C1_SDA_PIN I2C1 (SDA) PWM3 (channel A)
IO7 GPIO7 I2C1_SCL_PIN I2C1 (SCL) PWM3 (channel B)
IO8 GPIO8 SPI1_SDI_PIN I2C0 (SDA) PWM4 (channel A)
IO9 GPIO9 I2C0 (SCL) PWM4 (channel B)
IO10 GPIO10 SPI1_SCK_PIN I2C1 (SDA) PWM5 (channel A)
IO11 GPIO11 SPI1_SDO_PIN I2C1 (SCL) PWM5 (channel B)
IO12 GPIO12 FPGA_PWR I2C0 (SDA) PWM6 (channel A)
IO13 GPIO13 FPGA_EN I2C0 (SCL) PWM6 (channel B)
IO14 GPIO14 F18 I2C1 (SDA) PWM7 (channel A)
IO15 GPIO15 F17 I2C1 (SCL) PWM7 (channel B)
IO16 GPIO16 I2C0 (SDA) PWM0 (channel A)
IO17 GPIO17 I2C0 (SCL) PWM0 (channel B)
IO18 GPIO18 SPI0_SCK_PIN I2C1 (SDA) PWM1 (channel A)
IO19 GPIO19 SPI0_SDO_PIN I2C1 (SCL) PWM1 (channel B)
IO20 GPIO20 SPI0_SDI_PIN I2C0 (SDA) PWM2 (channel A)
IO21 GPIO21 I2C0 (SCL) PWM2 (channel B)
IO22 GPIO22 PWM3 (channel A)
IO23 GPIO23 PWM3 (channel B)
IO24 GPIO24 I2C0_SDA_PIN, UART1_TX_PIN PWM4 (channel A)
IO25 GPIO25 I2C0_SCL_PIN, UART1_RX_PIN PWM4 (channel B)
IO26 GPIO26 A0, ADC0 I2C1 (SDA) PWM5 (channel A)
IO27 GPIO27 A1, ADC1 I2C1 (SCL) PWM5 (channel B)
IO28 GPIO28 A2, UART0_TX_PIN, UART_TX_PIN, ADC2 PWM6 (channel A)
IO29 GPIO29 A3, UART0_RX_PIN, UART_RX_PIN, ADC3 PWM6 (channel B)

Machine Package Docs

Documentation for the machine package for Shrike-Lite

Flashing

UF2

The board comes with the UF2 bootloader already installed.

CLI Flashing

  • Put your board into Bootloader mode

  • Flash your TinyGo program to the board using this command:

    tinygo flash -target=vicharak_shrike-lite [PATH TO YOUR PROGRAM]
    
  • The board should restart and then begin running your program.

Flashing the FPGA

An SPI interface should be configured at specific pins in order to flash the FPGA

	machine.SPI0.Configure(machine.SPIConfig{
		SDO:       machine.IO3, // MOSI
		SDI:       machine.IO0, // MISO
		SCK:       machine.IO2,
		Frequency: 1600000,
		Mode:      0b00,
	})
	machine.FPGA_PWR.Configure(machine.PinConfig{Mode: machine.PinOutput})
	machine.FPGA_EN.Configure(machine.PinConfig{Mode: machine.PinOutput})
	machine.IO1.Configure(machine.PinConfig{Mode: machine.PinOutput}) // SS

To start flashing, set FPGA_PWR and FPGA_EN to HIGH, IO1 to LOW, and write the bitstream.
Once flashing is successful, set IO1 to HIGH.

	err := machine.SPI0.Tx(data, nil) // data[] is the bitstream

	if err != nil {
		panic(err)
	}
	machine.IO1.High() // Setting SS to HIGH

A simple tool for flashing the FPGA can be found at https://github.com/YajTPG/shrike_go/blob/master/shrikeflash.go

Troubleshooting

Any troubleshooting tips go here.

Notes

You can use the USB port to the board as a serial port.

TinyGo has support for the RP2040’s on-board Programmable Input/Output (PIO) block.

For more informantion, see https://github.com/tinygo-org/pio