数字系统设计实验报告——水位监测
设计课题的任务要求
模拟一个水位监测系统,通过控制点阵、数码管等显示水位信息,当水位超出范围时进行报警,具体情况和系统功能要求如下:
基本要求
-
通过
SW4~SW0的值来确定当前水位,其中SW4~SW1表示整数位,SW0表示小数位,0~6米(含)为安全水位,6~12米(含)为警惕水位,12米以上为危险水位。 -
用数码管
DISP2~DISP0显示水位数值,显示到小数点后1位。 -
用点阵显示水位变化示意图:当水位低于等于
6米时,点阵最下面2行显示全绿;当水位在“警惕水位”时,点阵显示黄色,6~8米(含)时,亮下面3行,8~10米(含)时,亮下面4行,10~12米(含)时,亮下面5行;当水位在“危险水位”,点阵显示红色,12~13米(含)时,亮下面6行,13~14米(含)时,亮下面7行,14米以上时,点阵全亮,且以2Hz的频率闪烁。 -
水位处于“警惕水位”或“危险水位”时,蜂鸣器发出报警声,报警声音的音调随水位增高而增高。
-
水位处于“危险水位”时,按
BTN0启动点阵动画模拟水泵抽水,抽水动画自行设计,直至水位降至“安全水位”,点阵恢复显示水位变化。 -
水泵抽水速度“慢”、“中”、“快”三档可调,在数码管
DISP7上分别显示1、2、3表示三种速度,通过BTN7按键进行循环切换,不同速度时抽水动画的变化速度也同步进行变化。
提高要求
-
水位值可通过
4x4键盘输入。 -
自拟其他功能。
模块电路要求
在8x8双色点阵上设计并实现水泵抽水的动画显示,动画图案自行设计,要求完成仿真并在实验板上下载显示。
系统设计
设计思路
以功能要求作为模块区分的参考,同时针对开发板的实际硬件区分和功能实现,我对整个程序进行了以下的模块拆分:
| water_detection | key_input | kv_map | beep | div_clk |
|---|---|---|---|---|
| 主模块 | 按键输入模块 | 按键功能映射模块 | 蜂鸣器模块 | 分频器模块 |
| debounce | digi_screen | controller | led_disp |
|---|---|---|---|
| 按键消抖模块 | HEX到LED点阵译码模块 | LED点阵控制模块 | 数码管控制模块 |
| segment7 | select_disp | led_matrix |
|---|---|---|
| 数码管译码模块(包含小数点) | 数码管选位信号模块 | LED点阵动画显示模块 |
总体框图

分块设计
-
water_detection:顶层模块,负责将所有模块实例化。 -
key_input:IO,读取按键输入、消抖,并转成对应的脉冲信号 -
kv_map:Key-Value模块,将key_input的输入转成对应的指令进行控制,使输入的拓展性大大增加。 -
beep:IO,根据传入的状态调节音调。 -
div_clk:基本模块,可以对系统时钟进行分频,支持修改参数。 -
debounce:基本模块,用于单个按钮的消抖。 -
digi_screen:基本模块,用于将HEX转成LED矩阵数据。 -
controller:控制器,可以将输入的8421BCD码数字转成二进制数并比较,得到当前的水位状态。 -
led_disp:IO,负责数码管的相关显示。 -
segment7:译码器,实现8421BCD码到人类可读数码管的译码。 -
select_disp:脉冲分配器,用于生成数码管的选位信号。 -
led_matrix:IO,负责LED点阵的相关显示。
Verilog HDL 代码
water_detection.v
|
|
key_input.v
|
|
kv_map.v
|
|
div_clk.v
|
|
select_disp.v
|
|
segment7.v
|
|
led_disp.v
|
|
digi_screen.v
|
|
led_matrix.v
|
|
controller.v
|
|
beep.v
|
|
debounce.v
|
|
仿真波形及波形分析
beep.v 仿真波形

不难看出,随着状态码的变化,beep_out的频率也随之发生变化,beep_en起到了使能的作用。
key_input.v仿真波形

当连续60次扫描到按键按下时,就会产生一个脉冲信号。
led_matrix.v 仿真波形

在前期,状态控制码较小时,此时绿灯红灯亮灭情况如上,黄灯即是红灯和绿灯均亮的时刻,注意到在黄灯及以上状态时beeper使能信号正常工作。

在水位超出警戒线后,按下btn7则屏幕开始显示抽水动画。

在指定的肉眼可分辨频率下进行图像的切换。
总体仿真因时间过长在此不再进行,具体情况可以烧录进开发版后自行测试。
功能说明及资源利用情况
实现的功能
-
通过
SW4~SW0的值来确定当前水位,其中SW4~SW1表示整数位,SW0表示小数位,0~6米(含)为安全水位,6~12米(含)为警惕水位,12米以上为危险水位。 -
通过
4x4键盘输入水位值。 -
用点阵显示水位变化示意图:当水位低于等于
6米时,点阵最下面2行显示全绿;当水位在“警惕水位”时,点阵显示黄色,6~8米(含)时,亮下面3行,8~10米(含)时,亮下面4行,10~12米(含)时,亮下面5行;当水位在“危险水位”,点阵显示红色,12~13米(含)时,亮下面6行,13~14米(含)时,亮下面7行,14米以上时,点阵全亮,且以2Hz的频率闪烁。 -
水位处于“警惕水位”或“危险水位”时,蜂鸣器发出报警声,报警声音的音调随水位增高而增高。
-
水位处于“危险水位”时,按
BTN0启动点阵动画模拟水泵抽水,抽水动画自行设计,直至水位降至“安全水位”,点阵恢复显示水位变化。 -
水泵抽水速度“慢”、“中”、“快”三档可调,在数码管
DISP7上分别显示1、2、3表示三种速度,通过BTN7按键进行循环切换,不同速度时抽水动画的变化速度也同步进行变化。
资源利用情况
编译结果

可以看到,源代码顺利通过编译。
资源利用情况

可以看到,总共有504个逻辑元件。
故障及问题分析
1. 按键输入故障
- 问题描述:按键可能因为硬件损坏或软件消抖处理不当导致输入错误。
- 分析:检查
key_input.v和debounce.v模块,确保消抖逻辑正确实现,以及硬件按键是否物理损坏。
2. 数码管显示错误
- 问题描述:数码管可能因为译码错误或选位信号不正确而显示错误。
- 分析:检查
segment7.v和select_disp.v模块,确保数码管译码和选位信号生成正确。
4. 水位监测逻辑错误
- 问题描述:水位监测逻辑可能因为状态判断错误导致报警或水泵控制不当。
- 分析:检查
controller.v模块,确保水位状态判断和水泵控制逻辑正确。
7. 资源利用不足或浪费
- 问题描述:资源利用不足可能导致功能无法实现,资源浪费可能导致成本增加。
- 分析:根据资源利用情况,优化设计,减少不必要的资源占用。
总结和结论
本设计成功实现了一个水位监测系统,通过控制点阵、数码管等显示水位信息,并在水位超出范围时进行报警。系统功能包括水位监测、水泵抽水模拟、报警声控制等,满足了基本和提高要求。
通过仿真波形和资源利用情况分析,系统各模块功能正常,资源利用合理。仿真波形验证了各模块的正确性,资源利用情况显示系统在资源限制内实现了所需功能。
后续工作包括在实际硬件上测试系统,优化设计以减少资源占用,以及根据测试结果进行故障排查和系统优化。通过这些工作,可以进一步提高系统的稳定性和可靠性。
最后修改于 2024-12-21