Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба4.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
36.26 Кб
Скачать

ОТВЕТЫ НА КОНТРОЛЬНЫЕ ВОПРОСЫ

1) Как организовать последовательное выполнение двух явно заданных процессов?

Если необходимо запустить 2 процесса подряд один за другим, то в 1 процессе следует перед его окончанием задать какой-либо сигнал (и изменить его). А второй процесс сделать активным по изменению данного сигнала. Таким образом, второй процесс будет выполнять строго после выполнения первого процесса.

Кроме того, в VHDL существует понятие вложенного процесса. Следовательно можно запускать последовательное выполнение таким образом.

2) Какие конструкции языка позволяют реализовать генератор с легко изменяемыми периодом генерации и соотношением длительностей низкого и высокого уровней?

Вариант 1 - задаются сигналы за счет задержек:

i1 <= '0' after 100 ns, '1' after 300 ns;

i2 <= '0' after 100 ns, '1' after 150 ns;

Вариант 2 - задаются паузы:

sig_gen : process

begin

--

-- below: generator sequence

gen <= 0;

wait for 10 ns;

gen <= 1;

wait for 10 ns;

3) Почему описание содержащее два процесса для генерации сигнала clk (один для инициализации и второй для периодического изменения) не работоспособно?

Процесс в VHDL определяет независимую повторяющуюся последовательность операторов и представляет поведение некоторой части проекта. После того, как последний оператор последовательности выполнен, выполнение начинается с первого оператора процесса. Для определения процесса используется оператор process , который состоит из объявлений (после ключевого слова process) и операторной части, которая начинается после слова begin. В объявлении процесса допускается создавать переменные, в то время как объявлять сигналы в этой части нельзя.

Поэтому, если каждый из процессов работает независимо, то инициализация сигнала в одном из процессов не даст никакого выходного результата, а использование сигнала в другом - не даст результат, так как тот не объявлен в данном процессе.

4) Чем будет отличаться выполнение двух нижеприведённых конструкций модели?

t <= ’1’ after 3 ns;

---------------------

t <= ’1’;

wait for 3 ns;

after – задержка назначения сигнала, т.е. сигнал будет присвоен через 3нс.

wait for – после присвоения сигнала приостанавливает процесс на 3 нс.

5) Каким образом реализуются функции rising_edge и falling_edge для типа std_logic?

Передний фронт

Ниже показано задание переднего фронта тактового сигнала для использования в качестве условия в условном операторе ( if statement)

 

(positive <clock_edge>):

RISING_EDGE(clk_signal_name)

clk_signal_name'EVENT and clk_signal_name = '1'

clk_signal_name = '1' and clk_signal_name'EVENT

not clk_signal_name'STABLE and clk_signal_name = '1'

clk_signal_name = '1' and not clk_signal_name'STABLE

Для использования в качестве условия в операторе wait until используются следующие конструкции для задания переднего фронта

 

RISING_EDGE(clk_signal_name)

clk_signal_name = '1'

clk_signal_name'EVENT and clk_signal_name = '1'

clk_signal_name = '1' and clk_signal_name'EVENT

not clk_signal_name'STABLE and clk_signal_name = '1'

clk_signal_name = '1' and not clk_signal_name'STABLE

 

Задний фронт

Ниже показано задание заднего фронта тактового сигнала для использования в качестве условия в условном операторе ( if statement)

 

FALLING_EDGE(clk_signal_name)

clk_signal_name'EVENT and clk_signal_name = '0'

clk_signal_name = '0' and clk_signal_name'EVENT

not clk_signal_name'STABLE and clk_signal_name = '0'

clk_signal_name = '0' and not clk_signal_name'STABLE

 

Для использования в качестве условия в операторе wait until используются следующие конструкции для задания заднего фронта

 

FALLING_EDGE(clk_signal_name)

clk_signal_name = '0'

clk_signal_name'EVENT and clk_signal_name = '0'

clk_signal_name = '0' and clk_signal_name'EVENT

not clk_signal_name'STABLE and clk_signal_name = '0'

clk_signal_name = '0' and not clk_signal_name'STABLE