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

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

§ dyn.v

module dyn
(
    input   wire        clock,      // 100 Mhz
    input   wire [3:0]  dot,
    input   wire [15:0] data,       // data[3:0] Младший ниббл data[15:12] Старший ниббл
    output  wire [7:0]  hex,
    output  wire [3:0]  en7
);

/*
 * cnt[17:16] указывают на номер зажженого сегмента
 * cnt[15:13] если 000 то индикатор показывается
 */

assign en7 = 1'b1 << cnt[17:16];

// Драйвер семисегментного светодиода
assign hex[7]   = ~dot[ cnt[17:16] ] || cnt[15:13];
assign hex[6:0] = cnt[15:13] ? 7'h7F : (
    //                6543210
    d4 == 4'b0000 ? 7'b1000000 : // 0
    d4 == 4'b0001 ? 7'b1111001 : // 1
    d4 == 4'b0010 ? 7'b0100100 : // 2
    d4 == 4'b0011 ? 7'b0110000 : // 3
    d4 == 4'b0100 ? 7'b0011001 : // 4
    d4 == 4'b0101 ? 7'b0010010 : // 5
    d4 == 4'b0110 ? 7'b0000010 : // 6
    d4 == 4'b0111 ? 7'b1111000 : // 7
    d4 == 4'b1000 ? 7'b0000000 : // 8
    d4 == 4'b1001 ? 7'b0010000 : // 9
    d4 == 4'b1010 ? 7'b0001000 : // A
    d4 == 4'b1011 ? 7'b0000011 : // B
    d4 == 4'b1100 ? 7'b1000110 : // C
    d4 == 4'b1101 ? 7'b0100001 : // D
    d4 == 4'b1110 ? 7'b0000110 : // E
                    7'b0001110); // F

wire [ 3:0] d4  = data >> (4*cnt[17:16]);
reg  [17:0] cnt = 1'b0;

always @(posedge clock) cnt <= cnt + 1;

endmodule
26 сен, 2021
© 2007-2022 Все лоскуты классно упакованы