Литералы

Литералы

Для того, чтобы присвоить всем битам вектора одинаковое значение, в Verilog необходимо явно прописывать значение для каждого бита.

  1. assign test_seq[63:32] = 32'hffffffff;

В SystemVerilog заполнить вектор одинаковым значениями можно так:

  1. assign test_seq[63:32] = '1;

Эта пример эквивалентен предыдущему

‘0, ‘1, ‘X, ‘x, ‘Z, ‘z – заполнение вектора этим значением

Временные литералы

Единицы времени задаются целыми числами или в формате с фиксированной точкой, за которыми следует единица измерения (fs, ps, ns, us, ms, s, step):

0.3ns 50ps

Временной литерал масштабируется до текущей единицы времени и округляется с заданной точностью.

Литералы массивов

Литералы массивов схожи по синтаксису с инициализаторами языка C, но в SV еще добавлена репликация (повторение).

  1. int n[1:2][1:3] = '{'{0,1,2},'{3{4}}};

В отличие от C, количество вложенных пар скобок в SV ( {} ) должно совпадать с размерностью массива. Допускается использование вложенной репликации, тогда внутренняя пара скобок в репликации будет удалена. Репликация может применяться здесь только для одного из измерений.

  1. int n[1:2][1:6] = '{2{'{3{4, 5}}}}; // тоже самое, что и '{'{4,5,4,5,4,5},'{4,5,4,5,4,5}}

Литералы структур

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

  1. typedef struct {int a; shortreal b;} ab;
  2. ab c;
  3. c = '{0, 0.0}; // тип литерала структуры определяется
  4. // согласно значению слева

Пример присваивания значения массиву структур:

  1. ab abarr[1:0] = '{'{1, 1.0}, '{2, 2.0}};

Заполнить этот массив структур в стиле языка C ‘{1, 1.0, 2, 2.0} в SV нельзя.

Примеры:

  1. c = '{a:0, b:0.0};
  2. c = '{default:0};
  3. d = ab'{int:1, shortreal:1.0};

Share this post