数字系统设计实验报告——水位监测
设计课题的任务要求
模拟一个水位监测系统,通过控制点阵、数码管等显示水位信息,当水位超出范围时进行报警,具体情况和系统功能要求如下:
基本要求
-
通过
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. 资源利用不足或浪费
- 问题描述:资源利用不足可能导致功能无法实现,资源浪费可能导致成本增加。
- 分析:根据资源利用情况,优化设计,减少不必要的资源占用。
总结和结论
本设计成功实现了一个水位监测系统,通过控制点阵、数码管等显示水位信息,并在水位超出范围时进行报警。系统功能包括水位监测、水泵抽水模拟、报警声控制等,满足了基本和提高要求。
通过仿真波形和资源利用情况分析,系统各模块功能正常,资源利用合理。仿真波形验证了各模块的正确性,资源利用情况显示系统在资源限制内实现了所需功能。
后续工作包括在实际硬件上测试系统,优化设计以减少资源占用,以及根据测试结果进行故障排查和系统优化。通过这些工作,可以进一步提高系统的稳定性和可靠性。