Типы данных

Типы данных

SystemVerilog расширяет существующие типы данных языка Verilog и добавляет новые, что улучшает инкапсуляцию данных и делает код более компактным. Прежде всего, добавлены типы данных языка C. Также добавлены типы данных с 2-мя состояниями (2-state), которые могут принимать значения 0 и 1. Напомню, что до этого в Verilog были только типы данных с 4-мя состояниями (4-state – 0, 1, X и Z). Плюс ко всему, добавлена возможность создания своих типов данных.

Некоторые типы данных языка SystemVerilog представляют собой некий гибрид Verilog и C типов. Использование типов данных с 2-мя состояниями позволяет ускорить симуляцию, занимает меньше памяти, а во многих случаях даже удобнее. Когда переменная с 4-мя состояниями автоматически преобразуется в переменную с 2-мя, значения X и Z будут преобразованы в 0.

ТипКол-во состоянийЗнаковый / БеззнаковыйКол-во битSystemVerilog / Verilog
shortint2signed16SystemVerilog
int2signed32SystemVerilog
longint2signed64SystemVerilog
byte2signed8SystemVerilog
bit2unsignedSystemVerilog
logic4unsignedSystemVerilog
reg4unsignedVerilog
integer4signed>=32Verilog
realVerilog
shortrealSystemVerilog
realtimeVerilog
time4unsigned64Verilog

Если значения X и Z учитывать не нужно, то для ускорения работы используйте типы int и bit.

Знаковые и беззнаковые типы данных

Целочисленные типы (integer) могут быть знаковыми и беззнаковыми. Типы данных byte, shortint, int, integer и longint по умолчанию являются знаковыми. Типы данных bit, reg и logic – беззнаковые, как и массивы из элементов этих типов. Чтобы использовать знаковые типы, как беззнаковые, необходимо добавить спецификатор unsigned.

int unsigned uvar;
int signed svar;
byte unsigned ubyte;

Можно также привести знаковый тип к беззнаковому, и наоборот.

if (signed'(ubyte)< 150) // ubyte объявлен, как беззнаковый.

Тип данных VOID

Тип данных void, как правило, применяется в функциях, не возвращающих никакого значения. Функция типа void – это аналог Verilog task’a.

Share this post

Leave a Reply

Your email address will not be published. Required fields are marked *