2023 FPGA国赛能力测评题是面向全国FPGA设计爱好者的竞赛题目,旨在评估参赛者在硬件描述语言、逻辑电路设计及系统集成等方面的综合技能水平。
### 2023FPGA国赛能力测试题解析
#### 一、电梯控制电路设计
在2023年的全国FPGA大赛中,参赛者需要完成的一项任务是设计一个电梯控制电路。该电路的目标是实现一个能够根据用户指令自动运行的电梯系统,同时具备一定的安全功能。
**设计要求概述:**
- **楼层总数**:大楼共有40层。
- **初始楼层**:电梯初始停靠在第1层。
- **楼层移动规则**:当目标楼层与当前所在楼层不一致时,电梯会按照指定方向移动。
- **特殊楼层**:2至9层被标记为未开放区域,但在紧急情况下可以通过特定操作到达这些楼层。
- **载客限制**:电梯的最大载客量为13人,最大承重为1000kg。当人数或重量超过规定值时会触发警报。
**输入信号说明:**
- **目标楼层**(`H[7:0]`):表示用户希望前往的楼层编号。
- **紧急按键**(`key`):在紧急情况下使用,用于解锁未开放楼层。
- **当前人数**(`num[3:0]`):表示当前电梯内的人数。
- **乘客重量**(`weight[9:0]`):表示当前电梯内的总重量。
**输出信号说明:**
- **当前楼层**(`N[7:0]`):表示电梯当前所在的楼层。
- **警报信号**(`alert`):在人数或重量超过规定值时触发。
**程序结构示例:**
```verilog
module elevator#(parameter floor = 40)(
input clk, rst_n,
input key, [7:0]H, [3:0]num, [9:0]weight,
output reg [7:0]N, output reg alert);
```
**测试代码示例:**
```verilog
initial begin
clk = 0;
rst_n = 0;
#15 rst_n = 1;
forever #5 clk = ~clk;
end
initial begin
key = 0;
H = 0;
num = 0;
weight = 0;
#20 H = 30;
num = 1;
weight = 50;
#400 H = 8;
#10 key = 1;
@(negedge clk); key = 0;
#300 H = 12;
num = 14;
#20 num = 10;
weight = 1001;
#50 weight = 900;
end
```
#### 二、非重叠序列检测设计
本部分的任务是设计一个串行序列检测器,该检测器专门用于识别特定的六位比特序列“011010”。
**设计要求概述:**
- **输入数据**:以每六个比特为一组进行处理。
- **输出信号**:如果检测到目标序列,则在最后一个比特之后的时钟周期将`match`信号置高;否则,设置`not_match`信号为高电平。
- **特殊处理**:一旦第一个比特不符合预期,则后续五个比特不再被检测,直到下一个六位组。
**输入信号说明:**
- **时钟**(`clk`):用于同步数据输入的时钟信号。
- **复位**(`rst_n`):初始化状态机使用的复位信号。
- **数据输入**(`data`):串行数据,每六个比特构成一组。
**输出信号说明:**
- **匹配指示**(`match`):当检测到目标序列时置高电平。
- **不匹配指示**(`not_match`):未找到目标序列时置高电平。
**程序结构示例:**
```verilog
module sequence_detect(
input clk,
input rst_n,
input data,
output reg match,
output reg not_match);
```
**测试代码示例:**
用于验证`sequence_detect`模块的正确性,通过一系列预设的数据流进行调用。
```verilog
initial begin
clk=0;
rst_n=0;
D_in = 0;
data = 24b011100_011010_011110_011101;
#5;
rst_n= 1;
end
always # 10 clk <= ~clk;
always @(posedge clk) begin
D_in <= data[23];
data <= {data[22:0], data[23]};
end
```
以上两个案例展示了如何利用Verilog HDL语言设计具体的数字逻辑电路,同时也体现了