3. Литералы
Для того, чтобы присвоить всем битам вектора одинаковое значение, в 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};

Комментарии (0)