Литералы
Для того, чтобы присвоить всем битам вектора одинаковое значение, в Verilog необходимо явно прописывать значение для каждого бита.
- assign test_seq[63:32] = 32'hffffffff;
В SystemVerilog заполнить вектор одинаковым значениями можно так:
- assign test_seq[63:32] = '1;
Эта пример эквивалентен предыдущему
Временные литералы
Единицы времени задаются целыми числами или в формате с фиксированной точкой, за которыми следует единица измерения (fs, ps, ns, us, ms, s, step):
Временной литерал масштабируется до текущей единицы времени и округляется с заданной точностью.
Литералы массивов
Литералы массивов схожи по синтаксису с инициализаторами языка C, но в SV еще добавлена репликация (повторение).
- int n[1:2][1:3] = '{'{0,1,2},'{3{4}}};
В отличие от C, количество вложенных пар скобок в SV ( {} ) должно совпадать с размерностью массива. Допускается использование вложенной репликации, тогда внутренняя пара скобок в репликации будет удалена. Репликация может применяться здесь только для одного из измерений.
- int n[1:2][1:6] = '{2{'{3{4, 5}}}}; // тоже самое, что и '{'{4,5,4,5,4,5},'{4,5,4,5,4,5}}
Литералы структур
Литералы структур – это шаблон с константными значениями для присваивания всем полям структуры. Литерал структуры должен иметь тип, который может быть явно указан с помощью префикса или автоматически определится в зависимости от контекста (от того, какому полю структуры присваивается значение ).
- typedef struct {int a; shortreal b;} ab;
- ab c;
- c = '{0, 0.0}; // тип литерала структуры определяется
- // согласно значению слева
Пример присваивания значения массиву структур:
- ab abarr[1:0] = '{'{1, 1.0}, '{2, 2.0}};
Заполнить этот массив структур в стиле языка C ‘{1, 1.0, 2, 2.0} в SV нельзя.
Примеры:
- c = '{a:0, b:0.0};
- c = '{default:0};
- d = ab'{int:1, shortreal:1.0};