Journal OPEN-V : premier microcontrôleur libre ?

21
24
nov.
2016

Suite à une entrée sur le blog hackaday.com, j'ai découvert ce projet mené par une université Colombienne.
Les specs sont visibles sur la page de financement participatif : https://www.crowdsupply.com/onchip/open-v. En bref :
- 8 KB SRAM
- 160 MHz, architecture RISC-V
- SPI, I2C, SDIO, and JTAG
- ADC 10-bit et DAC 12-bit, maxi 10MS/s
- 16 GPIO
Bon, ça casse pas trois pattes à un canard… mais c'est libre. En tout cas pour l'instant. Il n'y a pas d'EEPROM intégrée sur la puce pour le moment. Ils sont à la recherche d'IPs (implémentation d'une fonctionnalité dans une puce, vendue comme une licence). Comme ils ne trouvent pas de fournisseur, ils essayent de faire ça eux même :-)
A 106$ la carte de dev livrée, ça donne envie de participer quand même. Mais il faudra être patient… livraison prévue à partir du 27/04/2018 !

Je sais qu'aux états unis il y a un projet pour faire un CPU libre, je ne sais pas ou ça en est. Notre ami qui fabrique des serveurs open-source peut peut être nous donner plus de détails ?

Enfin, je ne connais rien au VHDL, mais les sources sont ici : https://github.com/onchipuis/.

  • # Code VHDL : peu de lignes ?

    Posté par (page perso) . Évalué à 1.

    Je trouve qu'il y a peu de lignes pour le code VHDL. Par exemple pour l'ALU (https://github.com/onchipuis/mriscvcore/tree/master/ALU) : environ 500 lignes, je m'attends à plus que ça… Un gentil lecteur compétent pourrait il éclairer ma lanterne ?

    • [^] # Re: Code VHDL : peu de lignes ?

      Posté par (page perso) . Évalué à 4.

      Il y a même aucune ligne de code VHDL dans le lien donné puisque c'est du Verilog ;)

      500 lignes de Verilog c'est déjà pas mal je trouve.

      • [^] # Re: Code VHDL : peu de lignes ?

        Posté par (page perso) . Évalué à 2.

        Il y a même aucune ligne de code VHDL dans le lien donné puisque c'est du Verilog ;)

        Ah, bon ben voila, merci de me sortir de mon obscurantisme ;p

        500 lignes pour une ALU c'est bon ? Je m'attendais vraiment pas à ça.

        Une autre question en passant : le code verilog, on peut l'utiliser pour simuler la puce ? Y a t'il des logiciels open-source pour le faire ? Y a t'il besoin de bibliothèques non libres ?

        • [^] # Re: Code VHDL : peu de lignes ?

          Posté par (page perso) . Évalué à 5.

          500 lignes pour une ALU c'est bon ? Je m'attendais vraiment pas à ça.

          Une ALU ce n'est pas bien compliqué, tout dépend après le nombre d'opérations supportée. Donc ce n'est pas déconnant pour une ALU de microcontrôleur. Pour un processeur moderne et puissant ce serait plutôt léger oui.

          Une autre question en passant : le code verilog, on peut l'utiliser pour simuler la puce ? Y a t'il des logiciels open-source pour le faire ? Y a t'il besoin de bibliothèques non libres ?

          Je connais plus le VHDL que le Verilog, mais en théorie les deux sont assez proches. En VHDL tu peux tout simuler, c'est même le principal intérêt d'utiliser de tels langages dans la phase de conception, pour s'assurer qu'il se comportera à priori correctement avant la coûteuse opération de mise sur puce.

          Par contre, je crois qu'en LL il n'y a rien pour simuler. Il y a normalement de quoi coder, générer une image et flasher (sur FPGA). Mais l'étape de simulation est complexe à réaliser. Peut être un jour.

          • [^] # Re: Code VHDL : peu de lignes ?

            Posté par (page perso) . Évalué à 2.

            De ce que je comprends :
            - VHDL simule le processeur au niveau physique ?
            - Verilog permet de compiler une structure de transistors, de l'appliquer sur un FPGA mais pas de simuler son fonctionnement physique ?

            • [^] # Re: Code VHDL : peu de lignes ?

              Posté par (page perso) . Évalué à 7.

              Non, VHDL et Verilog sont deux langage de description matériel. Les deux sont conçus initialement pour simuler le comportement final d'un composant numérique.

              L'un est basé sur un semblant de ADA et était une commande de l'armée américaine. L'autre est un langage initialement proprio de la société Cadence qui l'a «libéré» pour faire concurrence à VHDL.

              Les deux sont «simulable» bien sur vu qu'ils sont conçu pour ça. Il y a même des logiciels de simulation libre :

              • Pour le Verilog

                • Icarus assez complet.
                • Verilator, celui là est un peu spécial, il converti le modèle Verilog en un objet C++, ce qui permet d'accélérer nettement la simulation (100 fois plus rapide environ)
              • Pour le VHDL : principalement GHDL

            • [^] # Re: Code VHDL : peu de lignes ?

              Posté par . Évalué à 3.

              En fait ce sont tous les deux des langages de description mais le VHDL est plutôt utilisé en France le Verilog plutôt aux US et sûrement ailleurs aussi.

              Pour ce qui est de la simulation c'est surtout dépendant des outils présent autour du FPGA (ou CPLD) sur lequel vous travaillez, à partir du moment ou l'architecture est décrite …

              kentoc'h mervel eget bezan saotred

              • [^] # Re: Code VHDL : peu de lignes ?

                Posté par (page perso) . Évalué à 2.

                Merci pour les infos.
                En tout cas, de ce que j'ai vu rapidement sur Internet, on ne simule pas physiquement la puce (au niveau interactions physiques entre les transistors). Par contre on le fait en terme de lignes de données / timing / execution de code. Exemple : https://sourceforge.net/projects/pvsim/. Au passage, j'ai vu passé plusieurs outils de simulation pour Verilog.

                • [^] # Re: Code VHDL : peu de lignes ?

                  Posté par (page perso) . Évalué à 1.

                  Des simulateurs de Verilog ?

                  Pour VHDL, il y a GHDL.

                  environ 500 lignes, je m'attends à plus que ça…

                  Pour l'ALU, certains opérateurs semblent très haut niveau (genre l'addition, faire '+' entre deux fils ou registres ça marche pas magiquement en hardware, ça existe pas). L'avantage de cette approche, c'est qu'on peut se dire que le fondeur sera responsable de faire lui-même l'addition (généralement il réutilise un truc déjà développé).

                  Il est très "simple" de faire un additionneur N bits en VHDL/Verilog, par contre au niveau des timings c'est là que la complexité du monde hardware commence : comment faire pour propager efficacement une retenue ?

                  • [^] # Re: Code VHDL : peu de lignes ?

                    Posté par . Évalué à 6.

                    L'avantage de cette approche, c'est qu'on peut se dire que le fondeur sera responsable de faire lui-même l'addition (généralement il réutilise un truc déjà développé).

                    Non, en général, c'est le synthétiseurs qui fait le boulot (synopsys DC ou autre).

                    "La première sécurité est la liberté"

                    • [^] # Re: Code VHDL : peu de lignes ?

                      Posté par . Évalué à 2.

                      Non, en général, c'est le synthétiseurs qui fait le boulot (synopsys DC ou autre).
                      grâce à des bibliothèques fournis soit par le fondeur, soit par le synthétiseur mais financé par lui.
                      Rien n'est gratuit.

                      Dans la pratique, pour faire un circuit numérique (si on ne s'appelle pas Intel et qu'on développe tout en interne), on achète :
                      - une bibliothèque bas-niveau qui fournira les portes ET/OU/XOR… ainsi que les bascules au niveau transistor
                      - une bibliothèque moins bas niveau qui fournira les fonction mathématiques (+-..)
                      - un compilateur de mémoire SRAM (pour les mémoires directement intégrées dans le circuit)
                      - éventuellement des IP de très haut-niveau genre CPU (ARM ou autre)
                      (liste non exhaustive)

                • [^] # Re: Code VHDL : peu de lignes ?

                  Posté par . Évalué à 1.

                  Oui, c'est ça, le code VHDL (ou verilog) qu'on écrit est dit comportemental et on simule le comportement du circuit. cette simulation se fait au niveau cycle près. Ensuite des outils permettent de faire la synthèse, et la on obtient en sortie une description au niveau portes logiques et on peut à nouveau le simuler, et la on simule pas au niveau transistor mais au niveau porte si on a un modèle précis des portes utilisées pour la synthèse on peut faire des estimations de performances (fréquence horloge, conso…) qui sont relativement précises.

          • [^] # Re: Code VHDL : peu de lignes ?

            Posté par . Évalué à 3.

            Pour un processeur moderne et puissant ce serait plutôt léger oui.

            Je croyais que les nouveaux processeurs essayaient justement de "casser" leur multitude d'instructions CISC en RISC pour les faire traiter par des unités plus simple mais massivement parallèles. Car c'est justement cette complexité du CISC qui a permis à l'archi ARM qui est RISC (et donc plus simple) de percer, car ayant un rapport puissance/consommation/densité largement meilleur.

            kentoc'h mervel eget bezan saotred

            • [^] # Re: Code VHDL : peu de lignes ?

              Posté par (page perso) . Évalué à 2.

              J'ai commencé à bidouiller solaris et linux en PXE sur une station Sparc 5… processeur RISC en 2002.
              A l'époque, on ne savait pas "qui allait gagner" entre RISC et CISC.
              Aujourd'hui, c'est pareil :-) C'est juste qu'on commence à avoir une meilleure idée de dans quel cas utiliser l'un ou l'autre.
              En architecture des microprocesseurs ça a tendance à bouger ces dernières années. Que va donner RISC + GPU détournée ou RISC + FPGA intégré ? Quelle évolution les processeurs libres vont ils amener ?

            • [^] # Re: Code VHDL : peu de lignes ?

              Posté par . Évalué à 7. Dernière modification le 24/11/16 à 14:12.

              Le grand combat RISC/CISC ça date des années 90, non ?

              C'est un combat qui n'a aucun sens aujourd'hui, à ce que j'avais compris.

              "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

              • [^] # Re: Code VHDL : peu de lignes ?

                Posté par . Évalué à 4.

                Les avis divergent sur le sujet.

                Certains considèrent que comme Intel a réussi à implémenter les mêmes techniques que les RISC et a obtenir de très haute performance la différence d'ISA n'a plus grande importance.

                D'autres pensent que la raison pour laquelle Intel n'a pas réussi à concurrencer ARM sur l'embarqué est que le "décodeur x86" qui est très complexe est un inconvénient au niveau consommation d'énergie,
                bon l'ARM n'est pas vraiment un RISC(*) et son décodeur d'instruction doit quand même être assez compliqué aussi alors..

                *:il y avait une vidéo de présentation sur le RISC-V qui montrait bien toutes la complexité de l'ISA ARM mais je n'ai pas le lien désolé.

          • [^] # Re: Code VHDL : peu de lignes ?

            Posté par . Évalué à 2.

            En fait, je pense qu'il faut faire le distinguo entre FPGA et ASIC… Autant pour le FPGA c'est compliqué d'imaginer une chaîne complètement libre car les fabriquant protègent leur bébé. On voit mal altera ou xilinx balancer toutes les specs de leur dernier bébé fondu en 10nm et qui leur a coûté plusieurs millions de dollars de R&D.

            Mais pour le monde ASIC c'est différent puisque c'est du "full custom". Donc moyennant un bibliothèque bas niveau (corelib chez ams, par exemple) On pourrait tout à fait imaginer un simulateur, un compilateur/synthétiseur et tous les outils qui vont bien pour faire du layout, extraction de parasites et timing, DRC, LVS en logiciel libre.

            Pour ce qui est des bibliothèques ASIC, il ne faut pas rêver non plus, c'est pas libre et je pense que ça ne le sera jamais. Quand on achète une bibliothèque chez un fondeur ou un intermédiaire on signe un NDA. Au même titre que les fabricants de FPGA protègent leur bébé, les fondeurs protègent leur techno qui peut coûter des millions d'euros à développer, caractériser et à fabriquer. Donc ce qui est libre ici c'est uniquement le design (description RTL et peut être la synthèse).

            D'ailleurs, sur la page de levée de fond on peut lire que c'est du 130nm… quelqu'un sait quel process exactement ??
            On sait chez qui ils vont fabriquer, si c'est du multiprojet….?

            Les logiciels de traitement de texte sont à la rédaction ce que la 2CV est à l'automobile, une vieille voiture dont on se souvient avec nostalgie mais technologiquement dépassée

            • [^] # Re: Code VHDL : peu de lignes ?

              Posté par (page perso) . Évalué à 2.

              Autant pour le FPGA c'est compliqué d'imaginer une chaîne complètement libre car les fabriquant protègent leur bébé.

              Et pourtant il en existe une pour le Lattice ice40 -> Icestorm

            • [^] # Re: Code VHDL : peu de lignes ?

              Posté par . Évalué à 2.

              Autant pour le FPGA c'est compliqué d'imaginer une chaîne complètement libre car les fabriquant protègent leur bébé. On voit mal altera ou xilinx balancer toutes les specs de leur dernier bébé fondu en 10nm et qui leur a coûté plusieurs millions de dollars de R&D.

              ? Même si tu as une chaîne logicielle totalement libre, il faut bien que tu l'achète le FPGA, donc je ne vois pas trop en quoi ça coûterai de l'argent au fabriquant.
              Ou alors ils se font de la marge sur le composant ET sur les outils de programmation?
              Il me semblait que ça n'était pas le cas et qu'ils ne vendaient pas les outils de programmation de manière indépendante (l'achat du FPGA te donne le droits d'utiliser les outils de programmation (au moins ceux de base)), quelqu'un peut confirmer/infirmer?

              • [^] # Re: Code VHDL : peu de lignes ?

                Posté par (page perso) . Évalué à 1.

                Je peux répondre pour Xilinx (gamme Spartan, puis Virtex). Leur IDE (ISE pour les Spartan, Vivado pour les Virtex) est normalement payant pour quelques milliers de dollars / euros, mais il existe une version gratuite, nommé WebPack, mais généralement limitée à un nombre restreints de FPGA.

                Pour Altera, c'est le même fonctionnement, et pour Lattice, il existe une chaine de développement libre, mais très limité en terme de support matériel (du moins à une époque, ça a peut-être changé) et non officielle.

                • [^] # Re: Code VHDL : peu de lignes ?

                  Posté par . Évalué à 3.

                  Donc osfe a raison, ils font de l'argent en vendant les composants ET en vendant les outils de développement, curieux mélange..

            • [^] # Re: Code VHDL : peu de lignes ?

              Posté par . Évalué à 1.

              Juste un élément de réponse sur le problème du logiciel libre pour ASIC.
              En théorie c'est possible (il existe par exemple le logiciel Alliance qui fait ce genre de chose). Les logiciels proprio sont des outils très complexes qui demandent des milliers d'heures de dev. Je vois mal le monde du libre mobiliser une telle ressource humaine pour un soft qui au final intéresse peu de monde. Un truc comme cadence, c'est plus de 20 Go de soft d'installé (imagine donc ce que ça fait en lignes de code comparé à libreoffice).
              Et puis dernier détail, à la fin pour fabriquer le circuit il faut un fondeur. Par certain qu'un fondeur accepterai de donner ses info à une communauté du libre (comme les info pour les driver des cartes graphiques en somme). Et un soft libre sans "design kit" (les infos du fondeur qui vont bien), ben tu ne fera pas grand chose.
              Alors oui faire un simulateur de VHDL libre c'est possible d'ailleurs ça existe, mais tant que tu simules du VHDL tu n'a pas besoin de design kit.

  • # RISC-V

    Posté par (page perso) . Évalué à 2.

    Bon j'avais commencé une dépêche sur le sujet, mais je me suis fait doubler ;)

    C'est basé sur le cœur développé par l'université de Berkeley : Risc-V.

    C'est un cœur qui commence à avoir son petit succès. Il a déjà été intégré dans d'autre projet d'ASIC je crois.

  • # C'est pas le premier!

    Posté par (page perso) . Évalué à 2.

    • [^] # Re: C'est pas le premier!

      Posté par (page perso) . Évalué à 0.

      Ah ben ça alors… aussi libre que OPEN-V ???
      Je ne l'avais pas vu passer celui la !
      Après ce n'est peut être pas aussi porteur qu'un coeur RISC-V ?
      (ça fait des années que je veux essayer un parallax… pour le côté multi-coeur du µC… ahhh si j'avais le temps :-p)

      • [^] # Re: C'est pas le premier!

        Posté par . Évalué à 7.

        ahhh si j'avais le temps

        attends… tu moules sur linuxfr et tu dis "ahhhh si j'avais le temps" o_O

        • [^] # Re: C'est pas le premier!

          Posté par . Évalué à 4.

          attends… tu moules sur linuxfr et tu dis "ahhhh si j'avais le temps" o_O

          À la maison le soir, il veut dire. Parce que bouler, ça peut se faire au moulot (or the other way around).

  • # DAC/ADC libre ?

    Posté par . Évalué à 1.

    Autant un circuit tout numérique, je peux comprendre, on peut toujours le mettre sur un FPGA, c'est déjà pas mal. A condition que le code VHDL ou Verilog soit écrit pour être synthétisable, ce qui n'est pas obligatoirement le cas.
    Mais dans le journal ca parle de DAC et d'ADC ! il s'agit de bloc ayant des fonctions analogiques : et là j'ai des doutes :
    1- Verilog comme VHDL ne modélise que du numérique (OK il existe VHDL-AMS)
    2- même si on a un modèle VHDL-AMS, on en fait quoi ? Impossible de le mettre sur un FPGA
    3- un bloc analogique quand on le conçoit, c'est techno dépendant, donc pas de portage possible.
    voila mes deux balles de réflexions.

    • [^] # Re: DAC/ADC libre ?

      Posté par . Évalué à 4.

      On peut faire des DAC et des ADC en VHDL (ou Verilog). Bien evidement, cela suppose un petit montage condensateur + resistance, mais globalement, l'essentiel peut etre fait en numérique.

      Un exemple assez connu et simple a faire:
      - faire un DAC en generant un signal PWM suivi d'un étage RC pour filtrer
      - Pour faire un ADC: En utilisant le DAC, on peut comparer la sortie du DAC avec le signal à échantilloner, avec un bete comparateur VHDL. Il suffit alors d'approcher par dichotomie en ajustant la sortie du DAC pour que petit a petit on converge vers la valeur.

      Et on a ainsi un DAC/ADC sigma delta, quasiment 100% numerique à l'étage RC près.

      http://www.ti.com/lit/an/slyt423a/slyt423a.pdf

      • [^] # Re: DAC/ADC libre ?

        Posté par . Évalué à 1.

        OK un PWM peut ressembler à un DAC très basique, mais tu n'aura pas les perf de ce qui est annoncé ici.
        Ton 2eme exemple, l'ADC tu dis "on compare la sortie tu DAC avec le signal à échantillonner", là il s'agit d'un comparateur analogique de tension, tu ne le fera pas en VHDL…
        Quand à ton exemple d'ADC sigma delta, tu oublie juste le modulateur du même nom qui est complètement analogique, donc pas faisable en VHDL.
        Un sigma delta c'est beaucoup évolué qu'un "bete" PWM, ca fait une mise en forme du bruit pour ne pas avoir à faire un sur-échantillonnage trop important comme il faudrait le faire avec un PWM tout bête.
        Même si tu as un modèle (dans le langage que tu veux, pourquoi pas même du C) de ton DAc, tu n'aura aucune façon de le réaliser, simplement comme on le fait en numérique qur un FPGA par exemple.
        On l'interet d'un projet de matériel libre c'est de pouvoir le réaliser non ?

Suivre le flux des commentaires

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