FPGA. Дважды два - четыре

В предыдущей статье FPGA. Первое знакомство описано устройство подключения кнопок и светодиодов на используемой мною плате для прототипирования на основе ПЛИС Cyclone компании Altera. В этой статье я продолжаю своё знакомство с программированием программируемых логических интегральных схем.

FPGA. Дважды два - четыре

Две кнопки как два раза по два бита плюс четыре светодиода -- сравнение с двумя двухбитовыми числами и четырёх-битовым результатом их умножения напрашивалось само собой. Поэтому следующим шагом я решил узнать, насколько сложно сделать на FPGA что-то вроде арифметическо-логического устройства (АЛУ).

Поскольку кнопки включены по схеме высокого нуля, то есть состояние кнопки "не нажата" соответствует 1, а "нажата" - нулю, то я решил инвертировать сигналы с кнопок, поскольку лично мой мозг воспринимает светящийся светодиод как логическую единицу, а не нажатую кнопку как логический ноль.

Чтобы распределить сигналы от кнопок по двум 2-битным шинам, я написал на языке Verilog модуль FourIN_TwoOUT (скачать), который просто соединяет четыре своих входа с двумя выходами заданным образом:

module FourIN_TwoOUT(in0, in1, in2, in3, out0, out1);

input in0, in1, in2, in3;

output [1:0] out0, out1;


wire [1:0] out0, out1;


assign out0[0] = in0;

assign out0[1] = in1;

assign out1[0] = in2;

assign out1[1] = in3;


endmodule

Сам модуль умножения я назвал TwoXTwo_Four (скачать), вход chng которого означает, что состояние нажатости кнопок изменилось:

module TwoXTwo_Four(aIN, bIN, chng, OUT);

input [1:0] aIN, bIN;

input chng;

output [3:0] OUT;


reg [3:0] OUT;


always @ (chng)

OUT <= aIN * bIN;


endmodule

Общая схема устройства получилась следующей (скачать BDF):

Сигнал chng получается как результат логического AND всех сигналов от кнопок (логический элемент AND4).

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

Автор: Андрей Шаройко <vanyamboe@gmail.com>