Как игнорировать один или несколько выводов выходной шины для реализации модуля - PullRequest
1 голос
/ 15 февраля 2020

Я хочу игнорировать один или несколько битов в аргументе массива для модуля в SystemVerilog.

module x(in a, out [0:3] z);
...
endmodule

module tb;
  logic my_a;
  logic [1:3] my_z;
  // I want to stop having to do this next line:
  logic ignore_this_bit;
  x myx(.a(my_a), .z({ignore_this_bit, my_z}));
endmodule

Каков правильный синтаксис для этого? Я делал это, как показано выше, с объявлением ignore_this_bit и просто никогда не подключался к этому net. Но, похоже, должен быть более простой способ. Что-то вроде использования запятой и отсутствия имени переменной в аргументах для создания экземпляра модуля, или, может быть, использовать что-то вроде 1'bX вместо бита выходного аргумента или что-то в этом роде.

На это влияет тот факт, что Я использую порядок байтов с прямым порядком байтов для векторов здесь? (Я ненавижу это, но я создаю код для старого процессора, который использует этот порядок, и гораздо проще сопоставить мой код с существующим, чем исправить его.)

Это сложная концепция для поиска, и я попробовал. Есть ли у кого-нибудь опыт, который может помочь мне узнать, как сделать это «правильным образом»? Благодаря.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2020

Вам не нужно ничего делать здесь. Это должно работать только с усечением MSB z [0]

x myx(.a(my_a), .z(my_z));

Думайте о выходном порте как о неявном непрерывном назначении

assign my_z = myx.z;

Но если MSB не тот бит, который вы хотите игнорировать, простого решения не существует. Возможно, вы захотите взглянуть на функцию net alias.

1 голос
/ 15 февраля 2020

В verilog нет специального способа игнорировать биты вывода. Итак, ваш способ использования concat с ненужной переменной - хороший способ сделать это ({ignore_this_bit, my_z}). Наименование этой переменной важно для удобства чтения.

На порядок описания диапазона это не влияет. Похоже, вы игнорируете самый левый бит. И биты всегда упорядочиваются одинаково, независимо от того, как вы описываете диапазон:

bits:   0011
[3:0]:  3  0
[0:3]:  0  3
concat: {ign, 0, 1, 1};

Другой путь - использовать переменную, достаточно большую для подключения к выходу, а затем использовать ее биты:

logic [1:3] my_z;
logic [0:3] their_z;
 x myx(.a(my_a), .z(their_z));
 assign my_z = their_z[1:3];
...