15
FPGA comme co-processeur de Xenomai/Linux temps-r´ eel G. GOAVEC- MEROU Communication CPU-FPGA FPGA comme co-processeur de Xenomai/Linux temps-r´ eel - Pr´ esentation Redpitaya/Zynq, bus de communications et communication CPU-FPGA Gwenha¨ el GOAVEC-MEROU 17 janvier 2019 Slides disponibles sur http://www.trabucayre.com/enseignement/presentation_zynq.pdf 1 / 15

FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

  • Upload
    others

  • View
    8

  • Download
    1

Embed Size (px)

Citation preview

Page 1: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Communication CPU-FPGA

FPGA comme co-processeur deXenomai/Linux temps-reel - Presentation

Redpitaya/Zynq, bus de communications etcommunication CPU-FPGA

Gwenhael GOAVEC-MEROU

17 janvier 2019

Slides disponibles surhttp://www.trabucayre.com/enseignement/presentation_zynq.pdf

1 / 15

Page 2: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Motivation• s’approprier le principe de communication entre un processeur et

des peripheriques materiels• ne se limite pas simplement a la communication CPU/FPGA →

vrai egalement entre un cœur et les peripheriques materiels d’unprocesseur.

2 / 15

Page 3: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Rappel/acquisIntegration du bloc axi gpio dans le FPGA et exploitation depuis leprocesseur

DDR

FIXED_IO

axi_gpio_0

AXI GPIO

S_AXI

GPIOs_axi_aclk

s_axi_aresetn

led_o

processing_system7_0

ZYNQ7 Processing System

DDR

FIXED_IO

SPI_0

USBIND_0

M_AXI_GP0

TTC0_WAVE0_OUT

TTC0_WAVE1_OUT

TTC0_WAVE2_OUT

M_AXI_GP0_ACLK

FCLK_CLK0

FCLK_RESET0_N

processing_system7_0_axi_periph

AXI Interconnect

S00_AXI

M00_AXI

ACLK

ARESETN[0:0]

S00_ACLK

S00_ARESETN[0:0]

M00_ACLK

M00_ARESETN[0:0]

rst_processing_system7_0_125M

Processor System Reset

slowest_sync_clk

ext_reset_in

aux_reset_in

mb_debug_sys_rst

dcm_locked

mb_reset

bus_struct_reset[0:0]

peripheral_reset[0:0]

interconnect_aresetn[0:0]

peripheral_aresetn[0:0]

Rappel :

• Zynq Processing System : partie PS du Zynq ;

• Intercon : decodeur d’adresse ;

• axi gpio : un esclave AXI fournie par Xilinx

3 / 15

Page 4: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Bus de communication

Deja vu : protocoles serie (SPI, I2C).Le sujet : protocoles paralleles.Utilises pour :

• la communication avec les composants de RAM, de stockage(NAND, NOR, (e)MMC, etc.) ;

• la communication entre un cœur de processeur et les controleursmateriels ;

• communication avec les FPGAs

Composes generalement :

• d’un bus d’adresse ;

• d’un ou deux bus de donnees (bi-directionnels ou maıtre-esclaveet esclave-maıtre) ;

• signaux de controles (requete de lecture/ecriture, validite de ladonnee, acquittement, interruption)

4 / 15

Page 5: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Principe de fonctionnement

• un maıtre, n esclaves ;

• memoire utilisee comme une zone d’acces au peripherique ;

• memoire decoupee : chaque esclave dispose de sa propre zone etd’une sous adresse ;

Attention : les acces a la memoire sont alignes selon la taille (8bits,16, 32 ou 64)// ok : e c r i t u r e d ’ un s h o r t (16 b i t s ) a une a d r e s s e mu l t i p l e de 2 ( o c t e t s )pos = 0 x02 ; /∗ 1 << 1 ∗/∗( u n s i g n e d s h o r t∗) ( p t r f p g a+pos ) = 0 x01 ;

// f a i l e c r i t u r e d ’ un s h o r t (16 b i t s ) a une a d r e s s e mu l t i p l e de 1 ( o c t e t )pos = 0 x01 ; /∗ 1 << 0 ∗/∗( u n s i g n e d s h o r t∗) ( p t r f p g a+pos ) = 0 x01 ;

Un bus n octets n’implique pas obligatoirement des acces sur noctets :ex : controleur SPI sur STM32F3/4 : comportement different selon letype d’acces et la taille des donnees a transmettre.

5 / 15

Page 6: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Environnement materiel

Le materiel utilise, une carte Redpitaya (base de Zynq).

Le meme boitier contientun SOC et un FPGA

Caracteristiques :

• processeur doublecœur Cortex A9 ;

• FPGA equivalentartix7.

Communications : AXI slave et AXI High-Performance

• 32 bits de donnees ;

• 32 bits d’adresse ;

• DMA (Direct Memory Access) avec l’AXI HP.

• interruptions ;

Methodologie egalement valable pour le bus wishbone et AVALON

6 / 15

Page 7: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Architecture des designs

bloc design

IP2

IP1intercon

ZYNQ_wrapper

Axi

clk

reset

reset

axi

clk

reset

axi

clk

Structure interne :

• un wrapper pour le bloc design ;

• exportation du bus AXI, de l’horloge et du signal de reset ;

• decodeur d’adresse pour communiquer avec plusieurs blocs(IPs) : intercon

⇒ simplifie/accelere la phase de developpement d’IP.

Structure globale automatiquement generee par le logiciel Peripheral OnDemand 1 (Non traite dans ce TP).

1. http://github.com/martoni/periphondemand7 / 15

Page 8: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Decoupage d’adresse etabstraction

Principe :

• des plages d’adresses (1 Gb)dediees au niveau CPU(adresse absolue) ;

• celle-ci est decoupee ensous-adresses pour adresserchaque bloc independamment(intercon : adresse relativeau debut de la plaged’adresse) ;

• ce sous espace est egalementdecoupe pour acceder auxregistres d’un bloc (geree parle bloc, relatif a son adressede base).

0x00

0x01

0x02

0x00

0x01blo

ck

2

FP

GA

Ad

dre

ss

blo

ck

1

0x04

0x00

reg1

reg1

reg2

reg3

reg2

Intercon viewCPU view component view

8 / 15

Page 9: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Presentation bus AXI4 liteclk et reset : s00 axi aclk et s00 axi reset

Ecriture :

Adresse/controle :

• s00 axi awaddr

• s00 axi awvalid

• s00 axi awready

• s00 axi bresp

• s00 axi bvalid

• s00 axi bready

Donnees :

• s00 axi wdata

• s00 axi wvalid

• s00 axi wready

• s00 axi wstrb

Lecture :

Adresse/controle :

• s00 axi araddr

• s00 axi arvalid

• s00 axi arready

Donnees :

• s00 axi rdata

• s00 axi rvalid

• s00 axi rready

• s00 axi rresp

9 / 15

Page 10: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Presentation bus AXI4 lite : read

Adresse :

• s00 axi araddr

• s00 axi arvalid

• s00 axi arready

Donnees :

• s00 axi rdata

• s00 axi rvalid

• s00 axi rready

• s00 axi rresp

10 / 15

Page 11: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Presentation bus AXI4 lite : write

Adresse/controles :

• s00 axi awaddr

• s00 axi awvalid

• s00 axi awready

• s00 axi bresp

• s00 axi bvalid

• s00 axi bready

Donnees :

• s00 axi wdata

• s00 axi wvalid

• s00 axi wready

• s00 axi wstrb

11 / 15

Page 12: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Gestion de la communicationUtilisation d’un wrapper pour confiner la partie complexe.

Gestion lecture :r e a d b l o c : p r o c e s s ( c l k , r e s e t )b e g i n

i f r e s e t = ’ 1 ’ thenr e a d d a t a s <= ( o t h e r s => ’ 0 ’ ) ;

e l s i f r i s i n g e d g e ( c l k ) thenr e a d d a t a s <= r e a d d a t a s ;i f r e a d e n s = ’ 1 ’ then

c a s e a d d r s i swhen REG ID =>

r e a d d a t a s <= s t d l o g i c v e c t o r (→↪→ t o u n s i g n e d ( id , d a t s i z e ) ) ;

when REG RESULT =>r e a d d a t a s <= r e s u l t s ;

when o t h e r s =>r e a d d a t a s <= ( o t h e r s => ’ 0 ’ ) ;

end c a s e ;end i f ;

end i f ;end p r o c e s s r e a d b l o c ;

Gestion ecriture :w r i t e b l o c : p r o c e s s ( c l k , r e s e t )b e g i n

i f r e s e t = ’ 1 ’ theno p 1 s <= ( o t h e r s => ’ 0 ’ ) ;o p 2 s <= ( o t h e r s => ’ 0 ’ ) ;

e l s i f r i s i n g e d g e ( c l k ) theno p 1 s <= o p 1 s ;o p 2 s <= o p 2 s ;

i f w r i t e e n s = ’ 1 ’ thenc a s e a d d r s i swhen REG OP1 =>

o p 1 s <= w r i t e d a t a ;when REG OP2 =>

o p 2 s <= w r i t e d a t a ;when o t h e r s =>end c a s e ;end i f ;

end i f ;end p r o c e s s w r i t e b l o c ;

12 / 15

Page 13: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Outils pour le FPGA

Generation des binaires : Vivados o u r c e / opt / X i l i n x / Vivado /VERSION/ s e t t i n g s 6 4 . sh

Puis, pour lancer l’outil :v i v a d o&

Attention : les autres applications peuvent avoir des problemes a fonctionnerdans le terminal utilise pour Vivado (probleme de version des bibliotheques).

Generation du bit.bin :un fichier bif :a l l :{

p r o j d i r / o b j s / pro j name . r u n s / i m p l 1 / pro j name . b i t}

Generation : bootgen −w −image fichier.bif −arch zynq −process bitstream bin

Ensuite copie dans le repertoire partage.Sur la carte :

• copie du fichier bit.bin dans /lib/firmware

• flashage : echo ”proj name.bit . bin” > /sys/class/fpga manager/fpga0/firmware

Communication depuis le terminal : devmemdevmem 0 x43C00000 32 −−> r ead a 32 b i t s @0x43C00000 ( r eg 0)devmem 0 x43C00004 32 10 −−> w r i t e s 10 @ 0x43C00004 ( r eg 1)

13 / 15

Page 14: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Communication depuisl’espace-utilisateur

#d e f i n e PAGE SIZE 4096

#d e f i n e REG ID (0<<2)#d e f i n e REG START (2<<2)

/∗ a d r e s s e phy s i que du FPGA ∗/#d e f i n e FPGA BASE ADDR 0 x43C00000

[ . . . ]v o i d ∗p t r f p g a ;/∗ n e c e s s a i r e pour o b t e n i r un acce s a l a memoire ∗/i n t f d = open ( "/dev/mem" , O RDWR|O SYNC) ;i f ( f d < 0) {

r e t u r n EXIT FAILURE ;}

/∗ ob t e n t i o n d ’ un p o i n t e u r s u r l a page en memoire v i r t u e l l e∗ ou e s t p r o j e t e l a zone phy s i que∗/

p t r f p g a = mmap( 0 , PAGE SIZE , PROT READ|PROT WRITE , MAP SHARED,fd , FPGA BASE ADDR) ;

i f ( p t r f p g a == MAP FAILED) {r e t u r n −2;

}

/∗ l e c t u r e ∗/v a l u e = ∗( u n s i g n e d i n t ∗) ( p t r f p g a + REG ID ) ;

/∗ e c r i t u r e ∗/∗( u n s i g n e d i n t ∗) ( p t r f p g a + REG START) = 0 x01 ;

14 / 15

Page 15: FPGA comme co-processeur de Xenomai/Linux temps-réel ...jmfriedt.free.fr/presentation_zynq.pdf · FPGA comme co-processeur de Xenomai/Linux temps-r eel G. GOAVEC-MEROU Bus de communication

FPGA commeco-processeur deXenomai/Linux

temps-reel

G. GOAVEC-MEROU

Mise en application

1 decouverte de la communication : acces en lecture et ecritureaux registres

2 evolution pour ajouter un registre ;

3 acces a une RAM pour en lire le contenu :

4 reprise des applications Xenomai ;

5 creation du compteur de periode.

Utilisation du FPGA (temps-reel materiel) pour qualifier leslatences de Xenomai (temps-reel logiciel).

Sujet disponible surhttp://www.trabucayre.com/enseignement/tp_fpga.pdf

Codes disponibles surhttp://www.trabucayre.com/enseignement/tp_fpga_sources.tgz

15 / 15