automa'c)genera'on)of)an)) electronics3to3middleware ... ·...

15
Automa'c Genera'on of an Electronics3to3Middleware Interface Layer (Work&in&progress) Ulrik Pagh Schultz (with: Anders Lange, Anders Sørensen) University of Southern Denmark

Upload: others

Post on 24-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

Automa'c)Genera'on)of)an))Electronics3to3Middleware)Interface)Layer))

(Work&in&progress).Ulrik)Pagh)Schultz)

(with:)Anders)Lange,)Anders)Sørensen))University)of)Southern)Denmark)

Page 2: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

•  Context:)Robo'cs)prototyping)•  Problem:)Genera've)programming)for)FPGAs)•  Issue:)Lightweight)MDSD)implementa'on?)

2"

Page 3: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

3"

Page 4: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

4"

Page 5: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

Flexible,)reusable)solu'ons?)

•  General:)– control)algorithm)– high3level)soOware)

•  Specific:))– mechanics,)actuators,)sensors)(...))–  low3level)soOware)

•  In3between:)– digital)electronics)– CPU)

5"

Page 6: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

FPGAs)in)robo'cs)

•  Flexible)digital)electronics:)very)interes'ng)•  Massively)parallel)data)crunching:)not)as)interes'ng)(...))

•  “Perfect”)real3'me)behavior:)useful)– motor)control,)sensing,)communica'on,)...)– per3func'onality)digital)logic)(parallelism))– flexibility)through)state)machines,)DSPs,)...)

Difficult"to"use!"(...)"6"

Page 7: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

Unity:)Genera've)low3level)robo'cs)architecture)

•  Key)issue:)interface)high3level)soOware)to)low3level)electronics)

•  Approach:)specify)low3level)interface,)generate)all)required)gateware)and)soOware)

•  PlaWorm:)FPGAs,)real3'me)network,)modular)electronics)

•  Status:)framework)works)reliably,)generator)is)work3in3progress)

FPGA FPGA

BMS CAN BridgeAddr space: 32 DWords

PWM outputMem size: 2

DWords

WB MasterAddr space 64 DWords

WB Interconnect

WB Slave

WB Master

MemoryMem size: 32 DWords

WB Slave

WB Slave

WB MasterAddr space 1024 DWords

TosNet coreMem size: 1024 DWords

WB Slave

FPGA

FPGA

FPGA

FPGA

UART, Ethernet, PCIe, etc.

PC PC

UART, Ethernet, PCIe, etc.

Unity-Link

PCIe endpointWB wrapper

Unity-Link

PCIe endpointWB wrapper

(Details)" 7"

Page 8: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

Unity:)Genera've)low3level)robo'cs)architecture)

•  Key)issue:)interface)high3level)soOware)to)low3level)electronics)

•  Approach:)specify)low3level)interface,)generate)all)required)gateware)and)soOware)

•  PlaWorm:)FPGAs,)real3'me)network,)modular)electronics)

•  Status:)framework)works)reliably,)generator)is)work3in3progress)

(Details)" 8"

interface ftdi_uart_if { rx: inputport tx: outputport } ... fpga1.pin[A12] = ft232h.tx fpga1.pin[B6] = leds.bit(0) ... node led_blinker { board: XC6LX45( ft232h=ftdi_uart_if) led: public outputport(7) configuration { board.ft232h = unity_serial( serial=board.ft232h, rate=mbaud(6)) board.leds = led } }

Page 9: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

Unity:)Genera've)low3level)robo'cs)architecture)

•  Key)issue:)interface)high3level)soOware)to)low3level)electronics)

•  Approach:)specify)low3level)interface,)generate)all)required)gateware)and)soOware)

•  PlaWorm:)FPGAs,)real3'me)network,)modular)electronics)

•  Status:)framework)works)reliably,)generator)is)work3in3progress)

(Details)" 9"

Generic"components:"–  CPUs,"DSPs,"state"machines"

–  configured"Specific"components:"

–  motor"controller,"hardware"interface"

–  implemented"in"VHDL"

Interconnects:"–  shared"memory,"data"buses,"..."

–  mostly"implicit,"but"could"be"explicit"

"

Page 10: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

Unity:)Genera've)low3level)robo'cs)architecture)

•  Key)issue:)interface)high3level)soOware)to)low3level)electronics)

•  Approach:)specify)low3level)interface,)generate)all)required)gateware)and)soOware)

•  PlaWorm:)FPGAs,)real3'me)network,)modular)electronics)

•  Status:)framework)works)reliably,)generator)is)work3in3progress)

10"

component A { VHDL instantiation } component B { statemachine specification } component C { control equation for DSP } component D { C program real-time configuration (*) }

(*):"Lange"et"al:"HartOS"U"A"hardware"implemented"RTOS"for"hard"realUYme"applicaYons"

•  Use"extensible,"modular"grammar"system?"

•  ShooYng"sparrows"with"cannons?"

Page 11: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

A)step)further:)Migra'ng)soOware)components)into)a)real3'me)context)

•  Concretely,)ROS:)–  C++)implementa'on)–  publish/subscribe)–  RPC)(aka)“service”))

•  Interface)dependencies)specified)

•  Gateware)equivalent)–  soOcore)with)HartOS)(*))–  shared)memory)–  FIFO+address/data)bus)

•  Requires)sta'c)component)structure)and)thread)'ming)

11"

Page 12: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

GPCE Concrete)approach:)“GPCE(*)”)

•  In)both)cases:)MDSD)1.   declare)requirements,)

populate)metamodel,)transform,)generate)VHDL)code)

2.   simplify)code)genera'on)by)using)fixed)architecture)populated)by)configuring)VHDL)components)

interface ftdi_uart_if { rx: inputport tx: outputport } interface ft232_if: ftdi_uart_if | ...; board XC6LX45 { interface { ft232h: ft232_if leds: outputport(7) clk200Mi: inputport(freq=200000000) } fpga1: fpga("sp6lx45-3") configuration { ft232h = configuration.ft232h fpga1.pin[A11] = clk200Mi fpga1.pin[C14] = ft232h.rx ...

Toolchain?)12"

Page 13: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

Step)1:)PyParsing)

lbrace,rbrace,lpar,rpar,colon)="map(Suppress,'{}():’)"..."usp_member"="Group(ident('name')"+"colon"""+"usp_port_type)('member')"usp_extends"="colon"+"delimitedList(ident,delim='|')"usp_interface"="Literal('interface')"+"ident('name')"""+"OpYonal(usp_extends)('extends')"+"lbrace"""+"Group(ZeroOrMore(usp_member))('members')"+"rbrace"

interface ftdi_uart_if { rx: inputport tx: outputport } interface ft232_if: ftdi_uart_if | ...; board XC6LX45 { interface { ft232h: ft232_if leds: outputport(7) clk200Mi: inputport(freq=200000000) } fpga1: fpga("sp6lx45-3") configuration { ft232h = configuration.ft232h fpga1.pin[A11] = clk200Mi fpga1.pin[C14] = ft232h.rx ...

[['interface',)'Odi_uart_if',)[],)))[['rx',)'inputport'],))))))['tx',)'outputport']]],)))['interface',)'O232_if',)['Odi_uart_if',)...]]))...)

Step)2:)?) 13"

Page 14: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

PyNABL?)

NABL*)(presumably,)not)tried))namespaces"interface"member"rules)""Interface(i,_,_):"""""defines"unique"interface"i"""""scopes"member"""Member(m,_)"""""defines)unique)member"m"""InterfaceExtends(i):"""""refers"to"interface"i"""""imports"member"(transi've)"

PyNABL)(work3in3progress,)...))ub"="Binder()"uinterface"="ub.namespace("interface”)"umember"="ub.namespace("member")""uinterface.name"="Defini'on()"uinterface.members"="Scope(umember)"uinterface.extends"=""""References(uinterface)."""importsTransi'veScope(umember)"umember.name"="Defini'on()""

*:"Konat"et"al:"DeclaraYve"Name"Binding"and"""""Scope"Rules,"SLE"2012" 14"

(Details)"

Page 15: Automa'c)Genera'on)of)an)) Electronics3to3Middleware ... · Automa'c)Genera'on)of)an)) Electronics3to3Middleware)Interface)Layer)) (Work&in&progress). Ulrik)Pagh)Schultz) (with:)Anders)Lange,)Anders)Sørensen))

Lightweight)toolchain?!)

•  Parser)and)model)builder:)internal)Python)DSL)•  Model)to)model:)it’s)a)func'onal)language)(...))•  Model)to)code:)Django)templates)(...))•  Infrastructure:)python)modules)/)unix)

Claim:)we)need)more)lightweight)and))easy3to3use)MDSD)toolchains!)

15"