Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
POPOVA.pdf
Скачиваний:
406
Добавлен:
11.04.2019
Размер:
816.46 Кб
Скачать

разряда регистра. При этом во время второго фронта 0-1 сигнала clk1 регистр может сработать правильно, что отражено на диаграмме. Возможна ситуация, при которой сигнал q2 вообще не переключится и сохранит нулевое значение.

13.3.Учет задержек при моделировании

Внекоторых случаях возникает необходимость включения задержек в описание (модель) устройства [7]. Язык Verilog позволяет описывать задержки несколькими способами (см. главу 9), но не все из них моделируют задержку реального устройства.

Задержки могут указываться в операторах блокирующего и неблокирующего присваивания как справа, так и слева от оператора.

Варианты указания задержек для процедурного назначения: always @ (a)

y <= # 5 ~a; // неблокирующее назначение, задержка указана справа; always @ (a)

#5 y <= ~a; // неблокирующее назначение, задержка указана слева; always @ (a)

#5 y = ~a; // блокирующее назначение, задержка указана слева; always @ (a)

y = # 5 ~a; // блокирующее назначение, задержка указана справа.

Рассмотрим пример описания четырехразрядного сумматора, в котором задержка указана в правой части оператора неблокирующего присваивания.

//Пример 1

module sm_4bit (p_out, s, a, b, p_in); output p_out;

output [3:0] s; input [3:0] a, b; input p_in;

reg p_out; reg [3:0] s;

always @ (a or b or p_in)

{p_out, s} <= # 12 a + b + p_in; endmodule

На рис.13.3 приведена временная диаграмма результата моделирования для описания Примера 1. Оператор неблокирующего назначения с задержкой справа моделируется так, что при каждом изменении одного из операндов в тот же момент времени моделирования будет вычисляться результат операции. А назначение результата выходному сигналу будет помещено в очередь событий на 12 нс позже. Следовательно, каждое изменение одного из входных сигналов приведет к появлению на выходе схемы соответствующего переключения. Такой способ указания задержки соответствует работе реального устройства, а значит, является корректным и правильным.

// Пример 2

always @ (a or b or p_in)

# 12 {p_out, s} <= a + b + p_in;

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

 

0

12

15

17 19

21

27 29

31 33

36

a

0

 

 

A

2

F

 

b

0

 

 

 

 

3

 

 

p_in

 

 

 

0

 

 

 

 

s

x

 

 

 

0

A

D 5

2

p_out

x

 

 

 

0

 

 

1

Рис.13.3. Временные диаграммы работы сумматора (Пример 1)

 

0

12

15

17

19

21

24

27

36

a

0

 

 

A

 

2

 

F

 

b

0

 

 

 

 

 

 

 

3

p_in

0

 

 

 

 

 

 

 

1

s

x

 

 

 

 

0

 

 

2

p_out

x

 

 

 

 

0

 

 

1

Рис.13.4. Временные диаграммы при указании задержки в левой части неблокирующего присваивания (Пример 2)

 

0

12

15

17

19

21

33

36

a

0

 

 

A

2

 

F

 

b

0

 

 

 

 

 

3

 

p_in

 

 

 

0

 

 

 

 

s

x

 

 

 

 

0

 

2

p_out

x

 

 

 

 

0

 

1

Рис.13.5. Временные диаграммы при указании задержки в непрерывном назначении (Пример 3)

При указании задержки в левой части неблокирующего назначения вычисление и назначение результата операции будут запланированы на будущий момент моделирования, соответствующий задержке (рис.13.4). Таким образом, через 12 нс после первого изменения (t = 15 нс) входного сигнала (например, а) произойдет вычисление значений выходных сигналов (t = 27 нс). Все изменения остальных входных сигналов, произошедшие в течение этих 12 нс, повлияют на выходы устройства без учета задержки. Следовательно, способ указания задержки в левой части неблокирующего присваивания не пригоден для описания устройств.

Указание задержки с блокирующим назначением также не дает результатов моделирования, соответствующих работе реальных устройств.

Задержку в левой части блокирующего назначения рекомендуется применять лишь при создании тестовых модулей для описания входных последовательностей.

При непрерывном назначении единственным корректным способом является указание задержки в левой части оператора.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

// Пример 3

module sm_4bit (p_out, s, a, b, p_in); output p_out;

output [3:0] s; input [3:0] a, b; input p_in;

assign # 12 {p_out, s} = a + b + p_in; endmodule

Такой способ указания задержки приведет к тому, что выходы схемы будут переключаться через 12 нс после последнего изменения входных сигналов. Диаграмма с результатами моделирования этого описания представлена на рис.13.5. Несмотря на то, что выходы схемы принимают правильные значения, такой способ указания задержки не позволяет проводить анализ переходных процессов в схеме и не рекомендуется для использования.

13.4. Использование конструкции casex

Конструкция casex трактует x как безразличное состояние, если оно встречается в операторе или в одном из условий. Проблемы с casex появляются, когда один из входных сигналов инициализируется в неопределенном состоянии. Моделирование, предшествующее синтезу схемы, обработает неопределенный входной сигнал как безразличный, а моделирование после синтеза обработает распространение неопределенного состояния входного сигнала через вентильную модель устройства.

Рассмотрим описание неполного дешифратора "2 - 4" с разрешающим сигналом. module badcase (memce0, memce1, cs, en, addr);

output memce0, memce1, cs; input en;

input [31:30] addr;

reg memce0, memce1, cs; always @ (addr or en) begin

{memce0, memce1, cs} = 3′b0; casex ({addr, en})

3′b101: memce0 = 1′b1; 3′b111: memce1 = 1′b1; 3′b0?1: cs = 1′b1;

endcase end

endmodul

Если в начальный момент моделирования в приведенном примере разрешающий сигнал en будет находиться в неопределенном состоянии, то конструкция case ошибочно выполнит одно из условий, опираясь на значение адреса addr. Из-за этого при моделировании могут быть не видны некоторые проблемы, связанные с начальной установкой схемы, которые обнаружатся после синтеза. Аналогичная проблема возникнет и при неопределенном старшем разряде адреса, что приведет к установке memce0 или memce1 вместо cs.

Таким образом, при описании устройств рекомендуется избегать использования конструкции casex, так как ее применение может привести к ошибочной обработке случайного неопределенного сигнала.

Для моделирования устройств, в которых необходима обработка безразличного состояния, рекомендуется применять конструкцию casez.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

13.5.Неполный перебор условий в конструкциях if и case

Вконструкциях if и case неполный перебор условий может привести к тому, что в результате синтеза описание комбинационной схемы будет заменено защелкой (latch - триггер, управляемый уровнем) [8].

Рассмотрим пример: always @ (data or gate) if (gate) q = data;

Врезультате синтеза приведенное описание превратится в защелку, поскольку из описания непонятно, что должно происходить с выходом схемы при gate = 0. Чтобы избежать подобной ситуации, необходимо либо явно описывать альтернативное состояние условного оператора, либо инициализировать значение выхода перед конструкцией if:

always @ (data, gate)

// первая рекомендация

begin if (gate) q = data;

 

else q = 0;

 

end

 

always @ (data, gate)

// вторая рекомендация

begin q = 0;

 

if (gate) q = data;

 

end

Аналогичные рекомендации даются относительно оператора case: необходимо либо явно указывать полный набор условий, либо использовать ключевое слово default.

Итак, рассмотрены лишь некоторые, наиболее важные аспекты создания моделе- и синтезопригодного описания на языке Verilog. Для создания корректного описания также зачастую приходится учитывать особенности применяемой системы автоматизированного проектирования, с помощью которой выполняется разработка.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

Соседние файлы в предмете Программирование логических интегральных схем