web-dev-qa-db-fra.com

Utilisation de paramètres pour créer une constante dans Verilog

Je veux prendre un paramètre et affecter un nombre de zéros égal au paramètre à une constante, et utiliser cette constante pour la comparaison. Comment fait-on ça ?

Par exemple, disons que le paramètre est 3, je veux créer une constante

n=3'b000;

et utilisez ce n dans une autre déclaration. La seule chose est que je ne sais pas n. Comment initialiser les "n" zéros et à quel type de données Verilog dois-je les affecter?

16
Floose

Votre recherche de l'opérateur de réplication. La syntaxe est {replication_constant{value}}.

Un exemple de création d'un bus de taille WIDTH pour tous les zéros.

parameter WIDTH = 3;
wire [WIDTH-1:0] n = {WIDTH{1'b0}};

Pour une description complète de l'opérateur de réplication, voir IEEE std 1800-2012 § 11.4.12.1 "Opérateur de réplication"

23
Greg

Pour développer la réponse de Greg et répondre si vous vouliez 1 puis tous les 0.

Utilisez un mélange de concaténation {a,b} et réplication {width{c}}:

wire [WIDTH-1:0] n = { 1'b1, {WIDTH-1{1'b0}} } ;

Tandis que le '0 ou '1 la syntaxe est utilisée dans SystemVerilog 'b0 pour la correspondance de largeur est valide dans les anciens Verilog. Dans verilog-95, la largeur ne correspondrait qu'à 32 bits, mais cela a depuis été corrigé.

Exemple de définition des valeurs de réinitialisation sur les bascules:

reg [7:0] a;
always @(posedge clk or negedge rst_n) begin
  if(~rst_n) begin
    a <= 'b0 ;
 ...
13
Morgan