Привет! С вами снова Александр и мой бессменный ассистент FPGA-тян!

Да, тема сегодняшней статьи комбинационная логика и её применение в электронике. Это такая логика, при которой состояние выхода комбинационной схемы определяет только множество входных сигналов. Изначально звучит довольно сложно, да?

Ну будет тебе, ещё чуть теории и перейдём к практике. Связь логических элементов с физическим миром осуществляется через биполярные или полевые транзисторы, как на Рисунке 1.

Рисунок 1- транзисторное представление комб. функций
Рисунок 1- транзисторное представление комб. функций

Совершенно верно, или по академически: Конъюнкция,Дизъюнкция и Инверсия (Отрицание). На основе этих трёх элементов с помощью СДНФ и СКНФ можно реализовать любую логическую комбинационную функцию. то есть это как кирпичики для строительства дома.

Ещё существуют законы Де`Моргана по преобразованию одних логических функций в другие (Рисунок 2).

Рисунок 2- законы Де`Моргана
Рисунок 2- законы Де`Моргана

Да, верно, первый элемент- инверсия. Выполняет функцию инвертирование, то есть сигнал изменяется на свою противоположность (Рисунок 3). Также, будем приводить таблицы истинности для каждого элемента.

Рисунок 3- Инверсия
Рисунок 3- Инверсия

a

~(a)

0

1

1

0

Следующий элемент – логическое И. выход будет равен логической единице только если на обоих входах единицы (Рисунок 4).

Рисунок 4- логическое И
Рисунок 4- логическое И

a

b

x

0

0

0

0

1

0

1

0

0

1

1

1

Последний элемент логического базиса – логическое ИЛИ. В противоположность И, выход истинен всегда, кроме случая, когда на обоих входах логические нули (Рисунок 5).

Рисунок 5- логическое ИЛИ
Рисунок 5- логическое ИЛИ

a

b

x

0

0

0

0

1

1

1

0

1

1

1

1

И бонусный четвёртый элемент – исключающие ИЛИ. Выход истинен только тогда, когда один из входов 0 а другой 1 (Рисунок 6).

Рисунок 6- исключающие ИЛИ
Рисунок 6- исключающие ИЛИ

a

b

x

0

0

0

0

1

1

1

0

1

1

1

0

Ну на сегодня, наверное, уже всё. Думаю, для статьи этого будет достаточно.

Ладно-ладно, давай напишем прошивку с логическим ИЛИ на FPGA.

Вот код прошивки для ПЛИС:

//FPGA -xc7a15tcsg325-1 отладочная плата - QMTECH_XC7A15T_35T_50T_CSG325

module Logic_OR(
input a,b,//sw1 и sw2
output c,d,osc
    ); 
assign c=~(a&b); 
assign d = ~c; //
assign osc =c; //выход осцилографа
endmodule

Вот файл xdc для прошивки ПЛИС:

#FPGA -xc7a15tcsg325-1 отладочная плата - QMTECH_XC7A15T_35T_50T_CSG325

set_property PACKAGE_PIN C8 [get_ports c]
set_property IOSTANDARD LVCMOS33 [get_ports c]

set_property PACKAGE_PIN A9 [get_ports osc]
set_property IOSTANDARD LVCMOS33 [get_ports osc]

set_property PACKAGE_PIN H18 [get_ports a]
set_property IOSTANDARD LVCMOS33 [get_ports a]

set_property PACKAGE_PIN H17 [get_ports b]
set_property IOSTANDARD LVCMOS33 [get_ports b]

set_property PACKAGE_PIN D8 [get_ports d]
set_property IOSTANDARD LVCMOS33 [get_ports d]

Вид отладочной платы на Рисунке 7

Рисунок 7- Отладочная плата
Рисунок 7- Отладочная плата

Изначально у нас горит светодиод D4 который является прямым выходом С. т.к. светодиоды инверсные то они работают горят по низкому уровню, то есть по нулю, значит при нулях на вх��де светодиод D4 горит, а на светодиод D1 подаётся инверсный сигнал, и он не светится. Но стоит нажать один из переключателей Sw1 или Sw2, как огонёк переходит с D4 на D1 (Рисунок 8).

Рисунок 8- Нажатие Sw2
Рисунок 8- Нажатие Sw2

Также отсмотрим состояние осциллографа в момент нажатия (Рисунок 9).

Рисунок 9- Перепад сигнала на осциллографе
Рисунок 9- Перепад сигнала на осциллографе

Ладно, а на этом, вынуждены с вами расстаться. До новых встреч, друзья!

Список литературных источников

1.    https://ru.wikipedia.org/wiki/Комбинационная_логика

2.    ПЛИС С XILINX. Языки описания аппаратуры VHDL/Verilog САПР, приемы проектирования (Aвтор И. Е. Тарасов)

3.    FPGA prototyping by Verilog examples (Автор PONG P.CHU)