Как сопоставить `массив структур` с` массивами сигналов`? (Без упаковки) - PullRequest
0 голосов
/ 07 октября 2019

У меня есть модуль:

module test(
    inout logic [3:0] data [NUM],
    ...
    inout logic       anything [NUM]
);

от

struct {
  logic [3:0] data; // tri-states, can't use tri in struct
  ...
  logic       anything; 
} dut [NUM];

test test_i(
  .data     (dut.data), // should be same as [3:0] data [NUM]
  ...
  .anything (dut.anything)
);

Я получаю: Невозможно выбрать data в dut из-за несоответствия размеров.

Почему? Что я могу сделать, чтобы сопоставить мою распакованную структуру с модпортом?

Есть много сигналов, поэтому я хотел бы использовать struct вместо нескольких сигналов логической матрицы.

1 Ответ

1 голос
/ 07 октября 2019

Вы можете использовать структуру в качестве типа данных для провода, вам просто нужно typedef

typedef struct {
  logic [3:0] data;
  ...
  logic       anything; 
} dut_t;
tri dut_t dut[NUM];

(см. этот пост для более подробного объяснения)

Но большая проблема в том, что вы не можете нарезать массив структуры, чтобы получить массив членов структуры. Вы можете выбрать только элемент массива, а затем выбрать элемент, то есть dut[0].data

Вам нужно будет сделать

typedef struct {
  logic [3:0] data[NUM];
  ...
  logic       anything[NUM]; 
} dut_t;
tri dut_t dut;

, что, вероятно, не соответствует цели того, что вы хотелиделать.

...