Привет! С вами снова Александр и мой бессменный ассистент 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)
Комментарии (15)
gena_k
21.05.2025 12:36Статья понравилась, для новичков самое то. Подскажите, что это за макетная плата и как можно скомпилировать и зашить код из примера?
Про логику на транзисторах есть один момент, что потенциал от входа к выходу будет снижаться в показанных элементах И и ИЛИ, поэтому для поддержания работы нужны будут усилители напряжения (напр, пара инверторов). В приведённом инверторе также будет сильное ослабление напряжения на входе.
Liarddead Автор
21.05.2025 12:36Отладочная плата - QMTECH_XC7A15TCSG325
Я прошиваюсь через vivado. Думаю написать обучающую статью о работе в САПР.
KeisN13
21.05.2025 12:36И снова и снова мы видим статьи для начинающих, когда уже кто-нить напишет что-то посложнее чем просто и-или-не :(
На за подачу плюсую, забавно, не то што мои статьи с пингвином и изолентой xDLiarddead Автор
21.05.2025 12:36Думаю написать статью о трёх-тактном процессоре на FPGA. Но требуется много времени на разработку и написание статьи. Сейчас приоритет на болле простые обучающие темы.
KeisN13
21.05.2025 12:36честно говоря, эта тематика поднятия процессоров на fpga несколько подзакалибала уже. Звенит из каждого утюга, но это мое оценочное суждение
bodyawm
Почему статья неделю мариновалась в песочнице?!
Не порядок! Интересная подача у автора ведь :))
Выдал инвайт, буду ждать интересные статьи про FPGA, сам хочу заняться этой темой уже не один год =)
bodyawm
Я думаю нужно как-то замотивировать пользователей с инвайтами заходить в песок. Может, уведомление в трекер раз в месяц слать? Я захожу в песочницу, но не очень часто, если что-то нравится - выдаю инвайт.