IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

[FPGA] Programmer un contrôleur pour écran VGA avec une carte de développement FPGA [Tutoriel]


Sujet :

Embarqué

  1. #1
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 773
    Points : 58 126
    Points
    58 126
    Billets dans le blog
    42
    Par défaut [FPGA] Programmer un contrôleur pour écran VGA avec une carte de développement FPGA
    à tous,

    Pour cette rentrée, je vous propose ce tutoriel pour apprendre à configurer un contrôleur d’écran VGA sur une carte de développement FPGA :


    Objectif découvrir le protocole VGA et configurer la carte FPGA pour générer les signaux qui vont produire des images et autres animations vidéo à la résolution 640x480@60Hz.

    Bonne lecture, et bonne rentrée à tous

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    pour cet article.
    La conclusion qui décrit bien les difficultés que l'on peut rencontrer quand on souhaite débuter la programmation des FPGA. Il faut donc que j'apprenne à réfléchir autrement pour me lancer dans cette aventure.

    Citation Envoyé par f-leb
    il faudra se débarrasser de certains réflexes de programmeurs, s’approprier une nouvelle culture et comprendre que des notions de logique séquentielle et combinatoire sont indispensables pour comprendre ce qui se passe dans vos circuits

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 773
    Points : 58 126
    Points
    58 126
    Billets dans le blog
    42
    Par défaut
    Merci

    Le langage (Verilog ici) en lui-même n'est pas très compliqué : des affectations, des assignations de signaux, des if/else ou switch/case et on a l'essentiel

    Alors c'est vrai qu'il faut penser différemment, par exemple dans ce test (la coloration syntaxique Verilog n'est pas active sur le forum, donc copie d'écran) :
    Nom : Capture d’écran 2022-09-19 180201.jpg
Affichages : 1018
Taille : 33,4 Ko
    Le bloc always est évalué à chaque front montant de l'horloge (synchronisme).
    Le programmeur (non avisé) pourrait croire que si l'entrée in est à 1, la valeur out est d'abord mise à 1 (ligne 9), puis ensuite mise à 3 (ligne 10).
    Et donc si l'entrée in est maintenu à 1, la valeur out "clignote" en étant constamment rabaissée à 1 (ligne 9) avant de remonter à 3 (ligne 10).

    Que nenni, un FPGA n'est pas un CPU qui exécute séquentiellement l'instruction de la ligne 9, suivie de l'instruction de la ligne 10.

    L'ordre des lignes est important, mais seulement pour donner des priorités.
    Quand une variable est affectée plusieurs fois, c'est la dernière affectation qui est prioritaire.
    Ainsi, si in est à 1 :
    - la ligne 9 voudrait affecter 1 à out;
    - la ligne 10 voudrait affecter 3 à out;

    C'est donc la dernière affectation de la ligne 10 qui est prioritaire sur l'affectation de la ligne 9, et le circuit configuré fera en sorte que out prenne la valeur 3 si l'entrée in est à 1.

    Nom : Capture d’écran 2022-09-19 175609.jpg
Affichages : 970
Taille : 41,1 Ko

    C'est un peu fatigant au début ces subtilités (et à la fin aussi d'ailleurs)


    Edit 20/09/22 :
    Je précise que le code précédent est rédigé pour illustrer un phénomène, mais du point de vue du style de codage, il est mauvais On écrira plutôt avec un else :

    Code verilog : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (in) out <= 3;
    else out <= 1;

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Et deux remarques :
    1- je vois que la déclaration de out est la suivante :
    et non (bah, oui programmeur avant tout )
    2- Ce qui me surprend c'est que tu puisses affecter 3 à une sortie. Dans mon esprit logique c'est 1 ou 0.
    ah non finalement.... out est un registre 2 bits donc 3 ça passe

    Et l'affectation est le symbole "<=" ce qui est assez perturbant pour moi qui suis habitué au "="

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 773
    Points : 58 126
    Points
    58 126
    Billets dans le blog
    42
    Par défaut
    Un pt'it code pour illustrer :
    Code verilog : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    module test();
      reg [2:0] a;  // cas le + fréquent
      reg [0:2] b;  
    	
      initial begin
        a = 3'b100;
        b = 3'b100;
    		
        $display("%0b %0b %0b", a[2], a[1], a[0]);
        $display("%0b %0b %0b", b[2], b[1], b[0]); 
      end	
    endmodule

    Résultat :

    Citation Envoyé par Auteur Voir le message
    Et l'affectation est le symbole "<=" ce qui est assez perturbant pour moi qui suis habitué au "="
    Le plus perturbant, c'est que les deux symboles existent pour les affectations : <= ou =, affectation non-bloquante (non-blocking) vs affectation bloquante (blocking).

    Et il y a bien une différence de comportement entre les deux !! Euhh... je reviens plus tard pour expliquer

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Un pt'it code pour illustrer :
    Code verilog : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    module test();
      reg [2:0] a;  // cas le + fréquent
      reg [0:2] b;

    Résultat :
    ah... j'ai compris : little-endian et big-endian ?


    Citation Envoyé par f-leb Voir le message
    Le plus perturbant, c'est que les deux symboles existent pour les affectations : <= ou =, affectation non-bloquante (non-blocking) vs affectation bloquante (blocking).

    Et il y a bien une différence de comportement entre les deux !! Euhh... je reviens plus tard pour expliquer
    ah oui, mais non.

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 773
    Points : 58 126
    Points
    58 126
    Billets dans le blog
    42
    Par défaut
    Citation Envoyé par Auteur Voir le message
    ah... j'ai compris : little-endian et big-endian ?
    C'est bien ça !

    Citation Envoyé par Auteur Voir le message
    ah oui, mais non.
    Ah oui, mais si.

  8. #8
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 485
    Points : 19 518
    Points
    19 518
    Par défaut
    Salut à tous.

    Citation Envoyé par Auteur
    Et l'affectation est le symbole "<=" ce qui est assez perturbant pour moi qui suis habitué au "="
    Le "=" n'est pas un symbole d'affectation mais un symbole d'égalité.
    Quand tu fais de l'algorithmique, le symbole de l'affectation est bien une flèche dirigée vers la gauche.
    Je reconnais que ce n'est pas très judicieux de prendre "<=" pour une flèche car ce symbole est une comparaison dont le sens est "inférieur ou égale".
    A vrai dire, chaque langage veut se démarquer par l'usage de certains symboles qui peuvent nous induire en erreur.
    L'exemple même est le "===" de javascipt que je trouve totalement absurde. Le prochain langage fera "====". Où va-t-on s'arrêter en nombre de "=" ?

    Citation Envoyé par f-leb
    Le plus perturbant, c'est que les deux symboles existent pour les affectations : <= ou =, affectation non-bloquante (non-blocking) vs affectation bloquante (blocking).
    Je ne te le fais pas dire. C'est absurde d'utiliser deux symboles pour une affectation.

    Citation Envoyé par f-leb
    Et il y a bien une différence de comportement entre les deux !! Euhh... je reviens plus tard pour expliquer
    Ca veut dire quoi une affectation bloquante ???
    La première affectation bloque, et les autres ne pourront pas se faire.

    Cordialement.
    Artemus24.
    @+

  9. #9
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Hello

    Citation Envoyé par Artemus24 Voir le message
    Le "=" n'est pas un symbole d'affectation mais un symbole d'égalité.
    Quand tu fais de l'algorithmique, le symbole de l'affectation est bien une flèche dirigée vers la gauche.
    Je reconnais que ce n'est pas très judicieux de prendre "<=" pour une flèche car ce symbole est une comparaison dont le sens est "inférieur ou égale".
    A vrai dire, chaque langage veut se démarquer par l'usage de certains symboles qui peuvent nous induire en erreur.
    L'exemple même est le "===" de javascipt que je trouve totalement absurde. Le prochain langage fera "====". Où va-t-on s'arrêter en nombre de "=" ?
    le "=" dans la majorité des langages de programmation est une affectation. En algorithmie, il s'agit bien d'une flèche orientée vers la gauche.
    En javascript le "==" est une égalité sur les valeurs, mais "===" est une égalité stricte et l'interpréteur va non seulement comparer les valeurs, mais également les types (entier, chaine, etc.). Il ne s'agit pas d'une lubie du concepteur.



    Citation Envoyé par Artemus24 Voir le message
    Ca veut dire quoi une affectation bloquante ???
    La première affectation bloque, et les autres ne pourront pas se faire.
    Comme l'a indiqué f-leb il faut penser matériel pas programmation. En automatisme, au démarrage, je me souviens qu'il fallait initialiser certains composants (forcer à 1 ou forcer à 0) pour éviter des états indéterminés et donc des comportements étranges de l'automate. Il doit s'agir de quelque chose de similaire.

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 773
    Points : 58 126
    Points
    58 126
    Billets dans le blog
    42
    Par défaut
    Salut,

    Citation Envoyé par Artemus24 Voir le message
    Je ne te le fais pas dire. C'est absurde d'utiliser deux symboles pour une affectation.
    J'ai juste dit que c'était perturbant, mais cela n'a rien d'absurde. La comparaison avec d'autres langages n'est pas pertinente ici, Verilog/systemVerilog n'est pas un langage de programmation, c'est un langage de description de matériel (Hardware Description Language). Les lignes du code ne sont pas compilées pour fournir des instructions exécutées séquentiellement par un CPU. On s'attache à décrire des processus qui fonctionneront en parallèle (de façon concurrente). Et quand une « variable » est lue dans un processus pendant qu'elle est modifiée en même temps dans un processus concurrent, on peut se demander quel sera le résultat de l'affectation A noter que les évolutions plus récentes de Verilog (devenu SystemVerilog) avec ses nouveaux blocs always_comb (pour la logique combinatoire) et always_ff (pour la logique séquentielle) facilite la vie du développeur sur les affectations autorisées.


    Citation Envoyé par Artemus24 Voir le message
    Ca veut dire quoi une affectation bloquante ???
    La première affectation bloque, et les autres ne pourront pas se faire.
    C'est l'idée... Je suis désolé de ne pas pouvoir apporter une explication immédiate et rapide mais cette notion d'affectation bloquante/non-bloquante n'est pas évidente du tout à expliquer et va me prendre du temps.
    Je suis en train de regarder un document qui raconte dès le synopsis :
    One of the most misunderstood constructs in the Verilog language is the nonblocking assignment. Even very experienced Verilog designers do not fully understand how nonblocking assignments are scheduled in an IEEE compliant Verilog simulator and do not understand when and why nonblocking assignments should be used...
    Rien que ça...

    En pratique, tu suis sans trop te poser de questions les quelques guidelines pour savoir quand utiliser l'une ou l'autre et ça marche très bien.
    Il faut que je me documente un peu et que je trouve des exemples pertinents, mais j'essaierai d'apporter un éclairage (dans un billet de blog peut-être).

  11. #11
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 485
    Points : 19 518
    Points
    19 518
    Par défaut
    Salut à tous.

    Citation Envoyé par F-leb
    J'ai juste dit que c'était perturbant, mais cela n'a rien d'absurde.
    Ben si, car l'état d'une variable n'a aucun rapport avec une affectation.
    Tu débloques, tu affectes et tu bloques à nouveau. Là, c'est logique.

    Citation Envoyé par F-leb
    Et quand une « variable » est lue dans un processus pendant qu'elle est modifiée en même temps dans un processus concurrent, on peut se demander quel sera le résultat de l'affectation.
    Ce que tu me décris est une section critique sous windows, que l'on nomme sous linux un mutex (Mutual Exclusion). Cela se gère par une couche logiciel qui va gérer les accès au matériel.

    Citation Envoyé par F-leb
    Il faut que je me documente un peu et que je trouve des exemples pertinents, mais j'essaierai d'apporter un éclairage (dans un billet de blog peut-être).
    Je n'en demande pas autant. Comme le dit Auteur, ce n'est pas de la programmation mais une façon de gérer le matériel, qui peut en dérouter plus d'un.

    Cordialement.
    Artemus24.
    @+

  12. #12
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 773
    Points : 58 126
    Points
    58 126
    Billets dans le blog
    42
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Ben si, car l'état d'une variable n'a aucun rapport avec une affectation.
    Tu débloques, tu affectes et tu bloques à nouveau. Là, c'est logique.
    C'est logique en programmation, mais en langage HDL d'autres questions se posent. Le problème avec les FPGA, c'est de savoir quand tu débloques, et quand tu affectes. J'essaierai de donner un exemple plus tard...


    Citation Envoyé par Artemus24 Voir le message
    Ce que tu me décris est une section critique sous windows, que l'on nomme sous linux un mutex (Mutual Exclusion). Cela se gère par une couche logiciel qui va gérer les accès au matériel.
    Certes, mais ces concepts qui sont gérés dans les systèmes d'exploitation n'ont rien à voir avec les FPGA...


    Citation Envoyé par Artemus24 Voir le message
    Citation Envoyé par f-leb
    Il faut que je me documente un peu et que je trouve des exemples pertinents, mais j'essaierai d'apporter un éclairage (dans un billet de blog peut-être).
    Je n'en demande pas autant...
    Quand bien même ça n'intéresserait que ma petite personne, ce forum n'échappera pas à un petit message ou billet d'explication... Fallait pas m'inviter

  13. #13
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 485
    Points : 19 518
    Points
    19 518
    Par défaut
    Salut à tous.

    Verilog est bien un langage, donc tu fais de la programmation. D'accord, il s'agit d'un langage de description de materiel ce qui n'est pas exactement la même chose, mais au final, tu as un fichier binaire qui sera envoyé dans ton fpga. On peut supposer que toutes les instructions sont en relations avec des composants qui servent à lire ou à positionner des états de tes circuits. Chaque programme est nommé module. Ce module réalise la conversion de ce que tu as en entrée vers ce que tu désires obtenir en sortie. Ce que tu manipules sont des registres qui sont prédéfinies dans ton fpga. En informatique, on nomme cela un micro logiciel ou firmare.

    J'avais travaillé, il y a fort longtemps, dans un stage, sur ce que l'on nomme des FPLA qui sont des réseaux logiques programmables. Je me rappelle de l'expression "claquer" pour dire que l'on va griller une entrée ou une sortie à l'un de ces réseaux maillés composés de porte OR, AND et NOT. Et quand c'est claquer, on ne peut plus le reprogrammer. Autrement dit, c'est pour un usage unique. Il fallait produire un fichier et l'envoyer dans le fpla pour effectuer le claquage. Le petit programme que je devais faire avait pour but de créer un fichier binaire de claquage. Pour réaliser cela, on utilisait un tableau que les utilisateurs saisissaient avant d'effectuer le claquage.

    Ce que je comprends de ton fpga, il est reprogrammable indéfiniment. Et c'est bien plus complexe que les fpla.

    En lisant tes didacticiels, je suis tombé sur le mot "algorigramme" ? Bizarre de faire la fusion entre un organigramme et un algorithme. Un organigramme est une représentation graphique de ce que tu désires faire, tandis qu'un algorithme est la traduction de cet organigramme dans un pseudo langage, lisible et compréhensible par tout le monde, la plupart du temps en français.

    En tout cas, bravo pour ton implication dans ce monde que je connais mal et merci pour le retour d'expérience dont tu nous fais profiter.

    Cordialement.
    Artemus24.
    @+

  14. #14
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 773
    Points : 58 126
    Points
    58 126
    Billets dans le blog
    42
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Ce que je comprends de ton fpga, il est reprogrammable indéfiniment. Et c'est bien plus complexe que les fpla.
    On devrait dire "reconfigurable", non ?. Le fichier binaire est un fichier de configuration. En fait, la configuration du FPGA est volatile (la configuration est perdue hors alimentation), mais on peut faire en sorte de sauvegarder la configuration en mémoire morte sur la carte et lancer automatiquement la configuration de la puce lors de la mise en alimentation. Pour les FPLA, je ne saurais dire, je ne connais pas...

    Citation Envoyé par Artemus24 Voir le message
    En lisant tes didacticiels, je suis tombé sur le mot "algorigramme" ?
    Je n'ai pas inventé ce mot, il y même des logiciels pour les dessiner comme LucidChart. Sur wikipédia, il parle aussi d'organigramme de programmation, bof...
    Un algorigramme, aussi appelé organigramme de programmation, est la représentation visuelle d’un algorithme. Il montre les enchaînements de décisions et d’opérations à faire pour un algorithme donné.
    Et le tuto qui va bien Introduction aux algorigrammes

    Citation Envoyé par Artemus24 Voir le message
    En tout cas, bravo pour ton implication dans ce monde que je connais mal et merci pour le retour d'expérience dont tu nous fais profiter.
    Merci à toi

  15. #15
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 485
    Points : 19 518
    Points
    19 518
    Par défaut
    Salut à tous.

    Citation Envoyé par f-leb
    On devrait dire "reconfigurable", non ?
    Et c'est quoi la différence entre reconfigurable et reprogrammable ? Pour moi, c'est synonyme.

    Citation Envoyé par f-leb
    En fait, la configuration du FPGA est volatile (la configuration est perdue hors alimentation),
    Je ne le savais pas, ce qui n'est pas le cas des fpla.

    Tel que je l'ai appris à l'école, un organigramme est une représentation graphique que l'on appliquait plutôt en assembleur tandis qu'un algorithme est une suite d'instructions, proche des langages informatiques comme le cobol. On passe facilement de l'un à l'autre car tout est codifié. Ce qu'ils nomment algorigramme aujourd'hui est un organigramme. Une sale habitude de renommer ce qui existe déjà pour faire plus intellectuel sans que cela apporte quelque chose de plus.

    Tes deux sujets autour du fpga sont intéressants.

    Cordialement.
    Artemus24.
    @+

  16. #16
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 208
    Points : 11 685
    Points
    11 685
    Par défaut
    Salut,
    Citation Envoyé par Artemus24 Voir le message
    Et c'est quoi la différence entre reconfigurable et reprogrammable ? Pour moi, c'est synonyme.
    Effectivement sémantiquement les mots sont proches néanmoins moi aussi je préfère utiliser reconfigurer pour un FPGA. Je m'explique !

    Imaginons un calcul de CRC 16 bits (polynôme 0x8005).

    En C le programmeur voit ça :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    unsigned int crc16(unsigned int crcValue, unsigned char newByte) 
    {
    	unsigned char i;
     
    	for (i = 0; i < 8; i++) {
     
    		if (((crcValue & 0x8000) >> 8) ^ (newByte & 0x80)){
    			crcValue = (crcValue << 1)  ^ 0x8005;
    		}else{
    			crcValue = (crcValue << 1);
    		}
     
    		newByte <<= 1;
    	}
     
    	return crcValue;
    }

    Le designer FPGA lui par contre voit ça (les blocs "stage" sont des bascules logiques) :

    Nom : Capture023.PNG
Affichages : 891
Taille : 21,3 Ko

    Etant donné qu'un FPGA est un réseau de composants logiques qu'on peut rerouter ou reconfigurer "un peu" comme on veut, je pense en tout cas que le terme "reprogrammer" s'y prête un peu moins. Le Verilog et le VHDL sont des langages qui permettent de décrire une config matérielle. La fonction réalisée par cette config matérielle peut aussi, comme le cas du calcul de CRC, être réalisée par du soft.

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/12/2020, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo