Journal Intégration de TapTempo-Chisel sur APF27

Posté par (page perso) . Licence CC by-sa.
22
23
mai
2018

Dans un premier journal je décrivais le «core» de TapTempoChisel. Passons maintenant à l'intégration sur un vrai FPGA physique.

J'ai choisi pour cela une carte APF27 de chez armadeus. Cette carte possède un FPGA Spartan3A de chez Xilinx mais elle possède également un microprocesseur i.MX27 permettant de faire tourner Linux. La philosophie de la carte étant d'avoir une zone «en friche» avec le FPGA permettant d'ajouter des périphériques sur mesure.

Périphérique que nous allons construire avec le projet TapTempo. Le détail pas à pas de la construction de ce «périphérique» est donné sur le dernier article du front de libération des FPGA. Je vais juste me contenter ici de donner les grandes lignes de l'architecture.

Titre de l'image

Le signal d'entrée (bouton) est synchronisé par deux bascules D au moyen d'un simple registre à décalage :

val button_s = ShiftRegister(io.button, 2)

Puis on filtre les rebonds au moyen d'un compteur remis à zéro sur front montant ou descendant :

  when(debcounter =/= MAX_COUNT.U) {
    debcounter := debcounter + 1.U
  }.otherwise {
    when(risingedge(button_s) || fallingedge(button_s)){
      debcounter := 0.U
      button_deb := button_s
    }
  }

La valeur de sortie est sur 9 bits, nous y ajoutons donc des pins à zéro pour avoir un bus de données de 16bits correspondant au bus «WEIM» du processeur i.MX27 connecté au FPGA :

io.data := Cat("b0000000".U, tap_tempo.io.bpm)

On générera le verilog au moyen de la commande sbt de scala :

sbt 'runMain taptempo.APF27TapTempoDriver'

Qui nous permettra de récupérer des sources Verilog APF27TapTempo.v permettant de synthétiser avec ISE (le logiciel de synthèse de xilinx).
On y ajoutera un fichier de description du pinout au format ucf.

Puis on génére le bitstream du projet pour ensuite le télécharger sur la carte :

BIOS> tftpboot ${loadaddr} APF27TapTempo.bit

Et configurer le fpga :

BIOS> fpga load 0 ${loadaddr}

La valeur du tempo sera ensuite lisible sous U-Boot (mon design un peu trop vite fait bloque le bus de la flash empêchant Linux de démarrer …) en lisant dans l'espace mémoire du bus FPGA :

    BIOS> md.w C8000000
    c8000000: 007b 007b 007b 007b 007b 007b 007b 007b    {.{.{.{.{.{.{.{.
    c8000010: 007b 007b 007b 007b 007b 007b 007b 007b    {.{.{.{.{.{.{.{.
    c8000020: 007b 007b 007b 007b 007b 007b 007b 007b    {.{.{.{.{.{.{.{.
    c8000030: 007b 007b 007b 007b 007b 007b 007b 007b    {.{.{.{.{.{.{.{.
    c8000040: 007b 007b 007b 007b 007b 007b 007b 007b    {.{.{.{.{.{.{.{.
    c8000050: 007b 007b 007b 007b 007b 007b 007b 007b    {.{.{.{.{.{.{.{.
    c8000060: 007b 007b 007b 007b 007b 007b 007b 007b    {.{.{.{.{.{.{.{.
    c8000070: 007b 007b 007b 007b 007b 007b 007b 007b    {.{.{.{.{.{.{.{.

C'est le tempo du très mauvais «début de soirée» mesuré en live ici. La valeur est lue en hexadécimal ce qui nous donne donc un tempo de 123 bpm.

  • # clic clac

    Posté par (page perso) . Évalué à 2 (+1/-0).

    Super la démo vidéo !
    D'ailleurs on entend 2 sons quand le bouton est pressé. J'imagine que c'est l'appui puis le relâchement. Lequel est pris en compte ?

    Du coup ça ressemble à une partie de Dance Dance Révolution ton installation ;-)

    • [^] # Re: clic clac

      Posté par (page perso) . Évalué à 3 (+2/-0).

      J'imagine que c'est l'appui puis le relâchement.

      C'est ça ;)

      Lequel est pris en compte ?

      D'après la datasheet de la carte de développement, le bouton est branché via une résistance de «pull-up». La valeur est donc à '1' par défaut et à '0' quand on appuie dessus. Comme TapTempo déclenche sur front montant du signal bouton, c'est au relâchement que le comptage est pris en compte.

    • [^] # Re: clic clac

      Posté par (page perso) . Évalué à 1 (+0/-0).

      Par contre je me suis vautré pour le lien de la vidéo. Le vrai lien vers la vidéo est celui-ci.

  • # xkcdify ?

    Posté par (page perso) . Évalué à 2 (+0/-0).

    Tu l'as fait avec quel outil ton diagramme à la xkcd ?

    • [^] # Re: xkcdify ?

      Posté par (page perso) . Évalué à 1 (+0/-0).

      Tu l'as fait avec quel outil ton diagramme à la xkcd ?

      Comparer mon diagramme à xkcd est un grand honneur ! Mais je ne pense pas lui arriver à la cheville ;)

      Je débute avec ma tablette wacom et j'utilise MyPaint pour gribouiller.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.