Verilog_radar1
.pdfКлассы данных
nОпределены два класса данных:
-Net
-Variable
nКласс данных Net (цепь):
-представляет физическую связь между элементами структуры
nets MUX
nets |
Adder |
|
nets |
|
|
|
|
|
|
|
|
|
|
|
|
-Отражает значение драйвера цепи
-Имеет функцию «разрешения» - определяющую значение при подсоединении нескольких драйверов к цепи.
Объявление цепи (класс данных Net)
n Обобщенная форма объявления цепи:
- net_type <signed> <[range]> { net_name <[array]>, …}
l net_type – тип данных класса Net
l signed - <не обязательно> - знаковый (представлен в доп. коде)
l range - <не обязательно> - диапазон элементов вектора, если не задан, то – одноразрядная цепь
l net_name – имя цепи
l array - <не обязательно> - диапазон числа слов в массиве.
82
Типы данных класса Net
|
Тип данных |
|
Для чего используется |
|
Поддержка синтеза |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wire |
|
Используется для соединения модулей |
|
Y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tri |
|
|
Y |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
supply0 |
|
Представляют константные данные (питание и |
|
Y |
|
|
supply1 |
|
землю) |
|
Y |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wand |
|
|
|
Y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
triand |
|
Реализуют монтажную логику |
|
Y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wor |
|
|
Y |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trior |
|
|
|
Y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tri0 |
|
Цепь с z состоянием и резисторами |
|
Y |
|
|
tri1 |
|
pull-up/pull-down |
|
Y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trireg |
|
Цепь, хранящая свое предыдущее значение |
|
N |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Примеры объявления цепи
nПримеры:
-wire clr_n;
-wor temp;
-supply0 cnst_0;
-supply1 cnst_1;
nВыводы модуля по умолчанию имеют тип данных wire, но для выходов тип данных можно изменить:
-output wor x;
Примеры:
85 |
© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru ) |
Задание шины (вектора класса данных Net)
n Цепи могут быть объявлены как векторы (шины)
nДве способа объявление шины :
-net_type [ high : low] net_name;
-net_type [ low : high] net_name;
n Самый левый бит всегда старший
n Максимальный размер вектора – 2**32 разрядов
nПримеры:
-wire [15:0] mult_out; // шина 16 бит
-wire [0:15] busA, busB; // две шина 16 бит; старший разряд шины - 0
Обращение к элементам вектора
nПри обращении ко всем элементам вектора можно упустить квадратные скобки с индексами:
-wire [3:0] a, b;
-assign a=b;
nПри обращении к элементу вектора (bit select) значение индекса указывают в квадратных скобках:
-wire [3:0] a, b;
-assign a[3]=b[2];
87
Пример
88
Обращение к элементам вектора (2)
nПри обращении к нескольким элементам вектора
(Constant Part select):
- нельзя менять порядок перечисления его индексов:
l Не правильно: l wire [3:0] a, b; l assign a[0:3]=b;
nВ 2001 году в язык добавлена следующая возможность обращения к элементам вектора задавая (Variable Part Select):
-vector_name [ starting_bit number + : width]
-vector_name [ starting_bit number - : width]
89
Пример
90