JMLL2012
 
Partie 1
 

Introduction au YASEP
 

 
 

Yann Guidon
samedi 24 novembre 2012


 

"Ne pas céder à l'intimidation, qui n'est que le premier pas vers le renoncement civique et l'abdication de la liberté tout court."

 

"L'abeille et l'économiste"
par Yann Moulier Boutang, 2010, page 28


Les fabricants menacent l'intégrité et la propriété
  • UEFI
  • secure boot
  • TCPA

    "Intel Active Management Technology (AMT) is hardware-based technology for remotely managing and securing PCs out-of-band."
    http://www.uberwall.org/bin/download/download/102/lacon12_intel_amt.pdf: Non désactivable, mot de passe par défaut et envoyés en clair sur le réseau... Même éteint !


  • Les brevets freinent l'innovation

    MIPS : 82 brevets "essentiels"
    (plus 498 vendus à Allied Security Trust, "non practicing entity")

    Intel, IBM, SUN/Oracle...

    ARM : http://whitequark.org/blog/2012/09/25/why-raspberry-pi-is-unsuitable-for-education/

    Smartphone : "There are over 250,000 patents and 5 million claims at play inside your pocket."

     

    "Il ne peut y avoir de logiciel libre sans matériel libre"



     

    Pourquoi le YASEP ?

        joindre l'utile à l'agréable
     

    Pourquoi cette conférence ?

        aller au contact des utilisateurs


    Yet Another Small Embedded Processor

  • Original
  • Libre (Affero GPL)
  • Rupture avec le F-CPU
  • Configurable
  • Domaine d'application : contrôleur temps réel, 5 à 50 MIPS
  • Framework de développement léger et Web2.5 :
      outils JavaScripts (programmation, debug & configuration)
      intégrés dans un window manager
  • JavaScript permet utilité, utilisabilité et accessibilité
     
  • Lemmings (2004) http://www.elizium.nu/scripts/lemmings/
  • http://bellard.org/jslinux/ (2011) : un Linux dans votre brouteur
  • De nombreux projets Google : Wave, maps, et bien sûr Gmail
  • Kernel Drivers Compiled to Javascript and Run in Browser (November 07, 2012 by Antti Kantee, NetBSD)


  • En cours :
  • microYASEP en VHDL (GHDL et FPGA Actel depuis mars 2012)
  • Simulateur multithread dynamique
  •  
    Bientôt (décembre 2012) :
  • YASEP2013 à EHSM
  •  
    Ensuite (2013-2014) :
  • GNL
  • compilateur
  • Debug in-situ dans le navigateur
  •  
    Futur :
  • Micronoyau avec DeforaOS

  • DeforaOS sur une tablette :


     
    L'assembleur de Defora supporte les architectures :
  • amd64
  • arm (LE, BE)
  • dalvik (Android)
  • i386 and compatible
  • java (bytecode)
  • mips (LE, BE)
  • sparc
  • sparc64
  • yasep (16 and 32-bits depuis 2011-11-28)


  • Modèle de programmation :
     

    46 opcodes de base, déclinables avec conditions ou champ immédiat
    Fonction
    00h 20h 40h 60h 80h A0h C0h E0h
    Groupe 00h
    CTL
    NOP 00h
    ALONE
    !Cnd !WR !snd
    !si4 !I16
    CRIT 20h
    i
    !Cnd Opt !WR
    !snd !si4 !I16
    GET 40h
    RR,iR,IR
    sIR !snd I20
    PUT 60h
    RR,Ri,RI
    !Cnd !WR
    IN 80h
    RR,Ri,RI
    PRE
    OUT A0h
    RR,Ri,RI
    !Cnd !WR PRE
    CALL C0h
    RR,iR,IR
    sIR !snd I20
    CALL2 E0h
    IRR,RRR,iRR
    PRE
    04h
    SMT
    HALT 04h
    ALONE
    !Cnd !WR !snd
    IPC 24h
    RR,Ri,RI
    !Cnd !WR PRE
    IPE 44h
    RR,Ri,RI
    !Cnd !WR PRE
    IPR 64h
    RR,Ri,RI
    !Cnd !WR PRE
    08h
    IE
    MOV 08h
    RR,iR,IR
    sIR !snd I20
    IB 28h
    RRR,iRR
    rD3
    EZB 48h
    RRR,iRR
    ESB 68h
    RRR,iRR
    MOVH 88h
    RR,iR,IR
    sIR Y32 !snd
    IH A8h
    RRR,iRR
    Y32 C rD3
    EZH C8h
    RRR,iRR
    Y32 C
    ESH E8h
    RRR,iRR
    Y32 C
    0Ch
    SHL
    SHR 0Ch
    RR,iR,IRR,
    IR,RRR,iRR
    SAR 2Ch
    RR,iR,IRR,
    IR,RRR,iRR
    SHL 4Ch
    RR,iR,IRR,
    IR,RRR,iRR
    ROR 6Ch
    RR,iR,IRR,
    IR,RRR,iRR
    ROL 8Ch
    RR,iR,IRR,
    IR,RRR,iRR
    10h
    ROP2
    AND 10h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR
    ANDN 30h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR
    NAND 50h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR
    OR 70h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR
    ORN 90h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR
    NOR B0h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR
    XOR D0h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR
    XORN F0h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR
    14h
    ASU
    ADD 14h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR C
    SUB 34h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR C
    CMPU 54h
    RR,iR,IR
    !WR C Z
    CMPS 74h
    RR,iR,IR
    !WR C Z
    UMIN 94h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR aWR
    UMAX B4h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR aWR
    SMIN D4h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR aWR
    SMAX F4h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR aWR
    18h
    MUL
    MUL8L 18h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR Opt
    MUL8H 38h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR Opt
    MULI 58h
    RR,iR,IR
    !Cnd Opt !WR
    LUT8 78h
    RR,iR,IRR,
    IR,RRR,iRR
    aIRR PRE
    1Ch
    RSV
    INV FCh
    ALONE
    !Cnd !WR !snd
    !si4 !I16

    Encodage des instructions :

    Instructions courtes : 2 formes

    (La destination est écrite en dernier.)

    ADD R2,R1
    R1 <= R1 + R2
    1514131211 109876 543210
    src/Imm4 src/dest opcode Reg court
    R2 R1 ADD 0 0
     
    ADD [-8..7],R1
    R1 <= R1 + imm4
    1514131211 109876 543210
    src/Imm4 src/dest opcode Imm4 court
    2 R1 ADD 1 0

    Légende:
  • SND : Source (Negated) and Destination
  • SI4 : Source or Immediate (4 bits)

  • Instructions longues
     
    ADD R2,[-32768..32767],R1
    R1 <= R2 + Imm16
    31302928 27262524 23222120 19181716 1514131211 109876 543210
    Imm16 src/Imm4 src/dest opcode Imm16 long
    12345 R2 R1 ADD 0 1

     

    Instructions Etendues
    ADD R1,R2,R3
    R3 <= R1 + R2
    31302928 27262524 23222120 19181716 1514131211 109876 543210
    dest3 Reg src/Imm4 src/dest opcode Ext long
    R3 0 R2 R1 ADD 1 1
    ADD R1,[-8..7],R3
    R3 <= R1 + Imm4
    31302928 27262524 23222120 19181716 1514131211 109876 543210
    dest3 Reg src/Imm4 src/dest opcode Ext long
    R3 1 5 R1 ADD 1 1

    Instructions étendues

    Auto-update de pointeurs ou opérandes :

    ADD R1+ R2,R3
    R3 <= R1 + R2, R1 <= R1 + 1
    31302928 27262524 23222120 19181716 1514131211 109876 543210
    dest3 update Reg u src/Imm4 src/dest opcode Ext long
    R3   0   R2 R1 ADD 1 1

    00 pas de mise à jour
    01 post-incrémente
    10 prédécrémente
    11 post-incrémente
     
    4 bits disponibles pour
    mettre à jour src/dest et dest3

     
    À mettre au point en 2013

    Exécution conditionnelle :
    ADD R1,R2,R3 LSB0 R4
    Si R4 est pair alors R3 <= R1 + R2
    31302928 27262524 23222120 19181716 1514131211 109876 543210
    src cond dest3 cond Reg src/Imm4 src/dest opcode Ext long
    R4 R3 LSB0 0 R2 R1 ADD 1 1

    Conditions :
    NZ (not zéro) Z (Zéro)
    Bit set R1 bit clear R1
    LSB1 (impair) LSB0 (pair)
    MSB1 (negatif) MSB0 (positif)
    Si SRC4=PC :
    Always Never
    Carry NoCarry
    Zero Not zero

    La mémoire est accédée en 2 phases au travers de 5 paires de registres : A1-D1, A2-D2, A3-D3, A4-D4, A5-D5 : on pointe et on tire !

    Avantages : améliore la performance et la sécurité.

    Lecture :
      mov 1234h A1 ; initialise l'adresse à 1234h
      mov D1 R1    ; recopie le contenu de la mémoire dans R1 
    

    Écriture :

      mov 1234h A1 ; initialise l'adresse à 1234h
      mov R1 D1    ; écrit R1 dans la mémoire
    
  • IB et IH émulent l'opération "STORE BYTE" et "STORE HALF-WORD"
  • EZB, ESB, EZH et ESH émulent "LOAD BYTE" et "LOAD HALF-WORD"

  • Lorsqu'un accès sort d'un mot, le flag de retenue est mis à 1.

    Exemple de code en assembleur :
    ; (ce qui suit un point-virgule est un commentaire)
    ; Description: Juste un bête programme qui boucle
    ; en additionnant les nombres entiers de 1 à 10
    
    .name MonPremierProgramme
    .profile YASEP16
    
      mov 10 R1 ; initialise le compteur
          ; dans le registre R1, pour boucler 10 fois
      mov 0 R2  ; l'accumulateur est dans le
          ; registre R2, on le met à zéro
    
    ; corps de la boucle, tient dans 4 octets :
        add R1 R2 ; accumule le contenu de R1 dans R2
        add -1 R1 ; décrémente le compteur
    
      add -4 PC NZ R1 ; reboucle tant que R1 n'a pas atteint zéro
         ; (soustrait 4 au compteur de programme,
         ; ce qui saute au début du corps de la boucle)
    
      HALT ; fin du programme :
        ; HALT est une instruction qui bloque le CPU
    

    JMLL2012

    Partie 2

    L'architecture et
    les principes du
    YASEP

    Plan du microYASEP :

    ALU : Unité Arithmétique et Logique.

     


     


     




    Au tout début, le YASEP s'appelait VSP.
    Fusion de l'accès à la cache L0 avec le banc de registres
    => architecture "no load/store".

    En théorie ça aurait dû donner ça :

    Évolution du banc de registres :
     
    #0: PC  1 PC
    #1: R1  5 registres normaux
    #2: R2 
    #3: R3 
    #4: R4 
    #5: R5 
    #6: D5  5 registres de données :
    accèdent directement
    aux buffers

    5 registres d'adresse :
    contrôlent les buffers
    de mémoire

    #7: A5 
    #8: D4 
    #9: A4 
    #10: D3 
    #11: A3 
    #12: D2 
    #13: A2 
    #14: D1 
    #15: A1 

    Du VSP au YASEP :


    Registre destination

    microYASEP

    Réutilisation d'unités lors des deux phases :