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));
endmoduleEditor is loading...
Leave a Comment