Gowin Vol.3 第1部第3章 リスト10

module top (
input wire clk, // 27MHzクロック入力
output wire [6:0] segment_output, // LED(A~G)への出力
output wire dot_output, // LED(DP)への出力
output wire [5:0] digit_output // 表示する桁の指定
);
localparam CLK_FREQ = 27_000_000;
localparam DIGIT_FREQ_HZ = 1_000;

// 6桁の10進数カウントアップモジュール
// 1ミリ秒に一度カウントアップする
wire [3:0] decimal_number[6];
decimal_counter #(
.CLK_FREQ (CLK_FREQ)
) decimal_counter_i (
.counter_output (decimal_number),
.*
);

// 表示する桁を指定するモジュール
// 一定の間隔で次の桁へ移動する
wire [3:0] digit_count;
digit_driver #(
.CLK_FREQ (CLK_FREQ),
.DIGIT_FREQ_HZ (DIGIT_FREQ_HZ)
) digit_driver_i (
.*
);

// decimal_numberの値をsegment_outputをへ変換するモジュール
segment_driver segment_driver_i (
.decimal_number(decimal_number[digit_count]),
.*
);

// 4桁目の7セグにドットを表示し,小数点を表すためのロジック
assign dot_output = (digit_count == 4'd3)? 1'b1: 1'b0;

endmodule