Untitled

Anonymous
verilog
03/17/2026 3:12 PM
7.1 KB
14
Indexable
z1 

module decoder_hex_10 (
    input  [3:0] x,
    output reg [0:6] h
);
    always @(*) begin
        case (x)
            4'b0000: h = 7'b0000001; // 0
            4'b0001: h = 7'b1001111; // 1
            4'b0010: h = 7'b0010010; // 2
            4'b0011: h = 7'b0000110; // 3
            4'b0100: h = 7'b1001100; // 4
            4'b0101: h = 7'b0100100; // 5
            4'b0110: h = 7'b0100000; // 6
            4'b0111: h = 7'b0001111; // 7
            4'b1000: h = 7'b0000000; // 8
            4'b1001: h = 7'b0000100; // 9
            default: h = 7'b1111111; // pusty (blad)
        endcase
    end
endmodule

module bcd_display (
    input  [7:0] SW,
    output [9:0] LEDR,
    output [0:6] HEX0,
    output [0:6] HEX1
);
    wire [3:0] a0, a1;

    assign a0 = SW[3:0];   // jednosci
    assign a1 = SW[7:4];   // dziesiatki

    // wyswietlanie SW na diodach
    assign LEDR[7:0] = SW[7:0];

    // detekcja bledow: kod > 9 jest nieprawidlowy w BCD
    assign LEDR[8] = (a0 > 4'd9) ? 1'b1 : 1'b0;
    assign LEDR[9] = (a1 > 4'd9) ? 1'b1 : 1'b0;

    // dekodery 7-segmentowe
    decoder_hex_10 dec0 (.x(a0), .h(HEX0));
    decoder_hex_10 dec1 (.x(a1), .h(HEX1));

endmodule

z2
module decoder_hex_16 (
    input  [3:0] x,
    output reg [0:6] h
);
    always @(*) begin
        case (x)
            4'h0: h = 7'b0000001; // 0
            4'h1: h = 7'b1001111; // 1
            4'h2: h = 7'b0010010; // 2
            4'h3: h = 7'b0000110; // 3
            4'h4: h = 7'b1001100; // 4
            4'h5: h = 7'b0100100; // 5
            4'h6: h = 7'b0100000; // 6
            4'h7: h = 7'b0001111; // 7
            4'h8: h = 7'b0000000; // 8
            4'h9: h = 7'b0000100; // 9
            4'hA: h = 7'b0001000; // A
            4'hB: h = 7'b1100000; // b
            4'hC: h = 7'b0110001; // C
            4'hD: h = 7'b1000010; // d
            4'hE: h = 7'b0110000; // E
            4'hF: h = 7'b0111000; // F
        endcase
    end
endmodule

module hex_display (
    input  [7:0] SW,
    output [7:0] LEDR,
    output [0:6] HEX0,
    output [0:6] HEX1
);
    assign LEDR = SW;

    decoder_hex_16 dec0 (.x(SW[3:0]), .h(HEX0));
    decoder_hex_16 dec1 (.x(SW[7:4]), .h(HEX1));

endmodule

z3 
module binary_BCD_4_bits (
    input  [3:0] V,
    output [0:6] HEX1,
    output [0:6] HEX0
);
    wire z;              // wynik komparatora: 1 gdy V > 9
    wire [3:0] A;        // V - 10 (Circuit A)
    wire [3:0] d0_val;   // wartosc cyfry jednosci

    // Komparator: czy V > 9?
    assign z = (V > 4'd9) ? 1'b1 : 1'b0;

    // Circuit A: odejmij 10
    assign A = V - 4'd10;

    // Multiplekser: jesli V > 9, bierz A (V-10), inaczej bierz V
    assign d0_val = z ? A : V;

    // Dekoder jednosci (0-9)
    decoder_hex_10 dec0 (.x(d0_val), .h(HEX0));

    // Dekoder dziesiatek: jesli z=1, wyswietl "1", jesli z=0, wyswietl "0"
    decoder_hex_10 dec1 (.x({3'b000, z}), .h(HEX1));

endmodule

z4
module adder_BCD_2_digits (
    input  [8:0] SW,
    output [9:0] LEDR,
    output [0:6] HEX0,
    output [0:6] HEX1,
    output [0:6] HEX3,
    output [0:6] HEX5
);
    wire [3:0] X, Y;
    wire cin;
    wire [4:0] T0;       // suma tymczasowa (5 bitow, bo max 9+9+1=19)
    wire [3:0] S0_val;   // cyfra jednosci wyniku
    wire S1_val;          // cyfra dziesiatek wyniku (0 lub 1)
    wire error_flag;

    assign X = SW[7:4];
    assign Y = SW[3:0];
    assign cin = SW[8];

    // wyswietlanie SW na diodach
    assign LEDR[7:0] = SW[7:0];

    // detekcja bledu: X lub Y > 9
    assign error_flag = (X > 4'd9) || (Y > 4'd9);
    assign LEDR[9] = error_flag;
    assign LEDR[8] = 1'b0;

    // suma tymczasowa
    assign T0 = X + Y + cin;

    // korekta BCD: jesli T0 > 9, odejmij 10
    assign S0_val = (T0 > 5'd9) ? (T0 - 5'd10) : T0[3:0];
    assign S1_val = (T0 > 5'd9) ? 1'b1 : 1'b0;

    // wyswietlacze wyniku
    decoder_hex_10 dec_s0 (.x(S0_val), .h(HEX0));
    decoder_hex_10 dec_s1 (.x({3'b000, S1_val}), .h(HEX1));

    // wyswietlacze wejsc
    decoder_hex_10 dec_x (.x(X), .h(HEX5));
    decoder_hex_10 dec_y (.x(Y), .h(HEX3));


endmodule

z5
module adder_BCD_2_digits_b (
    input  [8:0] SW,
    output [9:0] LEDR,
    output [0:6] HEX0,
    output [0:6] HEX1,
    output [0:6] HEX3,
    output [0:6] HEX5
);
    wire [3:0] A, B;
    wire c0;

    assign A = SW[7:4];
    assign B = SW[3:0];
    assign c0 = SW[8];

    assign LEDR[7:0] = SW[7:0];
    assign LEDR[9] = (A > 4'd9) || (B > 4'd9);
    assign LEDR[8] = 1'b0;

    reg [4:0] T0;
    reg [3:0] Z0;
    reg c1;
    reg [3:0] S0;
    reg [3:0] S1;

    always @(*) begin
        // linia 1: T0 = A + B + c0
        T0 = A + B + c0;

        // linie 2-8: sprawdz czy T0 > 9
        if (T0 > 5'd9) begin
            Z0 = 4'd10;    // linia 3
            c1 = 1'b1;     // linia 4
        end else begin
            Z0 = 4'd0;     // linia 6
            c1 = 1'b0;     // linia 7
        end

        // linia 9: S0 = T0 - Z0
        S0 = T0 - Z0;

        // linia 10: S1 = c1
        S1 = {3'b000, c1};
    end

    // wyswietlacze
    decoder_hex_10 dec_s0 (.x(S0), .h(HEX0));
    decoder_hex_10 dec_s1 (.x(S1), .h(HEX1));
    decoder_hex_10 dec_x  (.x(A),  .h(HEX5));
    decoder_hex_10 dec_y  (.x(B),  .h(HEX3));

endmodule
Editor is loading...
Leave a Comment