Você está na página 1de 5

Universidade Federal de Campina Grande - UFCG

Centro de Engenharia Elétrica e Informática - CEEI


Departamento de Engenharia Elétrica - DEE

Nome: Gabriel Nazario Gonçalves


E-mail: gabriel.goncalves@ee.ufcg.edu.br

Disciplina: Laboratório de Circuitos Lógicos


Professores: Fernanda Cecília Correia Lima Loureiro e Adolfo Hebster

Experimento Verilog 2 – Codificação, Decodificação e Conversão de Códigos

Objetivo Geral

Este experimento consiste no projeto e implementação dos circuitos lógicos específicos


para o estudo dos códigos binários e, em particular, das operações de codificação,
decodificação e conversão entre códigos e implementação dos circuitos lógicos que
realizam essas operações. Também tem como objetivo o estudo e utilização de circuitos
integrados MSI que implementam diversas dessas funções. Para tanto, é realizada a
montagem e a verificação do funcionamento de quatro circuitos lógicos correspondentes
aos seguintes experimentos específicos:

• Codificador Binário
• Decodificador Binário
• Conversor de Código

Codificador binário

Objetivo específico

Especificação e projeto de um Codificador Decimal/Binário com as chaves numeradas de


0 a 9 e leds de 0 a 3 os tipos de sinais: entradas de dados NAA (Nível Alto Ativo), e saídas
de dados NAA (Nível Alto Ativo). Utilizar a linguagem verilog HDL e fazer os
módulos por expressão lógica.

Atividades
A. Realizar a programação em Verilog desse Codificador Binário supondo que a
função implementada é Z = f(X) (usar a ordem convencional de índices para os
bits de entrada X = X9 X8 X7 X6 X5 X4 X3 X2 X1 X0 e a ordem convencional
de índices para os bits de saída Z = Z3 Z2 Z1 Z0; apresentar a tabela-verdade
simplificada usada para representá-lo, supondo que, de acordo com o número
correspondente a chave q esta sendo ligada o número em binário deverá ser
representado nos LED’s (Nível Alto Ativo).
X9 X8 X7 X6 X5 X4 X3 X2 X1 X0 Z3 Z2 Z1 Z0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 1 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0 0 0 1 1
0 0 0 0 0 0 1 0 0 0 0 1 0 0
0 0 0 0 0 1 0 0 0 0 0 1 0 1
0 0 0 0 1 0 0 0 0 0 0 1 1 0
0 0 0 1 0 0 0 0 0 0 0 1 1 1
0 0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 0 1 0 0 1
1 0 0 0 0 0 0 0 0 0 1 0 1 0

B. Aplicar o método de interpretação lógica da tabela-verdade simplificada, de


modo a obter, para cada saída, uma expressão lógica.

Z0 = X8 + X6 + X4 + X2 + X0
Z1 = X9 + X6 + X5 + X2 + X1
Z2 = X6 + X5 + X4 + X3
Z3 = X9 + X8 + X7

C. Implementar na placa DE2 o seu funcionamento.

// --- CONFIGURAÇÃO DO MODULO COM AS ENTRADAS E SAIDAS---


codificador c1(.entrada (SW [9:0]), .saida (LEDR [3:0]);

// ---MODULO CODIFICADOR---
module codificador (input [9:0] entrada, output reg [3:0] saida);
always@ (*) begin
case(entrada)
10’b 0000000000 : saida = 4’b 0000;
10’b 0000000001 : saida = 4’b 0000;
10’b 0000000010 : saida = 4’b 0001;
10’b 0000000100 : saida = 4’b 0010;
10’b 0000001000 : saida = 4’b 0011;
10’b 0000010000 : saida = 4’b 0100;
10’b 0000100000 : saida = 4’b 0101;
10’b 0001000000 : saida = 4’b 0110;
10’b 0010000000 : saida = 4’b 0111;
10’b 0100000000 : saida = 4’b 1000;
10’b 1000000000 : saida = 4’b 1001;
default : saida = 4’b 0000;
endcase
end
endmodule
Decodificador binário

Objetivo específico

Especificação e implementação de um Decodificador Binário 3:8, com os seguintes tipos


de sinais: entradas de dados NAA (Nível Alto Ativo) e saídas de dados NAA (Nível Alto
Ativo), com o projeto realizado a partir de inversores e de portas AND. Utilizar a
linguagem verilog HDL e fazer os módulos por expressão lógica.

Atividades

A. Fazer programa desse Decodificador Binário 3:8 por meio de:

(i) apresentação do bloco lógico e da tabela-verdade simplificada usados para


representá-lo, supondo que a função implementada é S = f(E), onde E =
E2 E1 E0 são as entradas de dados NAA, e S = S8 S7 S6 S5 S4 S3 S2 S1
são saídas de dados NAA;
(ii) descrição das entradas recebidas e da saída produzida por esse circuito
lógico, bem como as expressões lógicas de cada saída supondo que, de
acordo com o número binário representado nas entradas, o LED que
corresponde a esse número em decimal deve ser aceso.

E2 E1 E0 S8 S7 S6 S5 S4 S3 S2 S1
0 0 0 0 0 0 0 0 0 0 1
0 0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0 0
0 1 1 0 0 0 0 1 0 0 0
1 0 0 0 0 0 1 0 0 0 0
1 0 1 0 0 1 0 0 0 0 0
1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0

Figura 1 – Decoder 3:8

Fonte: FPGA

S1 = ~E0~E1~E2
S2 = E0~E1~E2
S3 = ~E0E1~E2
S4 = E0E1~E2
S5 = ~E0~E1E2
S6 = E0~E1E2
S7 = ~E0E1E2
S8 = E0E1E2

B. Implementar o projeto desse circuito na Placa DE2 e testar o seu funcionamento,


usando apenas inversores e portas AND de três entradas (correspondendo às
expressões lógicas obtidas).

// --- CONFIGURAÇÃO DO MODULO COM AS ENTRADAS E SAIDAS---


Decodificador d1(.E2 (SW[2]), .E1 (SW[1]), .E0 (SW[0]), .S1 (LEDR[0]), .S2
(LEDR[1]), .S3 (LEDR[2]), .S4 (LEDR[3]), .S5 (LEDR[4]), .S6 (LEDR[5]), .S7
(LEDR[6]), .S8 (LEDR[7]));

// ---MODULO DECODIFICADOR---
module decodificador (input logic e0, e1, e2, output logic s1, s2, s3, s4, s5, s6,
s7, s8);

assign s1 = ~e0&~e1&~e2;
assign s2 = e0&~e1&~e2;
assign s3 = ~e0&e1&~e2;
assign s4 = e0&e1&~e2;
assign s5 = ~e0&~e1&e2;
assign s6 = e0&~e1&e2;
assign s7 = ~e0&e1&e2;
assign s8 = e0&e1&e2;
endmodule

Conversor de código

Atividade
Fazer o programa e verificação do funcionamento do Conversor de código de três
bits, definido na Tabela- verdade, com entradas X = X2 X1 X0 e saídas Y = Y2 Y1 Y0.
Usar a linguagem Verilog para a implementação do conversor na placa DE2.

X2 X1 X0 Y2 Y1 Y0
0 0 0 0 0 0
0 0 1 0 0 1
0 1 0 0 1 1
0 1 1 0 1 0
1 0 0 1 1 0
1 0 1 1 1 1
1 1 0 1 0 1
1 1 1 1 0 0

// --- CONFIGURAÇÃO DO MODULO COM AS ENTRADAS E SAIDAS---


conversor cv(.entrada (SW[2:0]), .saida (LEDR[2:0]));
// ---MODULO CONVERSOR---
module conversor (input [2:0] entrada, output reg [2:0] saida);
always@ (*) begin
case(entrada)
3’b 000 : saida = 3’b 000;
3’b 001 : saida = 3’b 001;
3’b 010 : saida = 3’b 011;
3’b 011 : saida = 3’b 010;
3’b 100 : saida = 3’b 110;
3’b 101 : saida = 3’b 111;
3’b 110 : saida = 3’b 101;
3’b 111 : saida = 3’b 100;
default : saida = 3’b 000;
endcase
end
endmodule

Você também pode gostar