



Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Los mejores documentos en venta realizados por estudiantes que han terminado sus estudios
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Descubre las mejores universidades de tu país según los usuarios de Docsity
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
esta es otra practica de lab de digital
Tipo: Resúmenes
1 / 6
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
// 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
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