Привет! С вами снова Александр и мой бессменный ассистент 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)