基于Basys3设计的FPGA多功能电子琴

基于Basys3设计的多功能电子琴

——复旦大学《数字逻辑基础(H)》2022年秋设计报告

文章目录

  • 基于Basys3设计的多功能电子琴
    • ——复旦大学《数字逻辑基础(H)》2022年秋设计报告
    • 一,项目简介
      • 1.1项目描述
      • 1.2项目背景
      • 1.3独立设计声明
    • 二,硬件设计思路
      • 2.1 Basys3开发板
        • 2.1.1 琴键分配——参考古筝
        • 2.1.2 模式选择开关
        • 2.1.3 总体分配图
      • 2.2 VGA
      • 2.3 蜂鸣器
    • 三, 代码编写思路
      • 3.1 综述
        • 3.1.1 系统功能清单及模块划分
        • 3.1.2 各模块和代码功能简介
        • 3.1.3 关键信号
        • 3.1.4 顶层模块
        • 3.1.5 顶层模块的RTL电路图
      • 3.2 具体原理
        • 3.2.1 **音频输出**
        • 3.2.2 图像显示
            • 1)VGA驱动
            • 2)图像
            • 3)图像统筹调用
            • 4)显示结果
        • 3.2.3 钢琴模式
        • 3.2.4 八音盒模式
        • 3.2.5 音乐游戏模式
        • 3.2.6 数码管显示音高
    • 四,实验结果
    • 五,实验心得
    • 六,参考文献
    • 七,特别鸣谢

一,项目简介

1.1项目描述

本项目基于DIGILENT公司的Basys3开发板,在Xilinx公司的Vivado2019.1上使用Verilog语言设计了一个FPGA电子琴。

该电子琴可以弹奏21个音阶(三个八度),并且有三种模式供选择:

  • 钢琴模式
  • 八音盒模式
  • 音乐游戏模式

1.2项目背景

​本项目是复旦大学2022年秋季学期《数字逻辑基础(H)》课程的学期任务,任务要求如下:

以下任务二选1:可以任选1个有现成代码的数字系统进行实现以及改进,也可以自己完全重新设计一下数字系统。例如可从“数电实验指导书-东大”中以下实验中任选一个(交通灯,秒表,VGA等)作为参考。

要求:下板实现,并进行验收;要提交实验报告【实验报告内容:实验内容(实验的设计、代码、仿真结果等);实验结果分析;实验心得等】,同时提交打包压缩的工程文件【注:代码上写上注释,以增加可读性】,最好有个视频,这样助教可以看到下板结果。

验收时间:第9周和第11周的周三都可验收,看板上代码运行情况,并提问。

提交时间:第10周周三晚12点前上传到elearning

1.3独立设计声明

本项目的八音盒模块(Auto_play.v)、VGA显示的底层代码(VGA_640x480.v),使用Matlab解析图片并输出到VGA的相关代码(IMG2COE.m、silence的ip核)为笔者参考CSDN和相关教材并适当改进而成。除此之外,其他的功能和代码均为自主设计,历时四个星期完成。

二,硬件设计思路

2.1 Basys3开发板

2.1.1 琴键分配——参考古筝

​ Basys3开发板上只有5个按钮,连一个八度都弹不完整,所以笔者参考了古筝的音阶分配进行设计。

基于Basys3设计的FPGA多功能电子琴_第1张图片

古筝采用的是笔者国古代的五声调式,一个八度以内只有五根琴弦,即宫(do)、商(re)、角(mi)、徵(so)、羽(la),变徵(fa)和变宫(xi)分别通过升mi和升la来实现。笔者参考这种模式,设计的Basys3琴键分配如下:

五个按钮分别对应do、re、mi、so、la,当升音开关置1时,对应的mi键变为fa,la键变为xi。

低音域开关置1时,弹奏的是低八度;高音域开关置1时,弹奏的是高八度;两个开关都置0时,弹奏的是中八度。

2.1.2 模式选择开关

2.1.3 总体分配图

2.2 VGA

VGA(Video Graphics Array)视频图形阵列是IBM于1987年提出的一个使用模拟信号的电脑显示标准,广泛应用于图像输出中。

VGA图像传输原理和实现方法可参考这篇文章:FPGA学习——VGA显示和教材《基于Xilinx Vivado的数字逻辑实验教程》(廉玉欣 侯博雅 王猛 侯云鹏 编著)

在本项目中,VGA用于输出琴键图像、展示琴键信号、展示下落式乐谱等。

本项目所用的显示器是笔者在闲鱼平台上购置的二手车载显示器,用于接收VGA信号,输出图像。

基于Basys3设计的FPGA多功能电子琴_第2张图片

2.3 蜂鸣器

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

本项目音频输出采用三个蜂鸣器串联,电路图如下

基于Basys3设计的FPGA多功能电子琴_第3张图片

注:一般蜂鸣器的电路都利用了三极管对电流进行放大,但由于笔者依然选择了这种简单的电路结构,理由如下:

  1. 模电没学好
  2. 市面上三极管型号繁多,笔者时间有限,难以仔细研究挑选
  3. 偶然发现这种电路居然也可以工作

实物连接图如下:

三, 代码编写思路

3.1 综述

3.1.1 系统功能清单及模块划分
功能名称 具体功能 关键模块和代码
音频输出 将频率信号输入蜂鸣器振荡电路中,发出对应的音调 Generate_melody.v
图像显示 显示琴键图像、按键标识和下落式乐谱 VGA_640x480.v、VGA_picture.v、Press_signal.v、Bar.v、silence.xci
音高显示 将所按下琴键对应的音调显示在数码管上 Display_melody.v
钢琴模式
把开发板上的按钮和拨码开关当作琴键,蜂鸣器作为音箱,像钢琴一样演奏乐曲 Free_play.v、Generate_melody.v、Press_signal.v
八音盒模式 根据笔者事先转译并写入的频率乐谱,像八音盒一样自动播放乐曲 Auto_play.v、Generate_melody.v、Press_siganl.v
音乐游戏模式 钢琴模式的基础上,根据笔者事先转译并写入的下落式乐谱,像音乐游戏一样指引玩家按下对应琴键 Free_play.v、Generate_melody.v、VGA_picture.v、Bar.v
3.1.2 各模块和代码功能简介
模块或代码名称 功能简介
Piano_top.v 顶层模块,根据接收拨码开关的选

你可能感兴趣的:(fpga开发)