Verilog_radar1
.pdfУсловный оператор оператор if-else
nТип 1:
-if ( <expression>) true_statement;
nТип 2:
-if ( <expression>) true_statement; else false_statement;
nТип 3:
-if ( <expression1>) true_statement 1;
-else if ( <expression2>) true_statement 2;
-…
-else if ( <expression n >) true_statement n;
-else default_statement;
lПервое истинное условие вызывает выполнение связанных с ним операторов. Условия оцениваются сверху вниз = приоритет условий
lЕсли все условия ложны, тогда выполняются операторы, связанные с терминирующим “else”
l Если есть несколько операторов то используется begin end
191 |
© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru ) |
Пример
always @ (sela, selb, a, b, c) begin if (sela)
q = a; else if (selb)
q = b; else
q = c;
end
c
b |
q |
a
selb
sela
Оператор условного выбора case
n Формат оператора:
case {expression}
<condition1> : {sequence of statements 1} <condition2> : {sequence of statements 2}
…
default : {sequence of statements } endcase
n Если {sequence of statements } содержит несколько операторов, то они группируются: begin end
Оператор case
n Условия оцениваются по порядку
n Выбирается первое подходящее значение
n X и Z рассматриваются как логические значения
ndefault задает все другие возможные значения, которые не были явно указаны
nVerilog не требует (хотя это рекомендовано):
-Были рассмотрены все возможные значения
-Все условия были уникальными
Пример:
always @ (sel, a, b, c, d) begin case (sel)
2’b00 : q = a; 2’b01 : q = b;
2’b10 : q = c; default : q = d;
endcase end
a |
|
|
|
|
|
|
|
b |
|
|
q |
|
|
||
c |
|
|
|
|
|
|
d
sel
2
Две дополнительные форм оператора case
ncasez
-Z и ?
Рассматриваются как «любое значение»
•
ncasex
-X, Z, and ?
Рассматриваются как «любое значение»
•
casez (encoder)
4’b1??? : high_lvl = 3; 4’b01?? : high_lvl = 2; 4’b001? : high_lvl = 1;
4’b0001 : high_lvl = 0; default : high_lvl = 0;
endcase
if encoder = 4’b1z0x, then high_lvl = 3
casex (encoder)
4’b1xxx : high_lvl = 3; 4’b01xx : high_lvl = 2; 4’b001x : high_lvl = 1;
4’b0001: high_lvl = 0; default : high_lvl = 0;
endcase
if encoder = 4’b1z0x, then high_lvl = 3
Упражнение 5
197 |
© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru ) |
Упражнение 5 (задание)
n На языке Verilog описать модуль АЛУ (все числа со знаком):
- Режим работы определяется кнопками pba, pbb:
l 00 |
– sw[7:4] + sw[3:0]. |
l 01 |
– sw[7:4] - sw[3:0] |
l 10 |
– sw[7:4] * sw[3:0]. |
l 11 |
– sw[3:0]** 2. |
n Осуществить функциональное моделирование
n Посмотреть синтезированную пакетом QII схему (RTL Viewer) n В описание модуля: инвертировать все выходы
n Посмотреть синтезированную пакетом QII схему (RTL Viewer) n Назначить выводы СБИС
nОсуществить полную компиляцию, программирование платы и проверить работу проекта на плате.
198 |
© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru ) |
Порядок выполнения упражнения 5
nСоздать проект:
-Имя проекта – lab5, имя модуля верхнего уровня иерархии – lab5, Рабочая папка - …\lab 5
-СБИС – EP4CE6E22C8
n Создать новый файл: File=>New=>Verilog HDL file n Сохранить его под именем lab5.
nВведите текстовое описание модуля на языке
Verilog.
199 |
© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru ) |
Порядок выполнения упражнения 5
nСоздайте файл VWF (File=>New=>University Program VWF).
n Сохранить его под именем lab5
nЗадайте входы, выходы и тестовое воздействие
-Тест должен включать проверку всех операций, по возможности для результата больше и меньше нуля (где это возможно)
200 |
© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru ) |