Question

J'ai toujours voulu créer mon propre microprocesseur. J'ai lu Comment créer mon propre microcontrôleur? .

J'ai essayé à plusieurs reprises d’apprendre le Verilog et le VHDL. Mais pour ma vie, je ne peux tout simplement pas comprendre les styles de langage. Je viens d’un milieu C / C ++ / C # et j’ai tamponné (avec succès) la programmation fonctionnaliste avec Ruby.

Quelqu'un peut-il suggérer un livre ou une ressource en ligne pour enseigner un langage HDL à partir de rien (afin que je puisse désapprendre ma façon de penser procédurale)

De plus, je ne parviens pas à comprendre exactement comment simuler un programme HDL. Il n'y a rien de tel que l'impression ou le matériel dans le matériel, alors quel est le meilleur moyen de tester des programmes sans FPGA (je vais quand même en commander un!). Comment fonctionne exactement la simulation?

En gros, j’ai simplement besoin de quelqu'un pour m'aider à comprendre les HDL et leur simulation.

Était-ce utile?

La solution

N'oubliez pas que les HDL étaient conçus pour modéliser le matériel. Avec le matériel, tout se passe en même temps. Par matériel, j'entends un ensemble de portes logiques connectées aux entrées et aux sorties d'autres portes logiques d'une manière ou d'une autre. C’est essentiellement ce qu’est un FPGA ou un ASIC (dans un FPGA, ces connexions sont programmables). Activez une entrée et les effets se répercutent dans la chaîne de portes logiques. Considérez chaque porte logique comme un petit processeur qui évalue en permanence ses entrées.

Ainsi, dans un HDL, la première chose à prendre en compte est que toutes les tâches ont lieu en même temps. Le seul endroit où il se passe des choses dans le "normal" sense (une instruction après l'autre, comme dans un langage de programmation standard) est à l'intérieur d'un bloc de processus (en VHDL ou toujours dans Verilog). Mais vous devez réaliser que tous les blocs de processus (ou toujours les blocs dans Verilog) s’exécutent également simultanément.

Les HDL essayent simplement de modéliser la simultanéité du matériel.

En ce qui concerne les livres qui essaient d’enseigner les HDL aux développeurs de logiciels ... je ne pense pas qu’il en existe. La plupart sont destinées aux ingénieurs en matériel.

Vous avez mentionné que vous aviez fait de la programmation Ruby. Si vous voulez jouer avec un HDL écrit en Ruby, vous pouvez essayer RHDL: http://rhdl.rubyforge.org/ Les concepts HDL de base sont là et cela ressemble beaucoup au VHDL, mais c'est Ruby pour que vous puissiez expérimenter un peu plus avec les entrailles. Vous pouvez écrire des modèles puis les simuler. Quelques exemples sont inclus.

Autres conseils

Le débogage est effectué avec le simulateur et son visualiseur de formes d’ondes. Vous pouvez voir ce que tous les internes font au fil du temps. En outre, avec Modelsim, vous pouvez également créer des points d'arrêt similaires à ceux d'un logiciel dans les processus.

Vous pouvez imprimer des documents en VHDL à l'aide du "rapport". déclaration, mais vous devez faire votre mise en forme d'une manière très non-SW:

report " La valeur n'est pas " & amp; integer'image (some_integer_variable);

Pour imprimer plus facilement, utilisez le paquetage textio .

Un autre conseil: contient beaucoup de code, à savoir ieee.std_logic_arith.all; . Cette bibliothèque est non standard (malgré le moniker IEEE), utilisez plutôt ieee.numeric_std.all .

Start simple - créez un compteur qui augmente d'un cran à chaque fois que l'horloge sonne (utilisez l'idiome si rising_edge (clk) puis ). Lorsque le compteur atteint une valeur particulière, basculez un signal.

Créez un banc d’essai pour le simuler, c’est-à-dire que vous voulez que le signal clk passe à "0", "1", "0", "1".

Voici un moyen facile à comprendre:

process:
begin
    clk <= '0';
    wait for 5 ns;
    clk <= '1'; 
    wait for 5 ns;
end process;

Lancez la simulation, regardez votre compteur monter et la bascule du signal. Si vous agrandissez suffisamment votre compteur, vous pouvez alors créer un FPGA et regarder un voyant clignoter en connectant ce signal de bascule à une broche DEL.

C'est l'équivalent FPGA de "Hello World"!

Pour le débogage, Verilog offre à printf des tâches système telles que $ display ou $ monitor. Ceux-ci ne sont bien sûr pas synthétisables, mais chaque simulateur doit les comprendre. Le débogage s’effectue ensuite d’une part, tout comme le débogage logiciel, en imprimant les valeurs des signaux et d’autre chose sur la console à l’aide des fonctions $ diplay et autres déjà mentionnées. Et d'autre part, en regardant les formes d'onde du signal jusqu'à ce que vous trouviez le point malade. Pour ces choses, vous n'avez même pas besoin d'un FPGA, un bon simulateur est tout ce dont vous avez besoin. Mais avoir un FPGA pour faire clignoter certaines LED est toujours agréable:)

Pour la simulation, vous devriez jeter un coup d’œil sur Modelsim. Si vous utilisez Windows, une édition pour étudiants est disponible gratuitement.
http://www.model.com/content/modelsim- pe-student-edition-hdl-simulation

Une autre option est le pack Web ISE de Xilinx. Cela fonctionne même sur linux et inclut le flux complet de FPGA. http://www.xilinx.com/tools/webpack.htm
Mais je recommande Modelsim pour la simulation.

Quelques points de départ que j'ai sous la main sont:
http://www.asic-world.com/
http://www.doulos.com/knowhow/verilog_designers_guide/

Ma réponse pourrait prendre des années en retard, mais cela s'adresse aux futurs téléspectateurs susceptibles d'avoir la même requête.

Je viens aussi d'un arrière-plan C ++ / C #. Ma réponse ne concerne que Verilog HDL et pas VHDL. Je suis actuellement un cours ce trimestre et voici les livres qui m'ont aidé à mieux comprendre Verilog:

Vous pouvez trouver de nombreux livres ici , comme indiqué dans la section site asic-world .

Comme l'avait répondu Skorgon, vous pouvez utiliser Xilinx ISE pour la simulation. C'est le plus proche de Visual Studio avec C ++ / C # comme pour Verilog. Mais pour une sensation primitive (pas d'EDI), vous pouvez essayer iVerilog ou Icarus Verilog . C'est celui utilisé dans notre cours. Voici comment exécuter des fichiers Verilog avec iVerilog:

Saisissez votre code dans un éditeur de texte, enregistrez-le sous .vl dans le dossier bin.     de iVerilog. Sur l'invite de commande, accédez au dossier bin. Puis tapez ce qui suit:

iverilog -o <name of exe file you want for your .vl file> <your .vl file>
vvp <name of exe file>

Exemple:

iverilog -o samp sample.vl
vvp samp

J'espère que ça aide!

Parfois, il est nécessaire d’imprimer le nom de l’instance. Ceci est utile si plusieurs occurrences du même composant sont utilisées dans une conception: "... Bien que cela soit simple dans VERILOG (% m dans la fonction système d'affichage), en VHDL, il faut un peu plus d'écriture de code. $ display ("nom d'instance dbg% m à% d", $ time); Un exemple d’impression d’un nom d’instance dans systemc est également disponible sur ce site.

L’importance de telles informations de débogage s’applique lorsqu’une conception contient plusieurs occurrences du même composant.

La première bibliothèque d'IO de texte doit être appelée et la variable de ligne doit être déclarée. Veuillez vous reporter à l'exemple d'impression pour plus de détails.

Ensuite, vous devez choisir entre deux options: l’une est la suivante: nom d’instance uniquement dans la chaîne de débogage et l’autre option fournit des informations supplémentaires telles que les noms des entrées et des architectures ... " http://bknpk.ddns.net/my_web/MiscundryHW/vhdl_path_name_print.html

Si vous maîtrisez la programmation en C, vous pouvez apprendre très facilement tout autre langage de programmation. Les langages de description du matériel ne sont pas très différents. Mais vous devez connaître les bases des composants matériels couramment utilisés. Par exemple, la conception d'un additionneur complet est très simple si vous le savez. quelles sont les entrées et les sorties de l'additionneur complet. Vous devez également connaître la relation entre les entrées et les sorties. Le pdf peut être utile pour un débutant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top