0%

数字逻辑(CS207)期末Project报告

1.开发计划

小组选题

FPGA x 摩斯电码

进度安排 & 执行记录

week 11 确定选题以及分工 (按时执行)
week 12 确定模块数量以及需要的输入输出端口 (按时执行)
week 13 确定状态迁移图 (按时执行)
week 14 各成员分别着手各自模块的初步开发 (未按时完成)
week 15 继续分别开发模块,debug,汇总输入输出的端口,并完成约束文件的编写 (按时执行)
week 16 着手编写报告 (按时执行)

2.设计

需求分析

系统功能

  1. 状态转换:
    能够自由地在解码和编码模式之间切换、打开和关闭欢迎界面、显示当前模式信息;
  2. 欢迎模式:
    滚动显示课程编号CS207 & 学号,播放背景音乐;
  3. 解码模式:
    长、短键输入,缓存区缓存已输入的摩斯电码。按下解码键后,在数码显示管上显示最多八个字符;
    过程中可以按下复位键清空缓存区的摩斯电码;
    若缓存区的摩斯电码是错误的或者超过缓存位数,在按下解码按键时LED给予错误提示;
  4. 编码模式:
    小键盘输入范围在0-9的数字(最多8位)并且在数码显示管上实时显示;
    按下复位键数码显示管清空;
    打开编码开关后,蜂鸣器播放当前缓冲区的数字对应的摩斯电码;
    打开不同的速度控制开关,可以让蜂鸣器以不同的速度播放;

端口规格

.img

输入输出设备

  1. 输入设备: 矩阵键盘(44)、十字按键(5)、复位按键(1)、功能拨码开关(6)

  2. 输出设备: 七段数码显示管(88)、模式LED指示灯(1)、解码缓冲区LED指示灯(14)、蜂鸣器(1)

    1640437952639.png

系统结构设计

各模块接口及功能

  1. key(键盘)

    .image-20211226220840937

  2. encoder(编码器)

    .image-20211226220908244

  3. decoder(解码器)

    .image-20211226220937275

  4. seg_tube(七段数码显示管)image-20211226221028753

  5. buzzer(蜂鸣器)

    .image-20211226221056138

状态迁移图

.image-20211225215929349

详细设计

核心代码及注释

解码器

.image-20211226221347288

编码器

.image-20211226223130190

.image-20211226223150509

键盘模块

​ 大部分使用Minisys开发包的代码

数码管模块

.image-20211226223741306

约束文件

.1640438129616.png

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)未能实现编码模式的退格键按一次退一个数字;