Система Verilog с использованием маски - PullRequest
0 голосов
/ 10 мая 2018

Я не могу понять значение этого кода.Я знаю VHDL и мне нужен системный verilog.Я не знаю значения bits [num] = '{4, 4}) или (output logic [width-1:0] mask [num]);

, пожалуйста, объясните мне

module works
  #(parameter int num = 4,
   parameter int width = 8,
   parameter int bits [num] = '{4, 4})
   (output logic [width-1:0] mask [num]);

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

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.

0 голосов
/ 10 мая 2018

output logic [width-1:0] mask [num]

[width-1:0] mask - вектор бит ширины. При ширине 8 это будет 8-битный вектор: [7:0] mask.

За вектором следует [num] означает, что это массив векторов 'num'. Итог - это двумерный массив шириной x num битов. Этот синтаксис очень распространен, и вы будете часто его видеть.

Мне пришлось искать шаблон '{4,4} (я не смог найти его в своем небольшом буклете System Verilog), и, как говорит Мэтью, это присвоение значений массиву. Итак, моя первоначальная интерпретация была неверной.

Проблема с существующим кодом заключается в том, что мой симулятор Verilog выдает сообщение об ошибке при использовании значений по умолчанию. num равно 4, а '{4,4} содержит только два элемента. При запуске я получаю сообщение об ошибке:

ERROR: [VRFC 10-666] expression has 2 elements; expected 4 [...

Если я установлю num на 2 #(.num(2)), симулятор будет счастлив.

...