§ Назначения пинов

  • clock Тактовый генератор до 100 Мгц
  • data[ 3:0] Самый младший ниббл, шестнадцатеричный
  • data[ 7:4] Второй ниббл
  • data[ 11:8] Третий ниббл
  • data[15:12] Старший
  • dot Точки
  • hex Восьмисегментный индикатор (+точка)
  • en7 Биты активации индикаторов (от младшего к старшему)

§ dyn.v

1module dyn
2(
3    input   wire        clock,      // 100 Mhz
4    input   wire [3:0]  dot,
5    input   wire [15:0] data,       // data[3:0] Младший ниббл data[15:12] Старший ниббл
6    output  wire [7:0]  hex,
7    output  wire [3:0]  en7
8);
9
10/*
11 * cnt[17:16] указывают на номер зажженого сегмента
12 * cnt[15:13] если 000 то индикатор показывается
13 */
14
15assign en7 = 1'b1 << cnt[17:16];
16
17// Драйвер семисегментного светодиода
18assign hex[7]   = ~dot[ cnt[17:16] ] || cnt[15:13];
19assign hex[6:0] = cnt[15:13] ? 7'h7F : (
20    //                6543210
21    d4 == 4'b0000 ? 7'b1000000 : // 0
22    d4 == 4'b0001 ? 7'b1111001 : // 1
23    d4 == 4'b0010 ? 7'b0100100 : // 2
24    d4 == 4'b0011 ? 7'b0110000 : // 3
25    d4 == 4'b0100 ? 7'b0011001 : // 4
26    d4 == 4'b0101 ? 7'b0010010 : // 5
27    d4 == 4'b0110 ? 7'b0000010 : // 6
28    d4 == 4'b0111 ? 7'b1111000 : // 7
29    d4 == 4'b1000 ? 7'b0000000 : // 8
30    d4 == 4'b1001 ? 7'b0010000 : // 9
31    d4 == 4'b1010 ? 7'b0001000 : // A
32    d4 == 4'b1011 ? 7'b0000011 : // B
33    d4 == 4'b1100 ? 7'b1000110 : // C
34    d4 == 4'b1101 ? 7'b0100001 : // D
35    d4 == 4'b1110 ? 7'b0000110 : // E
36                    7'b0001110); // F
37
38wire [ 3:0] d4  = data >> (4*cnt[17:16]);
39reg  [17:0] cnt = 1'b0;
40
41always @(posedge clock) cnt <= cnt + 1;
42
43endmodule