1 of 27

August 15-16 2020

NuttX Online Workshop

Bringing NuttX to the FPGA

Brennan Ashton

@btashton

QuickLogic EOS S3

2 of 27

Agenda

NuttX Online Workshop

  • State of open source FPGA tooling
  • Running NuttX on FPGAs
  • Emulation with Renode
  • QuickLogic EOS S3

3 of 27

What are FPGAs?

NuttX Online Workshop

4 of 27

What are FPGAs?

NuttX Online Workshop

5 of 27

What are FPGAs?

NuttX Online Workshop

6 of 27

Open Source Toolchains for FPGA

NuttX Online Workshop

“The GCC for FPGAs”

https://symbiflow.github.io/

7 of 27

Open Source Toolchains for FPGA

NuttX Online Workshop

“The GCC for FPGAs”

8 of 27

Building an SoC

NuttX Online Workshop

https://github.com/enjoy-digital/litex

9 of 27

Building an SoC

NuttX Online Workshop

https://github.com/enjoy-digital/litex

10 of 27

Building an SoC

NuttX Online Workshop

FuseSOC

cores never been so much fun”

https://github.com/olofk/fusesoc

11 of 27

Building an SoC

NuttX Online Workshop

SERV

SERV is an award-winning bit-serial RISC-V core

https://github.com/olofk/serv/

How many cores do you want?

12 of 27

NuttX on FPGAs

NuttX Online Workshop

13 of 27

Board Bring-Up without Hardware

NuttX Online Workshop

https://renode.io/

14 of 27

NuttX Online Workshop

nvic: IRQControllers.NVIC @ sysbus 0xE000E000

priorityMask: 0xE0

systickFrequency: 61440000

IRQ -> cpu@0

cpu: CPU.CortexM @ sysbus

cpuType: "cortex-m4f"

nvic: nvic

uart: UART.PL011 @ sysbus 0x40010000

-> intrCtrl@7

size: 0x1000

m4mem: Memory.MappedMemory @ {

sysbus 0x0;

sysbus 0x20000000 //mirror

}

size: 0x80000

15 of 27

EOS S3 Programmable Logic

NuttX Online Workshop

16 of 27

NuttX Online Workshop

17 of 27

Board Bring-Up without Hardware

NuttX Online Workshop

18 of 27

EOS S3

NuttX Online Workshop

https://www.crowdsupply.com/quicklogic/quickfeather

19 of 27

EOS S3

NuttX Online Workshop

20 of 27

EOS S3 Programmable Logic

NuttX Online Workshop

  • AHB-to-Wishbone bridge
  • SDMA Interface
  • Interrupt interface
  • Access to IO pads

21 of 27

EOS S3 Programmable Logic

NuttX Online Workshop

22 of 27

EOS S3 Programmable Logic

NuttX Online Workshop

23 of 27

EOS S3 Programmable Logic

NuttX Online Workshop

Create a /dev/fabric device for controlling the operation of the programmable logic

Create a user space utility eoss3fb to reconfigure the FPGA fabric

24 of 27

EOS S3 Programmable Logic

NuttX Online Workshop

25 of 27

EOS S3 Programmable Logic

NuttX Online Workshop

26 of 27

EOS S3 -- Where are we?

NuttX Online Workshop

  • Initial port supporting the M4F -- Merged
  • IOMUX and Basic Clock Management -- Merged
  • FPGA manager device -- Proof-of-Concept
  • Support for Wishbone Bus -- In Progress
  • Renode Support -- Minimal

27 of 27

NuttX Online Workshop

Thank you!