0% encontró este documento útil (0 votos)
27 vistas13 páginas

Contador Arbitrario de 4 Bits en Verilog

El documento describe el diseño de un contador arbitrario de 4 bits que sigue una secuencia específica, modificando algunos valores repetidos. Se presentan diagramas de transición de estados, tablas de Karnaugh y ecuaciones para la implementación del circuito utilizando biestables JK y puertas lógicas. Finalmente, se incluye el código del módulo JK y del contador arbitrario en lenguaje de descripción de hardware.

Cargado por

javiherr11
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
27 vistas13 páginas

Contador Arbitrario de 4 Bits en Verilog

El documento describe el diseño de un contador arbitrario de 4 bits que sigue una secuencia específica, modificando algunos valores repetidos. Se presentan diagramas de transición de estados, tablas de Karnaugh y ecuaciones para la implementación del circuito utilizando biestables JK y puertas lógicas. Finalmente, se incluye el código del módulo JK y del contador arbitrario en lenguaje de descripción de hardware.

Cargado por

javiherr11
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

COMPUTADORES I

PRÁCTICA FINAL: CONTADOR ARBITRARIO

GRUPO PA4
Alejandro García Arroyo
Javier Herrero García
OBJETIVOS Y ASPECTOS RELEVANTES

El trabajo propuesto es un contador arbitrario de 4 bits en el que se debe seguir la siguiente secuencia:
9-11-9-8-1-6-7-4-7
Y vuelta a empezar

En esta secuencia se puede ver que aparecen repetidos los números 9 y 7, por lo que los
sustituiremos por otros valores que no aparezcan en la secuencia. En nuestro caso, hemos sustituido
el 9 por el 3, y el 7 por el 5, quedando la secuencia así:

9-11-3-8-1-6-7-4-5

El circuito pues, deberá de estar formado por una señal de reloj, 4 biestables JK y puertas lógicas
AND, OR y XOR.

DESARROLLO

El diagrama de transición de estados quedará de la siguiente forma:

1011 0011 1000

0001
1001

0110

0101 0100 0111

Una vez creado el diagrama de transiciones, y con la ayuda de la tabla de transiciones del biestable JK
procedemos a crear la tabla de transiciones:

Tabla de transiciones del biestable JK:

Actual Siguiente J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
Tabla de transiciones:

Actual - Siguiente J3 K3 J2 K2 J1 K1 J0 K0
0000 - XXXX X X X X X X X X
0001 - 0110 0 X 1 X 1 X X 1
0010 - XXXX X X X X X X X X
0011 - 1000 1 X 0 X X 1 X 1
0100 - 0101 0 X X 0 0 X 1 X
0101 - 1001 1 X X 1 0 X X 0
0110 - 0111 0 X X 0 X 0 1 X
0111 - 0100 0 X X 0 X 1 X 1
1000 - 0001 X 1 0 X 0 X 1 X
1001 - 1011 X 0 0 X 1 X X 0
1010 - XXXX X X X X X X X X
1011 - 0011 X 1 0 X X 0 X 0
1100 - XXXX X X X X X X X X
1101 - XXXX X X X X X X X X
1110 – XXXX X X X X X X X X
1111 - XXXX X X X X X X X X

Tablas de Karnaugh:

Q1 Q0 Q3 Q2

J3 00 01 11 10 K3 00 01 11 10

00 X 0 X X 00 X X X 1

01 0 1 X X 01 X X X 0

11 1 0 X X 11 X X X 1

10 X 0 X X 10 X X X X
J2 00 01 11 10 K2 00 01 11 10

00 X X X 0 00 X 0 X X

01 1 X X 0 01 X 1 X X

11 0 X X 0 11 X 0 X X

10 X X X X 10 X 0 X X

J1 00 01 11 10 K1 00 01 11 10

00 X 0 X 0 00 X X X X

01 1 0 X 1 01 X X X X

11 X X X X 11 1 1 X 0

10 X X X X 10 X 0 X X

J0 00 01 11 10 K0 00 01 11 10

00 X 1 X 1 00 X X X X

01 X X X X 01 1 0 X 0

11 X X X X 11 1 1 X 0

10 X 1 X X 10 X X X X

Ecuaciones:

J3 Q1*nQ2 + nQ1*Q0*Q2 J2 nQ1*nQ3

K3 Q1 + nQ0 nQ1*Q0
K2
J1 Q0*03 + nQ3*nQ2 J0 1

K1 Q0*Q2 + nQ3*nQ2 Q1*nQ3 + nQ3*nQ2


K0

Obtenidas ya las ecuaciones, podemos hacer el diagrama de transición final:

Actual J3 K3 J2 K2 J1 K1 J0 K0 Siguiente
0 0000 0 1 1 0 1 1 1 1 0111 7
1 0001 0 0 1 1 1 1 1 1 0110 6
2 0010 1 1 0 0 1 1 1 1 1001 9
3 0011 1 1 0 0 1 1 1 1 1000 8
4 0100 0 1 1 0 0 0 1 0 0101 5
5 0101 1 0 1 1 0 1 1 0 1001 9
6 0110 0 1 0 0 0 0 1 1 0111 7
7 0111 0 1 0 0 0 1 1 1 0100 4
8 1000 0 1 0 0 0 0 1 0 0001 1
9 1001 0 0 0 1 1 0 1 0 1011 11
10 1010 1 1 0 0 0 0 1 0 0011 3
11 1011 1 1 0 0 1 0 1 0 0011 3
12 1100 0 1 0 0 0 0 1 0 0101 5
13 1101 1 0 0 1 1 1 1 0 1011 11
14 1110 0 1 0 0 0 0 1 0 0111 7
15 1111 0 1 0 0 1 1 1 0 0101 5
0110 0000

0111
0001 1110

0100

1000 1100
0101
1111
0011
1001

1011
1010 0010

1101

Tras deshacer el cambio de los valores repetidos en sucesión nos queda la siguiente tabla:

Inicial Q3 Q2 Q1 I3 I2 I1 I0 Final
Q0
0 0000 0 0 0 0 0 0 0 0 0000 0
1 0001 0 0 0 1 0 0 0 1 0001 1
2 0010 0 0 1 0 0 0 1 0 0010 2
3 0011 0 0 1 1 0 0 1 1 0011 3
4 0100 0 1 0 0 0 1 0 0 0100 4
5 0101 0 1 0 1 0 1 0 1 0101 5
6 0110 0 1 1 0 0 1 1 0 0110 6
7 0111 0 1 1 1 0 1 0 1 0101 5
8 1000 1 0 0 0 1 0 0 0 1000 8
9 1001 1 0 0 1 0 0 1 1 0011 3
10 1010 1 0 1 0 1 0 1 0 1010 10
11 1011 1 0 1 1 1 0 1 1 1011 11
12 1100 1 1 0 0 1 1 0 0 1100 12
13 1101 1 1 0 1 1 1 0 1 1101 13
14 1110 1 1 1 0 1 1 1 0 1110 14
15 1111 1 1 1 1 1 1 1 1 1111 15

Tablas de Karnaugh:

Q1 Q0 Q3 Q2

I3 00 01 11 10 I2 00 01 11 10

00 0 0 1 1 00 0 1 1 0

01 0 0 1 0 01 0 1 1 0

11 0 0 1 1 11 0 1 1 0

10 0 0 1 1 10 0 1 1 0

I1 00 01 11 10 I0 00 01 11 10

00 0 0 0 0 00 0 0 0 0

01 0 0 0 1 01 1 1 1 1

11 1 0 1 1 11 1 1 1 1

10 1 1 1 1 10 0 0 0 0

Ecuaciones:
I3 Q1*Q3 + Q3*Q2 + nQ0*Q3 I2 Q2

I1 Q1*nQ0 + Q1*Q3 + Q1*nQ2 + Q0*Q3*nQ2 I0 nQ1*Q0

CIRCUITO
Teniendo ya las ecuaciones del circuito arbitrario y las ecuaciones para deshacer el cambio,
queda el siguiente circuito:
PROGRAMA FINAL

// Modulo JK como los vistos en clase


module JK(output reg Q, output wire nQ, input wire J, input wire K, input
wire C);

initial Q = 0;

not(nQ, Q);

always @(negedge C)
case ({J, K})
2'b01: Q <= 0;
2'b10: Q <= 1;
2'b11: Q <= ~Q;
endcase

endmodule

module ContadorArbitrario (output wire [3:0] Q, output wire [3:0] I, input


wire C);

wire [3:0] nQ;


wire J0, K0, J1, K1, J2, K2, J3, K3;

// Generación de señales J y K
assign J0 = 1;
wire nQ2nQ3, Q1nQ3, Q0nQ1Q2, Q1nQ2;

and (nQ2nQ3, nQ[2], nQ[3]);


and (Q1nQ3, Q[1], nQ[3]);
or (K0, Q1nQ3, nQ2nQ3);

and (J1, Q[0], nQ[2]);


and (K1, Q[0], nQ[3]);

and (J2, nQ[1], nQ[3]);


and (K2, Q[0], nQ[1]);

and (Q0nQ1Q2, Q[0], nQ[1], Q[2]);


and (Q1nQ2, Q[1], nQ[2]);
or (J3, Q0nQ1Q2, Q1nQ2);

or (K3, nQ[0], Q[1]);

// Instanciar los módulos JK


JK JK0(Q[0], nQ[0], J0, K0, C);
JK JK1(Q[1], nQ[1], J1, K1, C);
JK JK2(Q[2], nQ[2], J2, K2, C);
JK JK3(Q[3], nQ[3], J3, K3, C);

// Asignaciones para el cambiador de secuencia


wire Q1nQ0, nQ1Q0, nQ3nQ2Q1, Q3nQ2, Q3nQ0, Q2Q1Q0, nQ2Q1;

// Asignaciones a I
assign I[0] = Q[2];

and (Q1nQ0, Q[1], nQ[0]);


and (nQ1Q0, nQ[1], Q[0]);
and (nQ3nQ2Q1, nQ[3], nQ[2], Q[1]);
or (I[2], Q1nQ0, nQ1Q0, nQ3nQ2Q1);

and (Q3nQ2, Q[3], nQ[2]);


and (Q3nQ0, Q[3], nQ[0]);
and (Q2Q1Q0, Q[2], Q[1], Q[0]);
or (I[1], Q3nQ2, Q3nQ0, Q2Q1Q0);

and (Q1nQ0, Q[1], nQ[0]);


and (nQ2Q1, nQ[2], Q[1]);
or (I[3], Q1nQ0, nQ2Q1);

endmodule

// Módulo de pruebas
module TestModulo;
reg C;
wire [3:0] Q;
wire [3:0] I;
ContadorArbitrario counter(Q, I, C);

always #5 C = ~C;

initial
begin
$dumpfile("[Link]");
$dumpvars;

// Inicializa la secuencia en el número 9 (Q = 1001)


force counter.JK0.Q = 1;
force counter.JK1.Q = 0;
force counter.JK2.Q = 0;
force counter.JK3.Q = 1;

C = 0;
$monitor($time, " Reloj (%b) Contador: Final |%d| |%b| Inicial
|%d||%b|", C, Q, Q, I, I);
#250;
$dumpoff;
$finish;
end
endmodule

RESULTADOS
Ejecutando el programa se pueden ver los siguientes resultados:

También podría gustarte