# 题目：随机点名系统

⚠️提示：（推荐从功能1开始逐步实现，每一个功能个人独立验证正确后备份一个可用版本，再增量开发下一功能，确保验收时可以明确判断完成了哪些功能，每个同学只有一次验收机会，验收后视为结束考试。）

在SystemVerilog中，你可以使用线性反馈移位寄存器（LFSR）来实现一个随机数生成器。以下是一个简单的LFSR实现，它使用了always块来在时钟边沿更新寄存器的值，并使用了异或运算来生成新的位。

```Verilog
module LFSR_random_generator(
    input wire clk,// 时钟模块1M
    input wire reset,
    output wire [7:0] random_out
    );

// LFSR的反馈多项式为 x^8 + x^6 + x^5 + x^4 + 1
    reg [7:0] lfsr;
    always_ff @(posedge clk or posedge reset) begin
        if (reset) begin
            // 当复位信号为高时，将LFSR重置
            lfsr <= 8'b1;
        end else begin
            // 计算新的LFSR值
            lfsr <= {lfsr[6:0], lfsr[7] ^ lfsr[5] ^ lfsr[4] ^ lfsr[3]};
        end
    end

// 将LFSR的值输出作为随机数
assign random_out = lfsr;
endmodule
```

✏️功能介绍：实现一个灵活的课堂随机点名系统。系统随机生成学号，支持学号抽取、应答检测、人数统计和重复点名提示功能。

## 功能1：随机学号显示

+ 使用LFSR生成8位随机序列。
+ 截取低3位作为学号（范围0-7），通过带译码器的数码管显示。
+ 学号以1秒频率随机刷新显示
+ 复位时数码管显示"0"；复位释放后恢复随机刷新

## 功能2：学号抽取

+ 添加1个微动开关用于抽取学号；
+ 检测到微动开关由按下到抬起动作，学号停止更新，当前显示的学号作为选中学号；
+ 复位后恢复动态随机显示；

## 功能3：应答与提示
+ 添加1个拨动开关作为应答开关（高电平=已应答）；
+ 学号抽取后，启动3秒计时（通过带译码器的数码管显示：0→1→2→3）；
+ 应答规则：在0-3秒内，应答开关为高电平：视为有效应答。超过3秒：即使应答开关为高电平，也视为无效应答；
+ 添加1个带译码器的数码管统计累计有效应答次数。仅当满足以下条件时计数器加1：学号被成功抽取并在3秒内完成有效应答；
+ 计数器范围0-9，超过9后循环回0重新计数。
+ 添加1个LED作为重复点名提示器，系统只记录前一名有效应答学生的学号；
+ 当系统动态显示时出现了该学号，LED自动点亮，其他学号则熄灭；
+ 复位时计时器清零，计数器不清零，保持累计数据，清空已保留学号记录，LED熄灭；

