Скачиваний:
31
Добавлен:
29.12.2022
Размер:
8.96 Mб
Скачать

Условный оператор оператор 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 )