Визуальная электроника

Введение

Verilog имеет встроенные примитивы: логические и передаточные вентили и ключи. Они редко используются в проектировании, но являются основным материалом при синтезе для моделирования заказных микросхем и ячеек микросхем программируемой логики, которые затем используются на уровне симуляции логики или того, что называется симуляцией SDF. Утилиты синтеза также производят нетлист, импортируемый в утилиты трассировки, что Verilog относит к уровню логических примитивов.

Логические примитивы

Логические вентили имеют один скалярный выход и несколько скалярных входов. Первый терминал в списке терминалов вентиля является выходом, остальные входами.

Логика

Описание

and

Элемент И

nand

Элемент И-НЕ

or

Элемент ИЛИ

nor

Элемент ИЛИ-НЕ

xor

Элемент XOR (исключающие ИЛИ)

xnor

Элемент XNOR (инверсия исключающего ИЛИ)

Пример.

Verilog Code:
  1. module gates();
  2.  
  3. wire out0;
  4. wire out1;
  5. wire out2;
  6. reg in1,in2,in3,in4;
  7.  
  8. not U1(out0,in1);
  9. and U2(out1,in1,in2,in3,in4);
  10. xor U3(out2,in1,in2,in3);
  11.  
  12. initial begin
  13. $monitor(
  14. "in1=%b in2=%b in3=%b in4=%b out0=%b out1=%b out2=%b",
  15. in1,in2,in3,in4,out0,out1,out2);
  16. in1 = 0;
  17. in2 = 0;
  18. in3 = 0;
  19. in4 = 0;
  20. #1 in1 = 1;
  21. #1 in2 = 1;
  22. #1 in3 = 1;
  23. #1 in4 = 1;
  24. #1 $finish;
  25. end
  26.  
  27. endmodule

Вывод симулятора

Code:
  1. <span style="color: black; font-size: small;"> in1 = 0 in2 = 0 in3 = 0 in4 = 0 out0 = 1 out1 = 0 out2 = 0
  2. in1 = 1 in2 = 0 in3 = 0 in4 = 0 out0 = 0 out1 = 0 out2 = 1
  3. in1 = 1 in2 = 1 in3 = 0 in4 = 0 out0 = 0 out1 = 0 out2 = 0
  4. in1 = 1 in2 = 1 in3 = 1 in4 = 0 out0 = 0 out1 = 0 out2 = 1
  5. in1 = 1 in2 = 1 in3 = 1 in4 = 1 out0 = 0 out1 = 1 out2 = 1</span>

Передаточные элементы логики (буферы)

Передаточные вентили двунаправленные и могут быть резистивными и нерезистивными.

Синтаксис: keyword unique_name(inout1, inout2, control)

Элемент

Описание

not

N-выходной инвертор

buf

N-выходной буфер

bufif0

Буфер с тремя состояниями, активный низкий разрешающий.

bufif1

Буфер с тремя состояниями, активный высокий разрешающий.

notif0

Инвертер с тремя состояниями, активный низкий разрешающий.

notif1

Инвертер с тремя состояниями, активный высокий разрешающий.

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

Пример.

Verilog Code:
  1. module transmission_gates();
  2.  
  3. reg data_enable_low, in;
  4. wire data_bus, out1, out2;
  5.  
  6. bufif0 U1(data_bus,in, data_enable_low);
  7. buf U2(out1,in);
  8. not U3(out2,in);
  9.  
  10. initial begin
  11. $monitor(
  12. "@%g in=%b data_enable_low=%b out1=%b out2= b data_bus=%b",
  13. $time, in, data_enable_low, out1, out2, data_bus);
  14. data_enable_low = 0;
  15. in = 0;
  16. #4 data_enable_low = 1;
  17. #8 $finish;
  18. end
  19.  
  20. always #2 in = ~in;
  21.  
  22. endmodule
Code:
  1. <span style="color: black; font-size: small;"> @0 in = 0 data_enable_low = 0 out1 = 0 out2 = 1 data_bus = 0
  2. @2 in = 1 data_enable_low = 0 out1 = 1 out2 = 0 data_bus = 1
  3. @4 in = 0 data_enable_low = 1 out1 = 0 out2 = 1 data_bus = z
  4. @6 in = 1 data_enable_low = 1 out1 = 1 out2 = 0 data_bus = z
  5. @8 in = 0 data_enable_low = 1 out1 = 0 out2 = 1 data_bus = z
  6. @10 in = 1 data_enable_low = 1 out1 = 1 out2 = 0 data_bus = z</span>

Примитивы ключей

В Verilog используются шесть различных примитивов переключателей (модели транзисторов), nmos, pmos и cmos и соответствующие три резистивные версии rnmos, rpmos и rcmos. Переключатели типа cmos имеют два затвора и поэтому имеют два управляющих сигнала.

Синтаксис: keyword unique_name (drain. source, gate)

Логика

Описание

pmos

Однонаправленный PMOS ключ

rpmos

Резистивный PMOS ключ

nmos

Однонаправленный NMOS ключ

rnmos

Резистивный NMOS ключ

cmos

Однонаправленный CMOS ключ

rcmos

Резистивный CMOS ключ

tranif1

Двунаправленный транзистор (H)

tranif0

Двунаправленный транзистор (L)

rtranif1

Резистивный транзистор (H)

rtranif0

Резистивный транзистор (L)

tran

Двунаправленный проходной транзистор

rtran

Резистивный проходной транзистор

pullup

Подтягивающий резистор к питанию

pulldown

Подтягивающий резистор к земле

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

Пример.

Verilog Code:
  1. module switch_primitives();
  2.  
  3. wire net1, net2, net3;
  4. wire net4, net5, net6;
  5.  
  6. tranif0 my_gate1 (net1, net2, net3);
  7. rtranif1 my_gate2 (net4, net5, net6);
  8.  
  9. endmodule

Передаточные вентили tran и rtran постоянно подключены и не имеют управляющих линий. Tran может использоваться как интерфейс между двумя линиями с разными источниками, а rtran используется для ослабления сигналов. Устройства на сопротивлениях согласуют уровни сигналов. Все ключи передают сигналы от истока к стоку, неправильное подключение приведет к высокоимпедансному состоянию выходов.

Логические значения и уровни сигналов

Verilog различает четыре логических уровня:

Логический уровень

Описание

0

ноль, низкий, ложно

1

единица, высокий, истина

z or Z

высокий импеданс, плавающий

x or X

неизвестно, не инициализирован, конфликт уровней

Физические уровни в Verilog

Уровень сигнала

Ключевое слово описания

7 Соединен с шиной

supply0 supply1

6 Сильная подтяжка

strong0 strong1

5 Обычная подтяжка

pull0 pull1

4 Большая емкость

large

3 Слабая подтяжка

weak 0 weak1

2 Средняя емкость

medium

1 Малая емкость

small

0 Высокий импеданс

highz0 highz1

Пример 1.

Два буфера с выходом

A : Подтяжка к 1

B : Замкнут на землю 0

Поскольку замыкание на землю сильнее подтяжки к 1, выход C принимает значение B.

Пример 2.

Два буфера имеют выход

A : Замкнут на питание 1

B : Большая емкость 1

Поскольку питание приоритетнее большой емкости 1, выход C будет иметь значение A