Documentation Verilog
Référence Verilog concise et illustrée par des exemples. Lisez le concept, voyez le code, puis pratiquez-le dans un parcours Coddy.
Commencer un parcours guidé en VerilogPremiers pas
- Qu'est-ce que Verilog ?Une introduction simple à Verilog : ce que c'est, à quoi ça sert, en quoi il diffère d'un langage de programmation classique et pourquoi les concepteurs de circuits numériques l'utilisent encore après 40 ans.
- Matériel vs logicielPourquoi Verilog semble déroutant après les langages logiciels : concurrence par défaut, temps comme concept de premier ordre et instructions qui ne s'exécutent pas dans l'ordre.
- Installer VerilogInstalle Icarus Verilog et GTKWave pour compiler et simuler Verilog en local. Ou saute l'installation et utilise l'éditeur en ligne - les deux marchent pour cette documentation.
- Ton premier moduleÉcris ton premier module Verilog complet from scratch - déclaration, ports, un morceau de logique combinatoire et un testbench qui le pilote. Exécutable dans le navigateur.
- CommentairesComment écrire des commentaires sur une ligne ou multiligne en Verilog, plus les conventions de documentation que les concepteurs de circuits numériques utilisent pour garder leurs modules lisibles à mesure qu'ils grossissent.
Types de données et nombres
- Wire et RegLes deux principaux types de données en Verilog - `wire` pour les connexions continues et `reg` pour le stockage procédural - et la règle pour choisir entre les deux à chaque fois.
- Vecteurs et tableauxComment déclarer des signaux multi-bits avec `[7:0]`, les découper, les combiner, et la différence entre un vecteur packé et un tableau mémoire.
- ParamètresComment utiliser `parameter` et `localparam` pour définir des constantes à la compilation, paramétrer largeurs et profondeurs, et surcharger des valeurs lors de l'instantiation d'un module.
- Littéraux numériquesComment Verilog écrit les constantes : dimensionnées vs non dimensionnées, les bases `'b` `'h` `'d` `'o`, nombres signés, underscores pour la lisibilité, et les pièges qui attrapent les débutants.
- Valeurs X et ZLes signaux Verilog ont quatre valeurs possibles, pas deux. Voici ce que `x` (inconnu) et `z` (haute impédance) signifient réellement en simulation, et comment les debugger.
Opérateurs
- OpérateursLes opérateurs principaux de Verilog - arithmétique, comparaison, logique et le conditionnel `?:` - avec les règles et pièges autour des largeurs mixtes et du signed.
- Bitwise et réductionLes opérateurs au niveau bit en Verilog - AND/OR/XOR bitwise, les formes d'inversion, et les opérateurs de réduction qui collapsent un vecteur entier à un seul bit.
- Concaténation et réplicationComment coller des signaux ensemble avec `{}` et copier un motif N fois avec `{N{...}}` - les opérateurs Verilog indispensables pour construire des bus plus larges à partir de morceaux.
Modules et structure
- Ports de moduleComment déclarer les ports d'un module - input, output et inout - la liste de ports style ANSI, et quand une sortie doit être `wire` plutôt que `reg`.
- Instantiation de moduleComment instancier un module à l'intérieur d'un autre, la différence entre connexions de ports nommées et positionnelles, et les motifs multi-instances que tu utiliseras pour construire de vrais designs.
- Assignation continueComment `assign` fonctionne - la relation toujours vraie qu'il décrit, ce qu'il peut et ne peut pas piloter, et les motifs où il brille comparé au code procédural.
Blocs procéduraux
- Bloc alwaysComment les blocs `always` fonctionnent, la différence entre `always @(*)` combinatoire et `always @(posedge clk)` cadencé, et les règles qui décident quel matériel chacun produit.
- Bloc initialEn quoi les blocs `initial` diffèrent de `always`, pourquoi ils n'existent qu'en simulation, et les motifs courants - stimulus, setup de waveform, en-têtes de log - pour lesquels on les utilise.
- Blocking vs non-blockingLe sujet le plus confus pour les débutants en Verilog. Ce que `=` et `<=` font vraiment à l'intérieur d'un bloc `always`, et la règle qui prévient la plupart des race conditions.
Flux de contrôle
- If-ElseComment `if`/`else` fonctionne à l'intérieur d'un bloc `always`, le piège du latch qui attrape les débutants, et le matériel encodeur de priorité que produisent les `else if` chaînés.
- Instruction caseComment `case` fonctionne pour un décodage multi-voies propre, le `default` qu'il ne faut jamais oublier, et les différences entre `case`, `casex` et `casez`.
- Boucles forEn quoi les boucles `for` de Verilog diffèrent de leurs cousines logicielles - elles sont déroulées par le synthétiseur en matériel parallèle, pas exécutées itérativement au runtime.
Logique séquentielle et FSM
- Logique cadencéeComment construire registres, compteurs, registres à décalage et pipelines à partir de blocs `always` cadencés - le motif pilier de chaque design numérique synchrone.
- Machines à états finisComment écrire une FSM Verilog comme le font les pros - un registre d'état cadencé, un bloc combinatoire de prochain état, et une séparation propre facile à lire et à synthétiser.
Testbenches et simulation
- Bases du testbenchComment écrire un testbench Verilog - génération d'horloge, séquence de reset, stimulus, observation, et le squelette standard qui pilote chaque simulation que tu lanceras.
- Display et MonitorComment `$display`, `$write` et `$monitor` fonctionnent - les format specifiers que tu utiliseras, la différence entre eux, et quand chacun est le bon outil.
- Dumpfile et VCDComment ajouter la sortie waveform VCD à un testbench - `$dumpfile`, `$dumpvars`, sélection de portée, et comment voir le fichier résultant dans GTKWave ou l'éditeur du navigateur.
- Timescale et délaisComment la directive `` `timescale `` fixe l'unité de `#delay`, les règles pour combiner différentes unités entre fichiers, et comment les délais interagissent avec la logique cadencée.