Sono un po 'confuso se è legale, dal punto di vista degli standard, leggere un parametro da un'interfaccia.In SystemVerilog, è consentito leggere un parametro da un'interfaccia
Come così
interface foo_if #(parameter BAR=5)();
...
logic [BAR-1:0] data;
modport slave(input data, ...);
endinterface
module foobar(foo_if.slave s);
...
logic [s.BAR-1:0] bar;
logic [$bits(s.data)-1:0] m_data;
...
endmodule
Ho un problema in cui un importante fornitore di strumento di sintesi non è in grado di gestire anche questo. E ti dicono esplicitamente nel messaggio di aiuto che non è permesso usare $ bits() con un membro dell'interfaccia.
Tuttavia uno strumento di simulazione di un altro fornitore lo gestisce perfettamente come fa un altro strumento di sintesi che ho.
Tuttavia, in SystemVerilog per il Disegno da S. Sutherland et al. si afferma:
Perché la gerarchia di progettazione potrebbe non essere ancora completamente risolta durante elaborazione, è illegale per assegnare un parametro, specparam, o localparam costanti di un valore che è derivato da altrove nella gerarchia disegno
Tuttavia, se non sono autorizzato a utilizzare i parametri delle interfacce, compromette l'utilità delle interfacce.
Il SystemVerilog 1800-2012 standard sugli altri stati della mano:
25,10 L'accesso all'interfaccia oggetti
L'accesso agli oggetti dichiarati in un'interfaccia deve essere disponibile per riferimento nome gerarchico, a prescindere se l'interfaccia è accessibile anche tramite una connessione di porta o tramite un'interfaccia virtuale e indipendentemente dall'esistenza di qualsiasi modaporto dichiarato nell'interfaccia di . È possibile utilizzare un modport per limitare l'accesso agli oggetti dichiarati in un'interfaccia a cui viene fatto riferimento tramite una connessione di porta o un'interfaccia virtuale elencando esplicitamente gli oggetti accessibili in il modport. Tuttavia, gli oggetti che non sono consentiti per essere elencati in un modport devono rimanere accessibili.
[Xilinx Vivado] (http://forums.xilinx.com/t5/Synthesis/accessing-systemverilog-interface-parameters/m-p/405317) non supporta l'accesso ai parametri e nemmeno Altera Quartus. Supportano la soluzione alternativa di '$ bits (interface.port)' Tuttavia, le interfacce sono ancora paralizzate dal fatto che i modports non sono supportati molto bene sugli strumenti FPGA. – Chiggs