1.开发计划
小组选题
FPGA x 摩斯电码
进度安排 & 执行记录
week 11 确定选题以及分工 (按时执行)
week 12 确定模块数量以及需要的输入输出端口 (按时执行)
week 13 确定状态迁移图 (按时执行)
week 14 各成员分别着手各自模块的初步开发 (未按时完成)
week 15 继续分别开发模块,debug,汇总输入输出的端口,并完成约束文件的编写 (按时执行)
week 16 着手编写报告 (按时执行)
2.设计
需求分析
系统功能
- 状态转换:
能够自由地在解码和编码模式之间切换、打开和关闭欢迎界面、显示当前模式信息; - 欢迎模式:
滚动显示课程编号CS207 & 学号,播放背景音乐; - 解码模式:
长、短键输入,缓存区缓存已输入的摩斯电码。按下解码键后,在数码显示管上显示最多八个字符;
过程中可以按下复位键清空缓存区的摩斯电码;
若缓存区的摩斯电码是错误的或者超过缓存位数,在按下解码按键时LED给予错误提示; - 编码模式:
小键盘输入范围在0-9的数字(最多8位)并且在数码显示管上实时显示;
按下复位键数码显示管清空;
打开编码开关后,蜂鸣器播放当前缓冲区的数字对应的摩斯电码;
打开不同的速度控制开关,可以让蜂鸣器以不同的速度播放;
端口规格
.
输入输出设备
输入设备: 矩阵键盘(44)、十字按键(5)、复位按键(1)、功能拨码开关(6)
输出设备: 七段数码显示管(88)、模式LED指示灯(1)、解码缓冲区LED指示灯(14)、蜂鸣器(1)
系统结构设计
各模块接口及功能
key(键盘)
.
encoder(编码器)
.
decoder(解码器)
.
seg_tube(七段数码显示管)
buzzer(蜂鸣器)
.
状态迁移图
.
详细设计
核心代码及注释
解码器
.
编码器
.
.
键盘模块
大部分使用Minisys开发包的代码
数码管模块
.
约束文件
.
3.行为级仿真(无)
4.板上测试
板上测试的流程大纲如下
4.1 欢迎模式
- 数码管循环欢迎字样
- 欢迎音乐: Happy Birthday
- 0.5倍速
- 2倍速
4.2 解码模式
- 电码缓存区(使用led显示)
- 退格键展示
- 成功解码展示
- 三种报错灯
- 电码缓存区已满
- 八位数码管已满
- 电码错误,无法解码
- 复位信号展示
4.3 编码模式
- 小键盘输入
- 编码为蜂鸣器信号
- 0.5倍速
- 2倍速
- 复位信号展示
5.总结及优化
问题及解决方案
(1)问题: 小键盘以及十字按键需要进行防抖处理,否则无法正常工作;
解决方案: 上网查找关于案件防抖的技术贴,下载bb站点的开发包并且学习防抖处理;
(2)问题: 解码模式在初设计时,八个数码显示管只能显示一个字符;
解决方案: 向同学请教后添加一个对应缓冲区的指针,在每次时钟上升沿只点亮对应位的字符;
系统特色
(1)模式分工明确,无基础使用者易于上手;
(2)多个拨码开关控制蜂鸣器声音输出快慢,方便切换;
(3)使用模块化设计,把复杂的功能分散到各个模块分别解决;
优化方向
(1)编码模式的防抖处理偶尔会失灵,可以设计得更加精确;
(2)未能实现单个拨码开关控制单个位置上的数字编码并播放;
(3)未能实现编码模式的退格键按一次退一个数字;