Domanda

Invece di usare

module ... ( .. )  ;

     #15 
endmodule

Voglio usare

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

endmodule

O stessa cosa

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

endmodule

Posso fare quel desiderio a Verilog?

È stato utile?

Soluzione

Hai alcune opzioni:

  • Macro con `defineS
  • parameterS
  • localparamS

Ecco un piccolo esempio con tutti loro.

`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 

Altri suggerimenti

Per i casi che hai elencato, consiglierei i parametri.

Come la direttiva del compilatore C, "Define è globale per la compilazione. Se il tuo codice verrà mai utilizzato con il codice non controlli, dovrai stare attento qui.

I parametri sono sempre locali nell'ambito del modulo, quindi i parametri identici chiamati in diversi elementi di progettazione non saranno in conflitto tra loro. Hanno anche il vantaggio di poter essere sovrascritti su base per istanza.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top