Você está na página 1de 6

Universidade Federal de Campina Grande

Centro de Engenharia Elétrica e Informática


Departamento de Engenharia Elétrica
Laboratório de Circuitos Lógicos

Nome: Fábio Augusto Almeida Marçal // Gabriel Nazario Gonçalves


Email: fabio.marcal@ee.ufcg.edu.br // gabriel.goncalves@ee.ufcg.edu.br

Experimento Verilog 04: Flip-Flops, Registradores e Contadores com HDL

Objetivos
Este experimento consiste na realização de quatro partes específicas e possui como
objetivo geral o estudo de Flip-Flops, Registradores e Contadores, bem como o projeto
e implementação destes circuitos lógicos utilizando Verilog. Para tanto, é realizada a
implementação e a verificação do funcionamento correspondente aos seguintes
experimentos específicos:

• Flip-Flop JK.
• Registrador de deslocamento com entrada paralela e saída serial.
• Contador assíncrono crescente.
• Contador binário síncrono decrescente.

1. Flip-Flop JK

Objetivo Específico: Especificação e implementação de um Flip-Flop JK, com entrada,


clear, assíncrona, com o projeto realizado utilizando a linguagem Verilog para
implementação na Placa DE2.
Atividades:

Bloco Lógico:

Figura 1 - Bloco lógico flip-flop JK

Fonte: Representação gráfica

Codigo Verilog:

module ff_jk(clr, clk, j, k, q);

input clr, clk, j, k;


output reg q;
always@ (posedge clk, negedge clr)

begin
if(!clr) q <= 1'b0;
else
begin
case({j, k})
0: q = q;
1: q = 0;
2: q = 1;
3: q = ~q;
endcase
end
end
endmodule

Para o codigo do modulo temos:


//comunicação do flip flop jk com a placa

ff_jk ff1(.clr(SW[3]), .clk(SW[2]), .j(SW[1]), .k(SW[0]), .q(LEDR[0]));

Tabela Verdade do programa:


J K CLR Q
0 0 1 Q
1 0 1 0
0 1 1 1
1 1 1 Q’
X X 0 0

2. Registrador de Deslocamento, de 4 bits, com Entrada Paralela e Saída Serial

Objetivo Específico: Especificação e implementação de um Registrador de


deslocamento para a direita, com entrada paralela e saída serial, de 4 bits,
com o projeto realizado utilizando a linguagem Verilog para implementação na Placa
DE2.
Atividades:
Bloco lógico:
Figura 2 Registrador de Deslocamento entrada paralela

Fonte: Material visto em aula


Diagrama de tempo exemplo:
Figura 3 Diagrama temporal

Fonte: Material visto em aula

Codigo Verilog:
Para o Registrador:

module registrador_4bits(
input clr, clk, enable,
input [3:0] D,
output [3:0] X
);

wire [3:0] A;

mux2_1 m3(enable, 1'b0, D[3], A[3]);


ff_jk r3(clr, clk, A[3], ~A[3], X[3]);
mux2_1 m2(enable, X[3] , D[2], A[2]);
ff_jk r2(clr, clk, A[2], ~A[2], X[2]);
mux2_1 m1(enable, X[2], D[1], A[1]);
ff_jk r1(clr, clk, A[1], ~A[1], X[1]);
mux2_1 m0(enable, X[1], D[0], A[0]);
ff_jk r0(clr, clk, A[0], ~A[0], X[0]);

endmodule

Para o ff jk:
(Atividade anterior)

Para o mux 2:1:


module mux2_1(sel, I0, I1, Y);
input sel, I0, I1;
output Y;

assign Y = (sel) ? I1 : I0;


endmodule

Configuração do modulo:
//comunicação com a placa

registrador_4bits rd1(.clr(SW[6]), .clk(SW[5]),


.enable(SW[4]), .D(SW[3:0]), .X(LEDR[3:0]));

Tabela verdade exemplo:


Figura 4 Tabela verade Registrador deslocamento

Fonte: Material visto em aula

3. Contador assíncrono módulo 10 crescente

Objetivo Específico: Especificação e implementação de um Contador Assíncrono


Binário, Módulo 10, Crescente, com o projeto realizado utilizando a
linguagem Verilog para implementação na Placa DE2.

Atividades:
Bloco lógico:
Figura 5 Contador assincrono modulo 10 crescernte

Fonte: Material visto em aula

Código verilog:
module count_assinc(clk, reset, count);

input clk, reset;


output [3:0]count;

wire reset_comb;
reg [3:0]reg_count;
assign count = reg_count;
assign reset_comb = (reset & ((reg_count==4'b1001)? 1'b0 : 1'b1));

always@(posedge clk) begin


if(!reset_comb)reg_count<=4'b0000;
else reg_count<=reg_count + 1'b1;

end
endmodule

Configuração do módulo:

//comunicação com a placa


count_assinc ca1(.clk(SW[0]), .reset(SW[1]), .count(LEDR[3:0]));

4. Contador Síncrono Módulo 10 Decrescente

Objetivo Específico: Especificação e implementação de um Contador Binário


Síncrono Módulo 10, Decrescente, com o projeto realizado utilizando a linguagem Verilog para
implementação na Placa DE2.

Atividades:
Bloco lógico:
Figura 6 Contador sincrono modulo 10

Fonte: Material visto em aula

Codigo Verilog:
module counter_sinc(clk, s);

input clk;
output [3:0]s;

wire and1;
wire and2;
wire nand1;
wire clear;

ff_jk ff1(clr, clk, 1, 1, s[0]);


ff_jk ff2(clr, clk, s[0], s[0], s[1]);
assign and1 = s[0] & s[1];
ff_jk ff3(clr, clk, and1, and1, s[2]);
assign and2 = s[0] & s[1] & s[2];
ff_jk ff4(clr, clk, and2, and2, s[3]);
assign nand1 = ~(s[3] & s[1]);
assign clr = nand1;

endmodule

Configuração do módulo:

//comunicação com a placa

counter_sinc cs1(.clk(SW[0]), .s(LEDR[3:0]));

Você também pode gostar