Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Todos os Códigos em Verilog
- // Somador Binário de 2 Bits
- module SomadorBinario2 (SW, LEDR);
- input [3:0] SW;
- output [2:0] LEDR;
- wire A1, A0, B1, B0, S1, S0, C, Ci;
- assign B0 = SW[0];
- assign B1 = SW[1];
- assign A0 = SW[2];
- assign A1 = SW[3];
- assign LEDR[0] = S0;
- assign LEDR[1] = S1;
- assign LEDR[2] = C;
- SomadorCompleto U1(S0, Ci, A0, B0, 0);
- SomadorCompleto U2(S1, C, A1, B1, Ci);
- Endmodule
- // Subtrator Binário de 2 Bits
- module SubtratorBinario2 (SW, LEDR);
- input [3:0] SW;
- output [2:0] LEDR;
- wire A1, A0, B1, B0, S1, S0, C, Ci;
- assign B0 = SW[0];
- assign B1 = SW[1];
- assign A0 = SW[2];
- assign A1 = SW[3];
- assign LEDR[0] = S0;
- assign LEDR[1] = S1;
- assign LEDR[2] = C;
- SubtratorCompleto U1(S0, Ci, A0, B0, 0);
- SubtratorCompleto U2(S1, C, A1, B1, Ci);
- endmodule
- // Módulo SomadorCompleto
- module SomadorCompleto (S, Co, A, B, Ci);
- input A, B, Ci;
- output S, Co;
- wire x, y, z;
- Porta_XOR U1(S, A, B, Ci);
- Porta_AND U2(x, A, B, 1);
- Porta_AND U3(y, A, Ci, 1);
- Porta_AND U4(z, B, Ci, 1);
- Porta_OR U5(Co, x, y, z);
- endmodule
- // Módulo SubtratorCompleto
- module SubtratorCompleto (S, Co, A, B, Ci);
- input A, B, Ci;
- output S, Co;
- wire x, y, z;
- Porta_XOR U1(S, A, B, Ci);
- Porta_AND U2(x, ~A, B, 1);
- Porta_AND U3(y, ~A, Ci, 1);
- Porta_AND U4(z, B, Ci, 1);
- Porta_OR U5(Co, x, y, z);
- endmodule
- // Módulo Porta_AND
- module Porta_AND(S, A, B, C);
- input A, B, C;
- output S;
- assign S = A&B&C;
- endmodule
- // Módulo Porta_OR
- module Porta_OR(S, A, B, C);
- input A, B, C;
- output S;
- assign S = A | B | C;
- endmodule
- // Módulo Porta_XOR
- module Porta_XOR(S, A, B, C);
- input A, B, C;
- output S;
- assign S = A^B^C;
- endmodule
- // Módulo Somador/Subtrator de 2 bits
- module Soma_Sub (SW, LEDR);
- input [4:0] SW;
- output [2:0] LEDR;
- wire A1, A0, B1, B0, S1, S0, C, m, x, y, z, t, u, v;
- assign B0 = SW[0];
- assign B1 = SW[1];
- assign A0 = SW[2];
- assign A1 = SW[3];
- assign m = SW[4]
- assign LEDR[0] = S0;
- assign LEDR[1] = S1;
- assign LEDR[2] = C;
- // Determinação de S0
- Porta_XOR U1(S0, A0, B0, 0);
- // Determinação de S1
- Porta_XOR U2(x, A0, m, 0);
- Porta_XOR U3(y, A1, m, 0);
- Porta_AND U4(z, x, B0, 1);
- Porta_XOR U5(S1, A1, B1, z);
- // Determinação de C
- Porta_AND U6(t, y, B1, 1);
- Porta_AND U7(u, x, y, B0);
- Porta_AND U8(v, x, B1, B0);
- Porta_OR U9(C, t, u, v);
- endmodule
- //Módulo do Flip-Flop D
- module FlipFlopD(Q, D, CK, CLR);
- input D, CK, CLR;
- output Q;
- reg Q;
- always @(negedge CK or negedge CLR)
- begin
- if(!CLR) Q = 0;
- else Q = D;
- end
- endmodule
- //Módulo do Flip-Flop JK
- module FlipFlopJK(Q, J, K, CK, CLR);
- input J, K, CK, CLR;
- output Q;
- reg Q;
- always @(negedge CK or negedge CLR)
- begin
- if(!CLR) Q = 0;
- else
- begin
- case ({J, K})
- 0: Q = Q;
- 1: Q = 0;
- 2: Q = 1;
- 3: Q = ~Q;
- endcase
- end
- end
- endmodule
- //Módulo da porta NAND
- module porta_NAND(S, A, B);
- input A, B;
- output S;
- assign S = ~(A&B);
- endmodule
- // Registrador entrada paralela / saída serial de 4 bits
- wire Q, E, CK, CLR;
- wire[3:0] I, x;
- wire [2:0] y;
- assignI [3:0] = SW [3:0]
- assignE = SW[4];
- assign CLR = SW[5];
- assign CK = CLOCK_27;
- porta_NAND U0( x[3], I[3], E);
- porta_NAND U1( x[2], I[2], E);
- porta_NAND U2( x[1], I[1], E);
- porta_NAND U3( x[0], I[0], E);
- FlipFlopD_PR U4( y[2], 0, CK, CLR, x[3] );
- FlipFlopD_PR U5( y[1], y[2], CK, CLR, x[2] );
- FlipFlopD_PR U6( y[0], y[1], CK, CLR, x[1] );
- FlipFlopD_PRU7(Q, y[0], CK, CLR, x[0] );
- assign LEDR[0] = Q;
- endmodule
- //Módulo do Flip-Flop D com entrada PR
- module FlipFlopD_PR(Q, D, CK, CLR, PR);
- input D, CK, CLR, PR;
- output Q;
- reg Q;
- always @(negedge CK or negedge CLR or negedge PR)
- begin
- if(!CLR) Q = 0;
- else if(!PR) Q = 1;
- else Q = D;
- end
- endmodule
- // Registrador de deslocamento direita/esquerda de 4 bits
- wire [3:0] q, x;
- wire [1:0] y;
- wire D, CK, CLR;
- assign D = SW [0];
- assign CLR = SW[1];
- assign y[1:0] = SW[3:2];
- assign CK = KEY[0];
- MUX2x1 U3( x[3], D, q[2], y[1]);
- FlipFlopD W3( q[3], x[3], CK, CLR);
- MUX2x1 U2( x[2], D, q[1], q[3]);
- FlipFlopD W2( q[2], x[2], CK, CLR);
- MUX2x1 U1( x[1], D, q[0], q[2]);
- FlipFlopD W1( q[1], x[1], CK, CLR);
- MUX2x1 U0( x[0], D, y[0], q[1]);
- FlipFlopD W0( q[0], x[0], CK, CLR);
- assign LEDR [3:0] = q[3:0];
- endmodule
- //Módulo do MUX 2x1
- module MUX2x1(S, D, I0, I1);
- input I0, I1, D;
- output S;
- reg S;
- always @( I0 or I1 or D)
- begin
- case(D)
- 0: S = I0;
- 1: S = I1;
- endcase
- end
- endmodule
- // Contador gray síncrono modulo 6 decrescente
- wire CK, CLR;
- wire [2:0] A, J, K;
- assign CLR = SW[0];
- assign CK = KEY[0];
- assign K[2] = ~A[0];
- assign J[1] = ~A[0];
- assign J[0] = ~A[2];
- porta_AND U1(J[2], ~A[1], ~A[0]);
- porta_AND U2(K[1], ~A[2], A[0]);
- porta_OR U3(K[0], ~A[1], A[2]);
- FlipFlop_JK W2(A[2], CK, CLR, J[2], K[2]);
- FlipFlop_JK W1(A[1], CK, CLR, J[1], K[1]);
- FlipFlop_JK W0(A[0], CK, CLR, J[0], K[0]);
- assign LEDR[2:0] = A[2:0];
- endmodule
- // Contador Johnson modificado de 4 bits
- wire CK, CLR, x, y;
- wire [3:0] A, J, K;
- assign CLR = SW[0];
- assign CK = KEY[0];
- assign J[2] = A[3];
- assign K[2] = ~A[3];
- assign J[1] = A[2];
- assign K[1] = ~A[2];
- assign J[0] = A[1];
- assign K[0] = ~A[1];
- porta_OR U1(x, ~A[2], ~A[1]);
- porta_AND U2(J[3], x, ~A[0]);
- porta_OR U3(y, A[2], A[1]);
- porta_AND U4(K[3], y, A[0]);
- FlipFlop_JK W3(A[3], CK, CLR, J[3], K[3]);
- FlipFlop_JK W2(A[2], CK, CLR, J[2], K[2]);
- FlipFlop_JK W1(A[1], CK, CLR, J[1], K[1]);
- FlipFlop_JK W0(A[0], CK, CLR, J[0], K[0]);
- assign LEDR[3:0] = A[3:0];
- endmodule
- //Contador síncrono em anel 4 de bits
- wire CK, CLR, S;
- wire [3:0]Y, D;
- wire [0:3]Q;
- assign Y[3:0] = SW[3:0];
- assign S = SW[4];
- assign CLR = SW[5];
- assign CK = KEY[0];
- mux21 U0(Y[0], Q[3], S, D[0]);
- mux21 U1(Y[1], Q[0], S, D[1]);
- mux21 U2(Y[2], Q[1], S, D[2]);
- mux21 U3(Y[3], Q[2], S, D[3]);
- FlipFlop_D W0(Q[0], CK, CLR, D[0]);
- FlipFlop_D W1(Q[1], CK, CLR, D[1]);
- FlipFlop_D W2(Q[2], CK, CLR, D[2]);
- FlipFlop_D W3(Q[3], CK, CLR, D[3]);
- assign LEDR[3:0] = Q[0:3];
- endmodule
- // Contador assíncrono módulo 8 crescente/decrescente
- wire CK, CLR, C;
- wire [2:0]Q;
- assign C = SW[0];
- assign CLR = SW[1];
- assign CK = KEY[0];
- mux21 U0(x, Q[0], ~Q[0], C);
- mux21 U1(y, Q[1], ~Q[1], C);
- FlipFlop_T W0(Q[0], CK, CLR, 1);
- FlipFlop_T W1(Q[1], x, CLR, 1);
- FlipFlop_T W2(Q[2], y, CLR, 1);
- assign LEDR[2:0] = Q[2:0];
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement