LFSR dans un FPGA – Code VHDL & Verilog Fonctionnement dun registre à décalage à rétroaction linéaire dans un FPGA LFSR signifie Linear Feedback Shift Register (registre à décalage à rétroaction linéaire), une structure utile dans les FPGA. Les LFSR sont simples à synthétiser : ils consomment pe
Conception module single_port_sync_ram #( parameter ADDR_WIDTH = 4, parameter DATA_WIDTH = 32, parameter DEPTH = 16 )( input clk, input [ADDR_WIDTH-1:0] addr, inout [DATA_WIDTH-1:0] data, input cs, input we, input oe ); reg [DATA_WIDTH-1:0] tmp_data; reg [
Un additionneur est un composant numérique qui effectue laddition de deux nombres. Cest le composant principal à lintérieur dune ALU dun processeur et est utilisé pour incrémenter des adresses, des indices de tables, des pointeurs de tampons et dans de nombreux autres endroits où laddition est requi
Quest-ce quun multiplexeur (mux) ? Un multiplexeur ou mux en abrégé, est un élément numérique qui transfère les données de lune des N entrées vers la sortie en fonction du signal de sélection. Le cas présenté ci-dessous est lorsque N vaut 4. Par exemple, un multiplexeur 4 bits aurait N entrées chacu
Conception module pr_en ( input [7:0] a, input [7:0] b, input [7:0] c, input [7:0] d, input [1:0] sel, output reg [7:0] out ); always @ (a or b or c or d or sel) begin if (sel == 2b00) out <= a; else if (sel == 2b01) out <= b; else if (sel == 2b10) out <= c; else out <=
En électronique numérique, un registre à décalage est une cascade de bascules où la broche de sortie q dune bascule est connectée à lentrée de donnée (d) de la suivante. Comme toutes les bascules travaillent sur la même horloge, le tableau de bits stocké dans le registre à décalage se décalera dune
Conception module gray_ctr # ( parameter N = 4 ) ( input clk, input rstn, output reg [N-1:0] out ); reg [N-1:0] q; always @ (posedge clk) begin if (!rstn) begin q <= 0; out <= 0; end else begin q <= q + 1; `ifdef FOR_LOOP for (int i = 0; i < N-1; i=
Conception module modN_ctr # ( parameter N = 10, parameter WIDTH = 4 ) ( input clk, input rstn, output reg[WIDTH-1:0] out ); always @ (posedge clk) begin if (!rstn) begin out <= 0; end else begin if (out == N-1) out <= 0; else out <= out + 1; end end endmo
Conception module johnson_ctr #(parameter WIDTH=4) ( input clk, input rstn, output reg [WIDTH-1:0] out ); always @ (posedge clk) begin if (!rstn) out <= 1; else begin out[WIDTH-1] <= ~out[0]; for (int i = 0; i < WIDTH-1; i=i+1) begin out[i] <= out[i+1]; en
Conception module ring_ctr #(parameter WIDTH=4) ( input clk, input rstn, output reg [WIDTH-1:0] out ); always @ (posedge clk) begin if (!rstn) out <= 1; else begin out[WIDTH-1] <= out[0]; for (int i = 0; i < WIDTH-1; i=i+1) begin out[i] <= out[i+1]; end
Un compteur ripple est un compteur asynchrone dans lequel tous les bascules, sauf la première, sont horlogées par la sortie de la bascule précédente. Conception module dff ( input d, input clk, input rstn, output reg q, output qn ); always @ (posedge clk or negedge rstn) if (!rstn
Le compteur 4 bits commence à sincrémenter de 4b0000 à 4h1111, puis revient à 4b0000. Il continuera à compter tant quil reçoit une horloge active et que la réinitialisation est maintenue haute. Le retour à zéro (rollover) se produit lorsque le bit de poids fort de laddition finale est ignoré. Lorsq
Une bascule capture la donnée à son entrée au front positif ou négatif dune horloge. Limportant est que ce qui arrive aux données après le front dhorloge jusquau prochain front ne se reflétera pas à la sortie. Un verrou (latch), en revanche, ne capture pas au front dhorloge ; au lieu de cela, la sor
Conception module tff ( input clk, input rstn, input t, output reg q ); always @ (posedge clk) begin if (!rstn) q <= 0; else if (t) q <= ~q; else q <= q; end endmodule Testbench module tb; reg clk; reg rstn; reg t; tff u0 ( .clk(clk), .rstn(rstn), .t(t),
Une bascule D est un élément séquentiel qui suit lentrée d au front donné dune horloge. Conception #1 : Avec réinitialisation asynchrone active basse module dff ( input d, input rstn, input clk, output reg q ); always @ (posedge clk or negedge rstn) if (!rstn) q <= 0; else q <= d;
Conception module jk_ff ( input j, input k, input clk, output q ); reg q; always @ (posedge clk) case ({j,k}) 2b00 : q <= q; 2b01 : q <= 0; 2b10 : q <= 1; 2b11 : q <= ~q; endcase endmodule Schéma matériel Testbench module tb_jk; reg j; reg k; reg
Il est toujours préférable de commencer avec un exemple très simple, et rien ne sert mieux cet objectif que le classique « Hello World ! ». // Les commentaires sur une ligne commencent par deux barres obliques // // Le code Verilog est toujours écrit à lintérieur de modules, et chaque module // rep
Verilog propose des tâches et fonctions système permettant douvrir des fichiers, dy écrire des valeurs, de lire des valeurs depuis des fichiers pour les charger dans des variables, et de fermer les fichiers. Ouverture et fermeture de fichiers module tb; // Déclaration dune variable pour stocker l
Timescale par Défaut Bien que les modules Verilog soient censés avoir un timescale défini avant le module, les simulateurs peuvent insérer un timescale par défaut. Le timescale réel qui est appliqué à toute portée dans une hiérarchie Verilog élaborée peut être affiché en utilisant la tâche système $
La directive Verilog timescale spécifie lunité de temps et la précision pour les simulations. La fonction système Verilog $timeformat spécifie le style de rapport du spécificateur de format %t dans les instructions daffichage comme $display et $strobe. Syntaxe $timeformat(<nombre_unité>, <
Verilog