top of page

Como projetar multiplexadores em Verilog

Atualizado: 8 de nov. de 2022

Você e seu amigo estão almoçando em um restaurante e decidem marcar todos os gastos em apenas uma comanda. Na hora de pagar a conta no caixa, o atendente multiplica o número de refeições por dois, soma o valor de todas as bebidas e apresenta o valor final a vocês. Você percebe que o atendente somou uma bebida a mais, e pede para subtraí-la da conta. Ao final, com o valor corrigido, você e seu amigo pedem para dividir o valor total por dois, pois vocês vão rachar a conta.


Essa cena, comum em nossas vidas, teve como coadjuvante uma calculadora de 4 operações básicas. Nesta calculadora, há um circuito elementar chamado de multiplexador. É através dele que as operações básicas da calculadora são selecionadas.


Neste tutorial, você vai aprender a:

  • projetar um circuito multiplexador de 2 entradas (MUX2) usando portas lógicas

  • implementar o projeto do MUX2 em Verilog

  • mapear, compilar e prototipar um MUX2 na placa Community

  • criar um multiplexador de 4 entradas (MUX4) a partir de três MUX2

  • ler e compreender o relatório resumido do projeto

  • interagir com um projeto na placa Community


Antes de prosseguir, recomendamos os seguintes tutoriais:


O que é um multiplexador?

Um multiplexador é um circuito digital combinacional que transmite o bit de uma de suas entradas para a sua única saída. A seleção de uma entrada particular é realizada por um sinal de controle.



No lado esquerdo da animação acima, temos a representação de um multiplexador de 2 entradas de 1 bit em forma de chaves. Este multiplexador (ou MUX2) propaga os valores de entrada para a saída, intercalando (ou multiplexando) as entradas de acordo com o posicionamento da chave. Ao lado direito da figura, temos a representação simbólica do mesmo MUX2. Na representação simbólica, o posicionamento da chave é controlado pelo sinal c0.


A partir da animação, é possível identificar que o MUX2 possui 3 entradas e 1 saída, sendo elas: e0, e1, c0 e s0, respectivamente. O MUX2 pode também ser descrito pela seguinte tabela-verdade, onde 'X' pode ser '0' ou '1':

e0

e1

c0

s0

1

0

X

0

0

2

1

X

0

1

3

X

0

1

0

4

X

1

1

1

Note que, dependendo da variável c0, a saída s0 não é afetada pelo valor de 'X'. Em outras palavras, o valor de 'X' não importa para a saída s0 (don't care).


Descrevendo um MUX2 em Verilog

A tabela-verdade da seção anterior nos permite gerar a seguinte equação lógica através dos mintermos indicados nas linhas 2 e 4:

s0 =  (e0 AND (NOT c0)) OR (e1 AND c0)

A partir dessa equação em forma de soma-de-produto, temos o esquemático do MUX2 na tabela abaixo. O esquemático possui rótulos para os fios internos (w_0, w_1 e w_3). Estes rótulos são necessários para descrever o circuito em Verilog ao lado direito da tabela abaixo.

Esquemático (MUX2)

Código Verilog (MUX2)









    wire w_0, w_1, w_2;

    not(w_2, c0);
    and(w_0, e0, w_2);
    and(w_1, e1, c0);
    or(s0, w_0, w_1);

Veja que a codificação do esquemático para portas lógicas em Verilog é bem direta. O único cuidado a se tomar é colocar a saída da porta lógica sempre na primeira posição à esquerda, deixando as posições seguintes para as entradas da porta lógica.

porta_lógica (saída, entrada1, entrada2, ...)
Nota: a plataforma Pitanga aceita portas lógicas and, or, xor, nand, nor e xnor de até 4 entradas

Para encerrar a codificação do MUX2 em Verilog, falta-nos definir quais são as portas de entrada e saída. Iremos fazer isso utilizando a construção module/endmodule.