/*本模块功能为数码管显示，把6 个数码管分成3 个2 位十进制数字。输入为三个两位数，输出为数码管的位选和数据段*/
module LED_tube (
    input wire clk,
    input wire rst_n,
	 input wire [19:0] num_to_display,
    
    output wire [5:0] SEL,
    output wire [7:0] DIG
);
wire [47:0] num_display;

// 分解num_to_display 为三个数字
reg [7:0] numin_1;
reg [7:0] numin_2;
reg [7:0] numin_3; 
always @(*) begin
    // 默认值，以防 num_to_display 超出范围或逻辑未完全覆盖
    numin_1 <= 8'd99;
    numin_2 <= 8'd99;
    numin_3 <= 8'd99;

    // 确保 num_to_display 在合理的范围内 (0 到 999999)
    // 如果你的 num_to_display 保证在此范围内，可以省略此检查
    if (num_to_display <= 32'd999999) begin
        // 提取最高两位 (例如，如果 num_to_display = 156267, (num_to_display / 10000) = 15)
        numin_3 <= num_to_display / 32'd10000;

        // 提取中间两位 (例如，(num_to_display % 10000) / 100 = 62)
        // 或者 (num_to_display / 100) % 100
        numin_2 <= (num_to_display % 32'd10000) / 32'd100;

        // 提取最低两位 (例如，num_to_display % 100 = 67)
        numin_1 <= num_to_display % 32'd100;
    end
    else begin
        // 可选：处理 num_to_display 超出范围的情况，比如显示错误代码或全零
        numin_1 <= 8'd99; // 例如显示 "999999" 作为错误指示
        numin_2 <= 8'd99;
        numin_3 <= 8'd99;
    end
end

num_tran num_tran_1(
    // input
    .clk(clk),
    .rst_n(rst_n),
    .numin_1(numin_1),
    .numin_2(numin_2),
    .numin_3(numin_3),
    // output
    .num_display(num_display)
);

tube_ctl tube_ctl_1(
    // input
    .clk(clk),
    .rst_n(rst_n),
    .num_display(num_display),
    // output
    .SEL(SEL),
    .DIG(DIG)
);

endmodule
