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

RTL Viewer

281

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )

Взаимоисключающие IF-ELSE порождающие триггеры защелки

n

взаимозависимости условий

282

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )

Исправление (1)

nИспользуйте независимые операторы IF и терминируйте их

sel(0)

 

LOGIC

 

 

 

 

 

sel(1)

 

 

X

 

 

 

sel(2)

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

sel(0)

 

LOGIC

 

 

 

 

 

sel(1)

 

 

 

 

 

Y

sel(2)

 

 

 

 

 

 

 

B

 

 

 

 

 

 

 

 

 

 

 

 

sel(0)

 

LOGIC

 

 

 

 

 

sel(1)

 

 

 

 

 

Z

sel(2)

 

 

 

 

 

 

 

C

 

 

 

 

 

 

 

 

283

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )

Исправление (2)

nИспользуйте независимые операторы IF и терминируйте их

sel(0)

 

LOGIC

 

 

 

 

 

sel(1)

 

 

X

 

 

 

sel(2)

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

sel(0)

 

LOGIC

 

 

 

 

 

sel(1)

 

 

 

 

 

Y

sel(2)

 

 

 

 

 

 

 

B

 

 

 

 

 

 

 

 

 

 

 

 

sel(0)

 

LOGIC

 

 

 

 

 

sel(1)

 

 

 

 

 

Z

sel(2)

 

 

 

 

 

 

 

C

 

 

 

 

 

 

 

 

284

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )

RTL Viewer

285

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )

Вложенные IF, порождающие защелки

n Используйте вложенные операторы IF осторожно

PROCESS (sel) BEGIN

IF sel(3) = '1' THEN

IF sel(2) = '1' THEN

IF sel(1) = '1' THEN

IF sel(0) = '1' THEN y <= '1';

END IF; END IF;

END IF; ELSE

y <= '0'; END IF;

END PROCESS;

Sel(0)

 

LOGIC

 

LATCH

 

 

 

 

 

 

Sel(1)

 

 

 

Y

 

 

 

 

 

Sel(2)

 

 

 

 

 

 

 

 

 

 

 

Sel(3)

 

 

 

 

 

 

 

 

 

 

 

 

286

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )

Исправление

n Терминируйте все операторы исчезнет.

PROCESS (sel)

BEGIN

IF sel(3) = '1' THEN

IF sel(2) = '1' THEN

IF sel(1) = '1' THEN

IF sel(0) = '1' THEN y <= '1';

ELSE

y <= '0'; END IF;

ELSE

y <= '0'; END IF;

ELSE

y <= '0'; END IF;

ELSE

y <= '0'; END IF;

END PROCESS;

IF и триггер защелка

sel(0)

 

LOGIC

 

 

 

 

 

sel(1)

 

 

y

 

 

 

sel(2)

 

 

 

 

 

 

 

sel(3)

 

 

 

 

 

 

 

 

PROCESS (sel)

BEGIN

y <= ‘0’;

IF sel(3) = '1' THEN

IF sel(2) = '1' THEN

IF sel(1) = '1' THEN

IF sel(0) = '1' THEN y <= '1';

END IF; END IF:

END IF;

END IF;

END PROCESS;

287

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )

Нежелательные защелки в операторе Case

n Условия, в которых не определены выходы

3 выхода: x, y, z

На не полностью определенном выходе формируется триггер-защелка

Триггеры-защелки будут сформированы на ВСЕХ трех выходах.

288

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )

Исправление

n Доопределение выходов

Инициализация

Для исключения триггеров- защелок и полного определения всех выходов:

Используйте инициализацию сигналов перед оператором case ( в операторе будут описаны только отличные от базовых значения сигналов)

289

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )

Упражнение 8

290

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )