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

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

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


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

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


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

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

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

a | b | x |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
И бонусный четвёртый элемент – исключающие ИЛИ. Выход истинен только тогда, когда один из входов 0 а другой 1 (Рисунок 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

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

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


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

Список литературных источников
1. https://ru.wikipedia.org/wiki/Комбинационная_логика
2. ПЛИС С XILINX. Языки описания аппаратуры VHDL/Verilog САПР, приемы проектирования (Aвтор И. Е. Тарасов)
3. FPGA prototyping by Verilog examples (Автор PONG P.CHU)