En fait je n'ai présenté que le «core», si on intégrait que cette partie cela ne fonctionnerait pas bien du tout ;)
Le passage du langage HDL au «schéma électronique» se nomme la Synthèse. Il permet de transformer un code «haut-niveau» en netlist.
La netlist est ce qui correspond au schéma électronique, puisque c'est une liste des composants avec leurs connections.
Pour être intégrer dans un FPGA il y a encore une étape de package puis placement-routage et enfin la génération du fichier de configuration -> le bitstream.
Et oui, il faut également établir une correspondance entre les I/O (ici le bouton, les sorties bpm ainsi que l'horloge et le reset) sur le FPGA et le «core».
Je pense faire tout ça, une fois que j'aurai trouver une plate-forme qui me convient et surtout le temps !
Si je ne trompes pas (ça fait des années que je n'ai pas fait de Chisel, et encore moins du Chisel3), il manque une resynchronisation du signal button par rapport à l'horloge timepulse…
Nope, pas de problème de resynchronisation entre timepulse et count, car timepulse n'est pas une horloge. C'est un signal qui passe à '1' quand le compteur déborde (et repasse à zero) :
La valeur de timpulse est ensuite utilisée avec la fonction risingedge() définie avant :
defrisingedge(x:Bool)=x&&!RegNext(x)
Cette fonction «sauvegarde» la valeurs précédente du signal 'x' et s'en sert pour détecter un front montant en regardant la valeur présente du même signal. La sauvegarde se fait avec un registre (RegNext()).
Tout le code présenté est cadencé avec une seule horloge. Cette horloge est implicite, on ne la voit pas dans le code. Il n'y a donc pas de franchissement de domaine d'horloge … sauf pour le signal d'entrée mais comme dit dans l'article : c'est quelque chose qu'il faut ajouter à l'intégration dans le FPGA.
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)
Un truc qui est sympa aussi avec les LED. C'est qu'on peu s'en servir comme capteur de luminosité !
En effet branché «à l'envers» une led se comporte comme un condensateur dont la capacité varie en fonction de la luminosité.
Bravo pour ce journal qui nous éclairent sur un successeur (encore un ;-)) du couple fameux VHDL/Verilog.
Je ne trouve pas qu'il y en ait tant que ça perso. Mais c'est vrai que depuis 2 ou 3 ans ça commence à bouger. À ma plus grande joie ;)
Par contre, je suis surpris que ce langage prenne pour parti pris un tout-synchrone. J'ai certes arrêté la conception HW il y a quelques années, mais pour les designs complexe (au-delà de la dizaine de millions de portes), on parlait beaucoup de GALS (Globally Asynchronous Locally Synchronous). Comment un tel langage peut-il être compatible de ce paradigme ?
C'est bien l'esprit du langage en fait. On est bien «localement synchrone» avec le concept de domaines d'horloges. Il est tout à fait possible de changer de domaines d'horloges d'un module à l'autre. Mais c'est au développeur de bien soigner ses traversées de domaines d'horloge. C'est encore un point noir de Chisel à mon avis, même s'il existe quelques fonctions comme la fifo asynchrone ou le registres à décalage pour faciliter ça.
Il n'est pas possible de garantir le temps de propagation entre deux portes logique dans un FPGA à cause du placement routage.
En effet pour connecter la sortie d'une porte logique sur une autre il est nécessaire de passer par un nombre aléatoire de connexions qui seront différente à chaque synthèse/placement routage.
Si nos signaux d'entrées d'une porte logique «ET» par exemple n'arrive pas exactement en même temps, le résultat de sortie va passer par plusieurs valeurs fausses avant de se stabiliser.
Pour éviter de propager ces erreurs on va mémoriser le résultat à un moment précis − la plupart du temps sur le front montant d'une horloge principale − au moyen d'une Bascule D.
Ces la valeurs de sorties de la bascule D qui seront prisent comme résultat pour être propagées dans d'autre calculs. On parle de système synchrone quand toutes les Bascules D se déclenchent sur la même horloge.
L'analyse des timings consistera alors a s'assurer qu'entre deux bascules les signaux se propagent plus rapidement qu'une période de l'horloge.
Et effectivement c'est pas une présentation trop violente (limite j'ai dû chercher où était le message. C'est peut-être même pas assez visible pour le coup) donc c'est cool.
Faudrait peut-être que j'améliore un peu en effet. Peut-être le mettre au moins dans un cadre rouge. Mais je suis pas un dieux du HTML/Css donc il me faut toujours du temps pour faire les trucs web.
Edit: dommage qu'on puisse pas mettre de commentaires sur ton blog sans être inscrit. Je comptais laisser en commentaire là-bas et me suis rabattu sur le forum linuxfr par dépit. :-/
Il faut que j'améliore ça aussi ;). À la base c'était permis pour tout le monde mais je me tapait trop de spam. Du coup j'ai régulé de manière assez violente. Peut-être qu'avec une simple captcha je peu éviter le spam mais permettre les commentaire «publique» quand même.
[^] # Re: HDL
Posté par martoni (site web personnel, Mastodon) . En réponse au journal Un composant électronique TapTempo avec Chisel3. Évalué à 2.
En fait je n'ai présenté que le «core», si on intégrait que cette partie cela ne fonctionnerait pas bien du tout ;)
Le passage du langage HDL au «schéma électronique» se nomme la Synthèse. Il permet de transformer un code «haut-niveau» en netlist.
La netlist est ce qui correspond au schéma électronique, puisque c'est une liste des composants avec leurs connections.
Pour être intégrer dans un FPGA il y a encore une étape de package puis placement-routage et enfin la génération du fichier de configuration -> le bitstream.
Et oui, il faut également établir une correspondance entre les I/O (ici le bouton, les sorties bpm ainsi que l'horloge et le reset) sur le FPGA et le «core».
Je pense faire tout ça, une fois que j'aurai trouver une plate-forme qui me convient et surtout le temps !
J'ai plus qu'une balle
[^] # Re: Il manque une synchronisation
Posté par martoni (site web personnel, Mastodon) . En réponse au journal Un composant électronique TapTempo avec Chisel3. Évalué à 2.
Nope, pas de problème de resynchronisation entre timepulse et count, car timepulse n'est pas une horloge. C'est un signal qui passe à '1' quand le compteur déborde (et repasse à zero) :
La valeur de timpulse est ensuite utilisée avec la fonction risingedge() définie avant :
Cette fonction «sauvegarde» la valeurs précédente du signal 'x' et s'en sert pour détecter un front montant en regardant la valeur présente du même signal. La sauvegarde se fait avec un registre (RegNext()).
Tout le code présenté est cadencé avec une seule horloge. Cette horloge est implicite, on ne la voit pas dans le code. Il n'y a donc pas de franchissement de domaine d'horloge … sauf pour le signal d'entrée mais comme dit dans l'article : c'est quelque chose qu'il faut ajouter à l'intégration dans le FPGA.
J'ai plus qu'une balle
[^] # Re: bonne idée ...
Posté par martoni (site web personnel, Mastodon) . En réponse au journal Naissance de la Taptempo-Federation. Évalué à 10.
)
J'ai plus qu'une balle
# Collision de nom ?
Posté par martoni (site web personnel, Mastodon) . En réponse à la dépêche Sortie de la version 7.12.0 de Bokeh. Évalué à 2.
Il n'y aurait pas une collision avec le nom de la librairie python permettant de faire des graphs en HTML/Javascript ?
J'ai plus qu'une balle
[^] # Re: À quand le brainfuck
Posté par martoni (site web personnel, Mastodon) . En réponse au journal Portage de TapTempo en Perl6. Évalué à 1.
Vœux exaucé ;)
J'ai plus qu'une balle
# À quand le brainfuck
Posté par martoni (site web personnel, Mastodon) . En réponse au journal Portage de TapTempo en Perl6. Évalué à 2. Dernière modification le 24 août 2019 à 18:09.
J'attends avec impatience le portage de TapTempo en brainfuck et en whitespace ;)
J'ai plus qu'une balle
[^] # Re: Serait-ce le même ?
Posté par martoni (site web personnel, Mastodon) . En réponse à la dépêche Seconde mise en demeure pour l'association LinuxFr. Évalué à 2.
Sinon paf pastèque !
J'ai plus qu'une balle
[^] # Re: Les brouzoufs
Posté par martoni (site web personnel, Mastodon) . En réponse à la dépêche Seconde mise en demeure pour l'association LinuxFr. Évalué à 9.
Ça c'est quand tu as un livre à vendre. Pas sûr que pour un avocat ça soit de la bonne pub par contre (surtout s'il perd).
J'ai plus qu'une balle
[^] # Re: dubitatif
Posté par martoni (site web personnel, Mastodon) . En réponse au journal Après le kit HiFive, QWERTY Embedded Design propose un nouveau kit lowcost : LoFive. Évalué à 2.
Je me suis peut-être un peu emballé en parlant de «module pro». C'est plutôt une version light du module qu'ils ont produit avant. Tout simplement.
J'ai plus qu'une balle
[^] # Re: Bronsorisé par une tapette géante ?
Posté par martoni (site web personnel, Mastodon) . En réponse au journal Il dit qu'il s'est fait bronsoniser. Évalué à 4.
Monsieur n'est pas une tapette, monsieur est commissaire de police.
J'ai plus qu'une balle
# Bronsorisé par une tapette géante ?
Posté par martoni (site web personnel, Mastodon) . En réponse au journal Il dit qu'il s'est fait bronsoniser. Évalué à 4.
Comment ça je bluff ?!
J'ai plus qu'une balle
# Un système d'exploitation pour gouziphone !
Posté par martoni (site web personnel, Mastodon) . En réponse à la dépêche Sortie de Replicant 6.0. Évalué à 2.
Hormis le dessin d'un robot ressemblant furieusement à celui d'android, rien ne dit que l'os libre en question est destiné aux téléphones à caresser !
Je dit ça car j'ai mis du temps à comprendre, mais ça doit être l'âge ;)
J'ai plus qu'une balle
[^] # Re: Cotisations != employé
Posté par martoni (site web personnel, Mastodon) . En réponse au journal Un four à pain c'est considéré comme un employé ?. Évalué à 0.
On parle de cotisations social pas de taxe là. Les cotisations social vont dans les caisses de la sécu, retraite, prévoyance,… pour les gens.
J'ai plus qu'une balle
[^] # Re: Preuve formelle et supervision de la fabrication et de la distribution
Posté par martoni (site web personnel, Mastodon) . En réponse au journal HiFive1: Un Arduino à 320Mhz entièrement libre pour 2017. Évalué à 2.
On vote ?
Moi j'dis qu'il bluff pas.
(je ne savais pas que le Commissaire Bialès moulait sur linuxfr, la classe ;) )
J'ai plus qu'une balle
[^] # Re: Preuve formelle et supervision de la fabrication et de la distribution
Posté par martoni (site web personnel, Mastodon) . En réponse au journal HiFive1: Un Arduino à 320Mhz entièrement libre pour 2017. Évalué à 4.
À quand les captchas sur les commentaires linuxfr ?
Histoire d'éviter ce genre de robot pipotron-complotiste.
J'ai plus qu'une balle
[^] # Re: Code VHDL : peu de lignes ?
Posté par martoni (site web personnel, Mastodon) . En réponse au journal OPEN-V : premier microcontrôleur libre ?. Évalué à 2.
Et pourtant il en existe une pour le Lattice ice40 -> Icestorm
J'ai plus qu'une balle
[^] # Re: Code VHDL : peu de lignes ?
Posté par martoni (site web personnel, Mastodon) . En réponse au journal OPEN-V : premier microcontrôleur libre ?. É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
Pour le VHDL : principalement GHDL
J'ai plus qu'une balle
[^] # Re: Code VHDL : peu de lignes ?
Posté par martoni (site web personnel, Mastodon) . En réponse au journal OPEN-V : premier microcontrôleur libre ?. É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.
J'ai plus qu'une balle
# RISC-V
Posté par martoni (site web personnel, Mastodon) . En réponse au journal OPEN-V : premier microcontrôleur libre ?. É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.
J'ai plus qu'une balle
# Led comme capteur de luminosité
Posté par martoni (site web personnel, Mastodon) . En réponse à la dépêche Les diodes ne sont pas toutes des lumières. Évalué à 10.
Un truc qui est sympa aussi avec les LED. C'est qu'on peu s'en servir comme capteur de luminosité !
En effet branché «à l'envers» une led se comporte comme un condensateur dont la capacité varie en fonction de la luminosité.
On trouve quelque montage sur le web pour exploiter cette propriété.
https://duckduckgo.com/?q=led+as+light+sensor&t=ffnt&ia=web
J'ai plus qu'une balle
[^] # Re: Langage synchrone
Posté par martoni (site web personnel, Mastodon) . En réponse à la dépêche Sortie de Chisel 3, un langage de description matériel basé sur Scala. Évalué à 2.
Je ne trouve pas qu'il y en ait tant que ça perso. Mais c'est vrai que depuis 2 ou 3 ans ça commence à bouger. À ma plus grande joie ;)
C'est bien l'esprit du langage en fait. On est bien «localement synchrone» avec le concept de domaines d'horloges. Il est tout à fait possible de changer de domaines d'horloges d'un module à l'autre. Mais c'est au développeur de bien soigner ses traversées de domaines d'horloge. C'est encore un point noir de Chisel à mon avis, même s'il existe quelques fonctions comme la fifo asynchrone ou le registres à décalage pour faciliter ça.
J'ai plus qu'une balle
[^] # Re: Tout l'inverse du soft !
Posté par martoni (site web personnel, Mastodon) . En réponse à la dépêche Sortie de Chisel 3, un langage de description matériel basé sur Scala. Évalué à 10.
Il n'est pas possible de garantir le temps de propagation entre deux portes logique dans un FPGA à cause du placement routage.
En effet pour connecter la sortie d'une porte logique sur une autre il est nécessaire de passer par un nombre aléatoire de connexions qui seront différente à chaque synthèse/placement routage.
Si nos signaux d'entrées d'une porte logique «ET» par exemple n'arrive pas exactement en même temps, le résultat de sortie va passer par plusieurs valeurs fausses avant de se stabiliser.
Pour éviter de propager ces erreurs on va mémoriser le résultat à un moment précis − la plupart du temps sur le front montant d'une horloge principale − au moyen d'une Bascule D.
Ces la valeurs de sorties de la bascule D qui seront prisent comme résultat pour être propagées dans d'autre calculs. On parle de système synchrone quand toutes les Bascules D se déclenchent sur la même horloge.
L'analyse des timings consistera alors a s'assurer qu'entre deux bascules les signaux se propagent plus rapidement qu'une période de l'horloge.
J'ai plus qu'une balle
[^] # Re: Emulation d'un CPU 32-bits sur MCU 8-bits
Posté par martoni (site web personnel, Mastodon) . En réponse au journal [Bookmark] Faire tourner Linux sur un micro-contrôleur 8-bit. Évalué à 2.
Visiblement oui, mais le résultat reste un Linux qui tourne sur un microcontrôleur 8bits.
J'aime beaucoup le temps de boot de 4h !
J'ai plus qu'une balle
[^] # Re: Gâteau d'anniversaire
Posté par martoni (site web personnel, Mastodon) . En réponse au journal Le noyau Linux a 25 ans. Évalué à 2.
Manque les bougies !
J'ai plus qu'une balle
[^] # Re: Il suffit d'inverser les codes de détection d'adblock
Posté par martoni (site web personnel, Mastodon) . En réponse au message Nous avons remarqué que vous n'utilisez pas de bloqueur de publicité .... Évalué à 1.
Faudrait peut-être que j'améliore un peu en effet. Peut-être le mettre au moins dans un cadre rouge. Mais je suis pas un dieux du HTML/Css donc il me faut toujours du temps pour faire les trucs web.
Il faut que j'améliore ça aussi ;). À la base c'était permis pour tout le monde mais je me tapait trop de spam. Du coup j'ai régulé de manière assez violente. Peut-être qu'avec une simple captcha je peu éviter le spam mais permettre les commentaire «publique» quand même.
J'ai plus qu'une balle