Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

sumador restador y multiplicador, Resúmenes de Circuitos Digitales

esta es otra practica de lab de digital

Tipo: Resúmenes

2024/2025

Subido el 26/06/2025

pedrito-martinez-1
pedrito-martinez-1 🇩🇴

6 documentos

1 / 6

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Adder subtractor
// sumador en cascada y lógica de resta con complemento a dos
module adder_subtractor_4bit(
input [3:0] a, // entrada A de 4 bits
input [3:0] b, // Palabra de entrada B de 4 bits
input op, // Señal de control: 0=SUMA, 1=RESTA
output [3:0] result,
output wire cout_final // // Acarreo de salida final del 5º bit
);
wire [3:0] b_modified;
wire [2:0] c_internal;
// Compuertas XOR como "inversores controlados".
// Si 'op' es 1, cada bit de 'b' se invierte (calculando NOT B). Si 'op' es 0, 'b' pasa sin cambios y asi
sucesivamente.
xor(b_modified[0], b[0], op);
xor(b_modified[1], b[1], op);
xor(b_modified[2], b[2], op);
xor(b_modified[3], b[3], op);
// (fa1-fa3): Los otros 3 sumadores. Se conectan en cascada.
// El acarreo de salida de uno es la entrada del siguiente, propagando el acarreo.
full_adder fa0 (.s(result[0]), .cout(c_internal[0]), .a(a[0]), .b(b_modified[0]), .cin(op));
full_adder fa1 (.s(result[1]), .cout(c_internal[1]), .a(a[1]), .b(b_modified[1]), .cin(c_internal[0]));
full_adder fa2 (.s(result[2]), .cout(c_internal[2]), .a(a[2]), .b(b_modified[2]), .cin(c_internal[1]));
full_adder fa3 (.s(result[3]), .cout(cout_final), .a(a[3]), .b(b_modified[3]), .cin(c_internal[2]));
endmodule
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga sumador restador y multiplicador y más Resúmenes en PDF de Circuitos Digitales solo en Docsity!

Adder subtractor

// sumador en cascada y lógica de resta con complemento a dos module adder_subtractor_4bit( input [3:0] a, // entrada A de 4 bits input [3:0] b, // Palabra de entrada B de 4 bits input op, // Señal de control: 0=SUMA, 1=RESTA output [3:0] result, output wire cout_final // // Acarreo de salida final del 5º bit ); wire [3:0] b_modified; wire [2:0] c_internal; // Compuertas XOR como "inversores controlados". // Si 'op' es 1, cada bit de 'b' se invierte (calculando NOT B). Si 'op' es 0, 'b' pasa sin cambios y asi sucesivamente. xor(b_modified[0], b[0], op); xor(b_modified[1], b[1], op); xor(b_modified[2], b[2], op); xor(b_modified[3], b[3], op); // (fa1-fa3): Los otros 3 sumadores. Se conectan en cascada. // El acarreo de salida de uno es la entrada del siguiente, propagando el acarreo. full_adder fa0 (.s(result[0]), .cout(c_internal[0]), .a(a[0]), .b(b_modified[0]), .cin(op)); full_adder fa1 (.s(result[1]), .cout(c_internal[1]), .a(a[1]), .b(b_modified[1]), .cin(c_internal[0])); full_adder fa2 (.s(result[2]), .cout(c_internal[2]), .a(a[2]), .b(b_modified[2]), .cin(c_internal[1])); full_adder fa3 (.s(result[3]), .cout(cout_final), .a(a[3]), .b(b_modified[3]), .cin(c_internal[2])); endmodule

Full_adder

module full_adder( input a, b, cin, // Define las 3 entradas de 1 bit. output s, cout // Define las 2 salidas de 1 bit. ); wire s_intermedio, c1, c2; half_adder HA1 (.s(s_intermedio), .cout(c1), .a(a), .b(b)); half_adder HA2 (.s(s), .cout(c2), .a(s_intermedio), .b(cin)); or (cout, c1, c2); endmodule module half_adder( input a, b, // Define las dos entradas de 1 bit. output s, cout // Define las dos salidas: la Suma (s) el Acarreo (cout) ); xor (s, a, b); la suma: S = A ⊕ B and (cout, a, b); endmodule half adder module half_adder( input a, b, // Define las dos entradas de 1 bit. output s, cout // Define las dos salidas: la Suma (s) el Acarreo (cout) ); xor (s, a, b); // la suma: S = A ⊕ B and (cout, a, b); endmodule

full_adder fa22(.s(s22), .cout(c22), .a(pp22), .b(s12), .cin(c21)); half_adder ha30(.s(s30), .cout(c30), .a(pp30), .b(s20)); full_adder fa31(.s(s31), .cout(c31), .a(pp31), .b(s21), .cin(c30)); full_adder fa32(.s(s32), .cout(c32), .a(pp32), .b(s22), .cin(c31)); full_adder fa_final(.s(p[6]), .cout(c_out_final), .a(pp33), .b(c22), .cin(c32)); // Conexión de Salidas para los 8 bits del producto. buf(p[0], pp00); buf(p[1], s10); buf(p[2], s20); buf(p[3], s30); buf(p[4], s31); buf(p[5], s32); buf(p[7], c_out_final); endmodule module top_module( input [3:0] A_in, // 4 interruptores para el número A input [3:0] B_in, // 4 interruptores para el número B input [1:0] OP_sel, // 2 interruptores para seleccionar la operación output reg [7:0] led_out // 8 LED para motras el resultado ); // Cables para conectar los resultados de los módulos internos. wire [7:0] mul_result; wire [3:0] add_sub_result; wire carry_out_bit; // Cable para recibir el acarreo final

// La instanciación ahora incluye la conexión al nuevo puerto '.cout_final' adder_subtractor_4bit adder_sub ( .a(A_in), .b(B_in), .op(OP_sel[0]), .result(add_sub_result), .cout_final(carry_out_bit) //: Conexión al nuevo puerto ); multiplier_4x4_structural multiplier ( .a(A_in), .b(B_in), .p(mul_result) ); // El multiplexor always @(*) begin // La sentencia 'case' revisa el valor de los interruptores de OP_sel case(OP_sel) //: Para la suma, se usa el bit de acarreo 2'b00: led_out = {3'b0, carry_out_bit, add_sub_result}; // Para la resta, se ignora el bit de acarreo 2'b01: led_out = {4'b0, add_sub_result}; //i OP_sel es 10 (MULT), la salida es el resultado de 8 bits del multiplicador. 2'b10: led_out = mul_result; default: led_out = 8'b0; endcase end endmodule