Integer и Real
Часть раздела Основы путешествия по Verilog на Coddy — урок 8 из 90.
В дополнение к wire и reg, в Verilog существуют другие типы данных для чисел, предназначенные для различных целей.
Integer
integer — это переменная общего назначения для счетчиков и вычислений.
- Размер по умолчанию составляет 32 бита
- Знаковый (может хранить отрицательные числа)
- Используется в основном в тестбенчах и циклах for
Объявление целого числа:
integer i; // 32-битная знаковая переменная
integer count; // Может хранить отрицательные числаИспользование integer:
integer i;
initial begin
i = 0; // Начинаем с 0
i = i + 1; // Считаем вверх
i = -5; // Может хранить отрицательные значения
$display("i = %d", i); // Выводит: i = -5
endReal
real предназначен для чисел с плавающей запятой (чисел с десятичной точкой).
- Хранит дробные значения
- Используется в тестбенчах для вычислений
- Не может быть синтезирован в аппаратное обеспечение
Объявление типа real:
real pi; // Переменная с плавающей точкой
real voltage;Использование real:
real pi;
initial begin
pi = 3.14159; // Десятичное значение
pi = 22.0 / 7.0; // Результат деления
$display("pi = %f", pi); // Выводит: pi = 3.142857
endГде их использовать
В тестбенчах: Integers и reals обычно используются для счетчиков циклов, вычислений и проверки ожидаемых значений. Они делают тестовый код проще для написания и понимания.
В аппаратном обеспечении: Эти типы обычно не являются синтезируемыми — это означает, что они не могут быть преобразованы в реальные схемы. Для аппаратного обеспечения, которое будет размещено на FPGA или чипе, используйте вместо них reg и wire.
Задание
Дополните код, чтобы тестбенч заработал.
Что нужно сделать:
- Объявите переменную типа integer с именем i (для счетчика цикла)
- Объявите переменную типа real с именем value (для вычислений)
Шпаргалка
integer – 32-битная знаковая переменная для счетчиков и вычислений (тестбенчи, циклы):
integer i;
integer count;
initial begin
i = 0;
i = i + 1;
i = -5; // can store negatives
endreal – переменная с плавающей точкой для дробных значений (только для тестбенчей, не синтезируется):
real pi;
initial begin
pi = 3.14159;
pi = 22.0 / 7.0;
$display("pi = %f", pi);
endИ integer, и real используются только в тестбенчах. Для синтезируемого оборудования используйте reg и wire.
Попробуйте сами
module test;
// Объявить целое число с именем i
// Объявить вещественное число с именем value
initial begin
i = 7;
value = i * 0.5;
$display("i = %0d, value = %f", i, value);
$finish;
end
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial