Объявите векторные порты без указания их размера в Verilog - PullRequest
0 голосов
/ 01 ноября 2018

При объявлении модуля в Verilog (2001?) Можно ли сказать, что некоторые порты являются векторами без указания их размера? Целью здесь является обработка векторных портов любого размера, без указания размеров через параметры .

Я знаю, что могу написать что-то похожее на Verilog, но я бы хотел узнать, есть ли способ избавиться от дополнительного параметра WIDTH_DATA:

module my_module
#(
  parameter  WIDTH_DATA = 48
)
(
  input  Clk, En,
  input  [WIDTH_DATA-1:0] Data_in,
  output Ready,
  output reg [WIDTH_DATA-1:0] Data_out
);

Это возможно в VHDL, используя такое объявление:

entity my_module is
  port (
    Clk      : in std_ulogic;
    En       : in std_ulogic;
    Data_in  : in std_ulogic_vector;
    Ready    : out std_ulogic;
    Data_out : out std_ulogic_vector
  );
end entity;

Реализация модуля может затем узнать размер Data_in во время компиляции, используя Data_in'length (то же самое для Data_out).

1 Ответ

0 голосов
/ 01 ноября 2018

Это невозможно в Verilog.

Вы можете сделать что-то близкое к тому, что вы хотите в SystemVerilog, используя конструкцию interface. Вы можете параметризовать интерфейс и подключить этот интерфейс (или набор интерфейсов) к my_module.

interface my_intf #(int WIDTH);
  logic [WIDTH-1:0] data;
endinterface
module my_module(input clk, en,
                 my_intf in, out,
                 output ready);
  // $bits(in.data) - gives you the WIDTH
  // typedef type(out.data)  out_type // local typedef 
endmodule
module top;
  my_intf #(8) I1;
  my_intf #(16) I2;
  bit clk, en, ready;
  my_module M1 (.clk,.en, .in(I1), .out(I2), .ready);
endmodule
...