Question

Au lieu d'utiliser

module ... ( .. )  ;

     #15 
endmodule

Je veux utiliser

module ... ( ... ) ;
 // GateDelay is a const, like in c language const int GateDelay = 15 ;
 # GateDelay     

endmodule

Ou même chose

module ... ( ... ) ;
 // assume Wordsize is defined at " define Wordsize 15 "
 reg [ Wordsize -1 : 0 ] mem ;

endmodule

Puis-je faire ce souhait en Verilog?

Était-ce utile?

La solution

Vous avez quelques options:

  • macros avec `defines
  • parameters
  • localparams

Voici un petit exemple avec eux tous.

`define CONSTANT_MACRO 1          /* important: no ';' here */
module mymodule
    #( parameter WIDTH = 5 )
    ( 
      input wire [WIDTH-1:0] in_a,
      output wire [WIDTH-1:0] out_a
    );

    localparam CONSTANT_LOCAL = 2;

    assign out_a = in_a + `CONSTANT_MACRO - CONSTANT_LOCAL;

endmodule 

Autres conseils

Pour les cas que vous avez énumérés, je recommande paramètres.

Comme la directive du compilateur C, définissez `est globale pour la compilation. Si votre code est toujours va être utilisé avec le code que vous ne contrôlez pas vous devez être prudent ici.

Les paramètres sont toujours à la portée locale de module pour les paramètres dans différents noms identiques éléments de conception ne sont pas en conflit les uns avec les autres. Ils ont aussi l'avantage de pouvoir être surchargée sur une base par exemple.

module #(parameter DATA_WIDTH = 1) busSlave(
  input [DATA_WIDTH-1:0] bus_data,
  input                  bus_wr,
  ...
);

endmodule


module top;

  //DATA_WIDTH is 32 in this instance
  busSlave #(.DATA_WIDTH(32)) slave32(
    .bus_data(data_0),
    .bus_wr(wr_0),
    ...
    );

  //DATA_WIDTH is 64 in this instance
  busSlave #(.DATA_WIDTH(64)) slave64(
    .bus_data(data_1),
    .bus_wr(wr_1),
    ...
    );


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