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

Именование процедурных блоков

nПроцедурному блоку может быть присвоено имя: после begin добаляется <name>

nПреимущества

-Позволяет ссылаться на процедурные блоки по именам

-Позволяет декларировать локальные объекты для процедурного блока

-Позволяет в системе моделирования осуществлять мониторинг процедурного блока по имени

initial

begin : clock_init clk = 1’b0;

end

always

begin : clock_proc #(period/2) clk = ~clk;

end

Типы процедурных назначений

В языке Verilog определено два типа

процедурных назначений

n Blocking

n Nonblocking

Процедурные назначения

nВыполняются внутри процедурных блоков

(initial/always)

n LHS должно иметь тип Variable: (reg, integer, real, time)

nRHS может иметь тип Net или Variable или быть вызовом функции.

nЗадают значение переменной, которое остается неизменным до следующего обновления значения переменной с помощью процедурного назначения

Типы процедурных назначений (прод.)

nBlocking (=) : Обновляет LHS назначение процедурного назначения блокируя другие выполнение других назначений процедурного блока

-Значение RHS (inputs) защелкивается в момент выполнения оператора

-Значение LHS (outputs) обновляется немедленно или после явно заданной задержки

-Выполнение следующих операторов задерживается до полного выполнения blocking statement (до обновления значения LHS (включая задержку) )

nNonblocking (<=) : Обновляет LHS назначение процедурного назначения не блокируя другие выполнение других назначений процедурного блока

-Значение RHS (inputs) защелкивается в момент выполнения оператора

-Обновление значения LHS (outputs) планируется в конце временного шага или после явно заданной задержки

-Выполнение следующих операторов не задерживается до полного выполнения nonblocking statement (до обновления значения LHS (включая задержку))

Blocking и Nonblocking Assignments

Blocking (=)

Nonblocking (<=)

initial begin a = #5 b; c = #10 a;

end

initial begin a <= #5 b; c <= #10 a;

end

a=b

c=a

a=b c=a

5

10

15

5

10

15

Выполнение Blocking & Nonblocking

initial begin

a = 1’b0; //Assgnmnt0 b = 1’b1; //Assgnmnt1 a <= #5 b; //Assgnmnt2 b <= #5 a; //Assgnmnt3

end

Это иллюстрация поведения

blocking and nonblocking

назначений

1.Назначение 0 выполняется и a присваивается значение 0 (остальные назначения блокируются)

2.Назначение 1 выполняется и b присваивается значение 1 (остальные назначения блокируются)

3.Назначение 2 выполняется и планируется присвоить a текущее значение b (1) через 5 временных шагов

4.Назначение 3 выполняется и планируется b присвоить текущее значение a (0) через 5 временных шагов

5.Процесс заканчивается через 5 временных шагов и значение a обновляется до 1, а значение b обновляется до 0

Выполнение Blocking & Nonblocking

initial begin

a = 1’b0; //Assgnmnt0 b = 1’b1; //Assgnmnt1 a = #5 b; //Assgnmnt2 b = #5 a; //Assgnmnt3

end

Это иллюстрация поведения

blocking and nonblocking

назначений

1.Назначение 0 выполняется и a присваивается значение 0 (остальные назначения блокируются)

2.Назначение 1 выполняется и b присваивается значение 1 (остальные назначения блокируются)

3.Назначение 2 выполняется и a присваивается текущее значение b

(1) через 5 временных шагов

(остальные назначения на это время блокируются)

4.Назначение 3 выполняется и b присваивается текущее значение a

(1) через 5 временных шагов (остальные назначения на это время блокируются)

5. Процесс закончен

Управление событиями

Event Control

n @ @(expression)

nПриостанавливает выполнение процедурных операторов до наступления события (т.е. до момента изменения значения выражения)

nОбеспечивает управление чувствительное к изменениям сигнала ( edge-sensitive)

nДля проверки нескольких событий используют логическое OR:

- Comma (,)

l Verilog ‘2001 и более поздние

- or

*Note: This usage not supported by synthesis.

Управление событиями и список чувствительности

nИспользуйте управление событиями в начале блока always для задания момента начала его выполнения

-Для каждого выполнения блока always требуется наступление события

-Блок always становится “чувствительным” к переменным в управлении событием

n Часто называют Sensitivity List n Поддержан средствами синтеза

Формат

 

Пример

 

 

 

always @(sensitivity_list) begin

 

// Process executes whenever

-- Statement_1

 

// a, b, c or d changes in value

-- …………..

 

always @(a, b, c, d) begin

-- Statement_N

 

#15 y = (a ^ b) & (c ~| d);

end

 

end

Описание комбинационных и триггерных схем

nRTL описания используют процедурные блоки для описания комбинационных и триггерных схем

-Комбинационный - Combinatorial Process

-Тактовый (регистровый) - Clocked Process

nДля описания комбинационных схем используются блокирующие назначения

nДля описания триггерных схем используются не блокирующие назначения