Типы данных
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 |
---|---|---|---|---|
shortint | 2 | signed | 16 | SystemVerilog |
int | 2 | signed | 32 | SystemVerilog |
longint | 2 | signed | 64 | SystemVerilog |
byte | 2 | signed | 8 | SystemVerilog |
bit | 2 | unsigned | SystemVerilog | |
logic | 4 | unsigned | SystemVerilog | |
reg | 4 | unsigned | Verilog | |
integer | 4 | signed | >=32 | Verilog |
real | Verilog | |||
shortreal | SystemVerilog | |||
realtime | Verilog | |||
time | 4 | unsigned | 64 | Verilog |
Если значения 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.
Leave a Reply