- •Модуль driver7seg — драйвер для семисегментного индикатора
- •Модуль driverascii — драйвер для вывода сигналов в формате ascii
- •Модуль mux_2_1 — мультиплексор 2-в-1
- •Модуль mux_8_1 — мультиплексор 8-в-1
- •Модуль bus_mux_8_1 — шинный мультиплексор 8-в-1
- •Модуль dmx_1_2 — демультиплексор 1-в-2
- •Модуль dmx_1_8 — демультиплексор 1-в-8
- •Модуль bus_dmx_1_8 — шинный демультиплексор 1-в-8
- •Модуль dc_3_8 — дешифратор 3-в-8
- •Модуль cd_8_3 — шифратор 8-в-3
- •Модуль add1 — одноразрядный полный сумматор
- •Модуль add4 — четырехразрядный сумматор
Модуль dc_3_8 — дешифратор 3-в-8
module dc_3_8(
input[2:0] addr,
output reg [7:0] mng);
always @(*) case (addr)
3'd0: mng = 8'b00000001;
3'd1: mng = 8'b00000010;
3'd2: mng = 8'b00000100;
3'd3: mng = 8'b00001000;
3'd4: mng = 8'b00010000;
3'd5: mng = 8'b00100000;
3'd6: mng = 8'b01000000;
3'd7: mng = 8'b10000000;
default: mng = 8'b00000000;
endcase
endmodule
Модуль cd_8_3 — шифратор 8-в-3
module cd_8_3 (
input [2:0] mng,
output reg [7:0] addr
);
always @(*) case(mng)
8'b00000001: addr = 3'b000;
8'b00000010: addr = 3'b001;
8'b00000100: addr = 3'b010;
8'b00001000: addr = 3'b011;
8'b00010000: addr = 3'b100;
8'b00100000: addr = 3'b101;
8'b01000000: addr = 3'b110;
8'b10000000: addr = 3'b111;
default: addr = 3'bzzz;
endcase
endmodule
Модуль add1 — одноразрядный полный сумматор
module add1 (
input a, b, c,
output s, co
);
assign s = a^b^c;
assign co = (a & b) | (a & c) | (b & c);
endmodule
Модуль add4 — четырехразрядный сумматор
module add4 (
input [3:0]
a, b,
input c,
output [3:0] s,
output co
);
wire [2:0] cw;
add1 inst0 (
.a(a[0]),
.b(b[0]),
.c(c),
.s(s[0]),
.co(cw[0])
);
add1 inst1 (
.a(a[1]),
.b(b[1]),
.c(cw[0]),
.s(s[1]),
.co(cw[1])
); add1 inst2 (
.a(a[2]),
.b(b[2]),
.c(cw[1]),
.s(s[2]),
.co(cw[2])
); add1 inst3 (
.a(a[3]),
.b(b[3]),
.c(cw[2]),
.s(s[3]),
.co(co)
);endmodule
Модуль wrapper_add4 — четырехразрядный сумматор c драйвером вывода
module wrapper_add4(
input [3:0] A, B,
output [6:0] HEXO,
output CO
);
wire [3:0] s;
add4 add4_inst (
.a(A),
.b(B),
.s(s),
.co(CO)
);
driver7seg driver7seg_inst (
.bin(s),
.hex(HEXO)
);
Endmodule
* Вывод указанных чисел
<14>
<8>
<21>
Исполнители
Заключение
В ходе выполнения работы мы изучили принцип работы семисегментного индикатора, мультиплексора, демультиплексора, шифратора и дешифратора, сумматора, а также реализовали их на языке Verilog.
