A module похож на VHDL entity , поэтому у нас есть блок с именем works
:
module works
A параметр подобен VHDL generic . Вместо того, чтобы говорить generic
, в SystemVerilog мы просто говорим #
. Итак, у нас есть блок с тремя параметрами (обобщенными): int
(32-разрядное целое число со знаком, например, VHDL integer ) со значением по умолчанию 4:
#(parameter int num = 4,
и int
со значением по умолчанию 8:
parameter int width = 8,
и массив размером int
s, равный значению параметра num
, который будет пронумерован от 0 до num-1
:
parameter int bits [num] = '{4, 4})
'{4,4}
является шаблоном назначения и является (грубым) эквивалентом VHDL агрегата . Таким образом, этот код пытается инициализировать два значения этого массива целым числом 4. Проблема в том, что этот код, вероятно, недопустим . Массив bits
может иметь любой размер (в зависимости от значения параметра num
), и этот массив называется так называемым распакованным массивом . В SystemVerilog (и в Verilog) размеры и форма назначений для упакованных массивов должны совпадать (как в VHDL). Этот размер любой стороны этого назначения не будет совпадать, если только значение num
не равно 2. Если вы хотите инициализировать все элементы распакованного массива одной и той же вещью, вы можете использовать ключ ( скорее как VHDL others
):
parameter int bits [num] = '{default:4})
https://www.edaplayground.com/x/5w8y
Это порт:
(output logic [width-1:0] mask [num]);
, размер которого определяется двумя параметрами: width
и num
. Выходными данными является массив num
(так называемое без упаковки измерение) слов шириной width
(так называемое упакованное измерение). logic
это тип. Переменные типа logic
могут принимать одно из четырех значений: 0, 1, X или Z.