基于pango的点歌台设计-Pangomicro紫光同创社区-FPGA CPLD-ChipDebug

基于pango的点歌台设计

  摘要

点歌台是一种可以点播歌曲的设备,通常在娱乐场所如KTV、酒吧、派对等地方使用。它可以让用户在播放音乐的同时,选择他们喜欢的歌曲进行播放。在娱乐场所中具有重要的作用和意义,可以提高用户的娱乐体验,增强场所的竞争力,同时也有助于促进音乐文化的传播和发展。 FPGA具有高度可定制性,允许用户根据需要自定义硬件电路,实现特定功能;内部的硬件逻辑可以实现高速运算,因此在需要低延迟的应用场景中具有优势,如通信、实时控制等;内部包含大量可编程逻辑门,可以实现并行处理,提高处理速度,被广泛应用于数字信号处理、复杂波形生成等多个领域。 本设计主要利用国产FPGA平台pango进行点歌台的系统开发,采用无源蜂鸣器模拟电子钢琴音源。通过使用Verilog语言构建分频器、计数器和播放器等模块,实现数码管显示当前播放音乐的曲目顺序和当前音乐片段的音阶范围,并支持五首音乐间的切换和暂停。在Modelsim软件中进行了仿真,仿真结果验证了设计的准确性。在KX-MS65P-CPGL100设备上完成了硬件地下载,完成了设计任务。

关键词:FPGA,Verilog,蜂鸣器,数码管     

Abstract The karaoke machine, also known as the “singing machine”, is a device used for selecting and playing songs in entertainment venues such as KTV, bars, and parties. It allows users to choose their preferred songs to be played throughout the duration of their visit, and is crucial in providing enhanced entertainment experiences and improving the competitiveness of such venues. In addition, it also helps promote the spread and development of music culture. FPGA features high customizability, allowing users to customize hardware circuits according to their needs and achieve specific functions. The internal hardware logic can achieve high-speed computing, making it advantageous in low-latency application scenarios such as communication and real-time control. FPGA contains a large number of programmable logic gates that can achieve parallel processing, improving processing speed, and is widely used in digital signal processing, complex waveform generation, and many other fields. The design mainly utilizes the domestic FPGA platform Pango to develop a jukebox system, using a passive buzzer to simulate electronic piano sound sources. Through the use of Verilog language, modules such as frequency divider, counter, and player were constructed, which enables the digital display to show the current order of playing music and the current range of music notes. It also supports switching and pausing between five pieces of music. The simulation was conducted in Modelsim software, and the simulation results verified the accuracy of the design. The hardware was downloaded on the KX-MS65P-CPGL100 device, completing the design task.  

Key Words:FPGA, Verilog, Buzzer, digital tub 

1绪论

1.1设计背景及意义

在现代社会中,人们的生活节奏越来越快,工作和学习压力也越来越大,音乐成为了很多人放松身心、缓解压力的重要方式之一。然而,传统的点歌方式繁琐复杂,需要手动输入歌名、歌手、专辑等信息,有时候还需要等待搜索结果,费时费力。因此,设计一款智能化、便捷化的音乐点歌台成为了很多人的需求。

FPGA作为一种高度可编程的数字电路,设计音乐点歌台的意义主要体现在以下几个方面:1.提高性能和响应速度:FPGA芯片具有很高的计算能力和并行处理能力,可以快速处理音频数据和响应用户操作,从而提高音乐点歌台的性能和响应速度。2.灵活性和可扩展性:FPGA芯片具有很高的可编程性,可以根据需求定制硬件电路和功能模块,具有很强的灵活性和可扩展性。采用FPGA设计音乐点歌台可以方便地进行功能扩展和升级,适应不同用户的需求。3.降低成本:FPGA芯片具有很高的性价比,相对于传统的ASIC芯片,采用FPGA设计音乐点歌台可以显著降低硬件成本,提高产品的竞争力。4.降低功耗:FPGA芯片具有很低的功耗,采用FPGA设计音乐点歌台可以降低功耗,提高产品的能效比,延长产品的使用寿命。因此采用FPGA设计音乐点歌台可以显著提高产品的性能、响应速度、灵活性、可扩展性、成本、功耗、音频质量和用户体验,具有很高的应用价值和市场前景。

目前国际上主流的EDA软件如Cadence、Synopsys和Mentor Graphics等,已经发展了很多年,拥有强大的技术实力和完善的产品线。国产EDA软件在技术水平和功能方面与这些国际巨头相比还有一定的差距。但是Pango Design Suite软件的出现对于FPGA开发具有重要意义。这款软件是基于紫光同创多年的FPGA开发软件技术攻关和工程实践经验开发的,可以为千万门级FPGA器件的设计开发提供支持。此外,Pango Design Suite还支持多种国内外常用的算法,如AES、DES、3DES、RSA等,为加密和解密等安全应用提供了便利。

1.2 设计任务及要求

本系统由KX-MS65实验箱的主控FPGA核心板、扩展板以及其他的基本电子元器件等模块组成,在利用国产紫光同创公司Logos系列PGL100H搭建完成基础的计数器、分频器、乐谱等模块之后,通过数码管显示系统当前的状态。该点歌台系统应具有以下功能:     

  1. 能在数码管上显示当前播放音乐的曲目顺序和当前音乐片段的声调范围,例如0-7;
  2. 点歌台的按键应该具备复位功能,选择歌曲功能以及播放/暂停功能,以让用户知道目前系统的状态;
  3. 功能要求点歌台至少具备3首歌,以供用户选择。
  4. 实现硬件下载


    2总体设计方案

2.1方案分析

组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需要的两个基本要素,问题是如何获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲演奏的效果。无源蜂鸣器是一种电子元件,通常用于产生声音,例如:蜂鸣声、警报声等。它不需要外部电源驱动,其发声原理主要基于压电效应。无源蜂鸣器内部装有压电元件,当外加电压作用于压电元件时,压电元件会产生机械变形,从而在蜂鸣器表面产生机械振动,机械振动再通过空气介质传播形成声音,其外观如图2-1所示[1]。

20230920192718246-image

 

图2-1 无源蜂鸣器示意图

康芯实验平台地核心板采用兼容两个型号芯片形式,紫光同创Logos系列PGL100H封装:FBG676, FPGA型号为 PG2L100H_FBG676,属于紫光同创公司的 Logos 系列产品。此型号为 BGA封装,676个脚,GLM(可配置逻辑模块)LUT6 66600个,DRM(专用RAM存储模块)1273600bits,36Kbits155个,PLLS12个,ADC1个。图 2-2为开发板所用的 FPGA 芯片实物图。

20230920192756187-image

图 2-2 PG2L100H核心板

2.2设计思路

系统的总体设计流程框图如图2-3,FPGA的主频可以达到50MHz,这对于音乐播放来讲频率过高,需要通过Verilog语言描述获取到对应的音调频率,也就是基本的分频电路。然后设计计数器电路用来进行按键计数,可以得到一个对应的歌曲播放顺序,歌曲的音调需要将7个不同的音调值通过输入的音调值选择性的输出,而不同歌曲的音调指数需要单独的设置和编码。最后将音调值对应的频率传输到无源蜂鸣器上,即可得到对应的歌曲。在此过程中,可以增加复位、使能、播放/暂停等功能键,也可将当前的音调值通过译码器电路直接显示在数码管上。

20230920192831169-image

图2-3 点歌台系统流程框图

3 系统模块的设计

 

3.1分频器模块

pango平台的开发软件暂时不支持宏模块的顶层设计,因此所有项目文件均是由Verilog语言描述而成。针对50MHz的时钟主频,按照实践需求进行分频,具体代码如下:

 

上述代码中的 c0_div 和 c1_div 参数分别指定了 c0 和 c1 信号的分频系数。在这个代码中,c0_div 被设置为 6’D5,即分频系数为 5,实际上计数到2就停止,则对应的输出频率约为12Mhz,c1_div 被设置为 24’D6_250_000,即分频系数为 6250000,对应的输出频率为8hz。根据这些分频系数,计数器对输入时钟信号进行分频,并产生相应的输出信号。该段代码对应的RTL电路图如图3-1所示。

20230920192936815-image

 

图3-1 分频器的RTL电路图

3.2计数器模块

计数器主要用于选择当前播放歌曲的曲目,分为3个输入和2个输出。其中CQ:计数器输出,是一个4位二进制数。COUT:输出信号,表示计数器是否达到了指定的值。CQI:内部计数器,是一个4位二进制数[12]。对应的代码如下:

 

 该模块的功能如下:当复位信号RST为高电平时,内部计数器CQI被重置为0;当使能信号EN为高电平时,如果内部计数器CQI小于5,则将其递增1;否则将其重置为0;当内部计数器CQI等于5时,将输出信号COUT置为高电平;否则将其置为低电平;同时也能将内部计数器CQI的值赋给输出信号CQ。 该段代码对应的电路结构如图3-2所示。可以看出该模块的输入端口有3个,分别是使能端、时钟端和复位端。两个输出端,分别代表当前播放歌曲的序号以及曲目序号是否超过5,即溢出与否的标志位。

20230920193041925-image

图3-2 计数器的RTL电路图

3.3歌曲模块的设计

3.3.1音调程序的设计

音调程序里面包含21个常用的电子琴音调,分别分为3个层次,低音、中音和高音,以适应不同场合的调用要求[3]。电子琴的音符频率是根据特定的音阶和调式确定的。例如,C大调的音符频率为:C4(261Hz)、D4(294Hz)、E4(330Hz)、F4(349Hz)、G4(392Hz)、A4(440Hz)、B4(494Hz)等。而在给出音调索引之前,还需了解电子琴音阶与频率之间的关系,如图3-3所示。

20230920193100234-image

图3-3 电子琴音阶基频对照表 在蜂鸣器输入频率为500KH的情况下,如果要发出低音中“1”的音调,则需要的频率为392Hz,对应计数值为2047-500K/392=771,440Hz对应计数值为2047-500K/440=910,以此类推,该函数模块的代码如下:

 

 

在always块中,使用case语句对索引值进行条件判断。根据不同的索引值,将对应的Tone、CODE、HHI和LLO的值赋给相应的寄存器。例如,当索引值为5’d0时,将11’d2047赋值给Tone寄存器,将0赋值给CODE寄存器,将8’b00000000赋值给LLO寄存器,将8’b00000000赋值给HHI寄存器。这样,当索引值改变时,根据不同的索引值,对应的Tone、CODE、HHI和LLO的值就会被更新[13]。这些寄存器的值可以在后续的逻辑中使用,以实现所需的功能。

3.3.2 五首歌曲谱的设计

本次设计采用的是当下较为流行的五首歌曲,分别是《成都》、《稻香》、《负重一万斤长大》、《人间烟火》和《游山恋》。由于歌曲曲目较多,分析编码方法类似,因此在这里以其中一首歌曲《成都》为例进行分析。其乐曲简谱如图3-4所示。

20230920193141667-image

图3-4 歌曲《成都》的乐曲简谱 其对应的代码如下:

 

它包含一个时钟输入信号clk和一个4位输出的信号ToneIndex。该模块还包含一个计数器Counter和一个用于选择的case语句。代码的功能如下:计数器Counter从0开始,每当时钟信号clk的上升沿到来时,计数器会递增1。当计数器达到261时,计数器会被重置为0;case语句根据计数器的值,将ToneIndex的值设置为不同的数值[14]。这些数值对应不同的音调索引。代码中的注释提供了一些音调索引的对应关系,例如当计数器的值为261时,ToneIndex的值被设置为0,表示发出一个音调。 其余四首歌曲的编码方式类似,只需按照乐谱改动ToneIndex的数值即可,因此附录中只会给出其余四首歌曲的乐谱简谱,相应地给出对应的代码部分。

3.3.3 蜂鸣器的设计

蜂鸣器模块需要实现一个基于输入频率控制信号的扬声器声音输出模块。根据输入的频率值,通过计数器和时钟信号的控制,产生相应的预时钟信号和声音输出信号,以产生不同频率的声音输出[5]。其对应的代码如下:

 

 

本段程序基本可以分为3个时钟块解读。第一个时钟块:该块在每个时钟上升沿触发时执行;首先将”PreCLK”清零;然后通过比较”Count4″的值与4’b1001(十进制值为10)的大小关系,决定是否将”PreCLK”置为高电平;如果”Count4″大于4’b1011,则将”PreCLK”置为高电平,并将”Count4″重置为0;否则,将”Count4″的值加1[12]。 第二个时钟块:该块在每个预时钟信号的上升沿触发时执行;首先比较”Count11″的值与12’h7FF(十进制值为2047)的大小关系,决定是否更新”Count11″的值和设置”FullSpkS”为高电平;如果”Count11″等于12’h7FF,则将”Count11″设置为当前输入的”Tone”值,并将”FullSpkS”置为高电平[3];否则,将”Count11″的值加1,并将”FullSpkS”置为低电平。 第三个时钟块:该块在每个完整的声音输出信号的上升沿触发时执行;首先将”Count2″取反,以实现计数器的增减操作;然后通过比较”Count2″的值与1’b1的大小关系,决定是否将扬声器的输出设置为高电平;如果”Count2″等于1’b1,则将扬声器的输出设置为高电平;否则,将扬声器的输出设置为低电平[10]。 整个歌曲模块对应的电路结构图如图3-5所示。

20230920193458429-image

图3-5 歌曲模块RTL电路图 3.4 RTL电路图 除过上述基本模块之外,模块的调用部分相对而言比较简单,代码部分将会在附录中呈现。点歌台系统的RTL电路图如图3-6所示。

20230920193517429-image

图 3-6 点歌台系统RTL电路图 在图3-6中可以看出,这段代码实现了一个将50MHz的时钟信号分频为不同频率的时钟信号,并使用这些时钟信号和一个选择输入信号来控制乐曲演奏和扬声器输出的模块[4]。
   

4 实验结果

4.1分频器模块仿真

图4-1是对分频器模块的仿真波形,从图a中可以看出当输入时钟周期为2ns时,C0的周期为8ns,此时从图b中可以看出C1的时钟周期约为12500000ns,需要的时间较长一些,不影响仿真的正确性。 

20230920193549101-image

20230920193605137-image

图4-1 分频器模块仿真波形图 其对应的测试代码如下:

 

 

4.2 计数器模块仿真 如图4-2所示,计数值存储到CQ寄存器中,每次计数到五Cout都会输出高电平,进而重新计数,因此仿真波形正确。

20230920193710201-image

图4-2 计数器模块仿真波形演示 其对应测试文件的代码如下:

 

 

4.3歌曲模块仿真

因为歌曲模块包含的子文件较多,不再一一仿真,故直接进行该模块的整体仿真。继续使用Modesim软件,设置仿真时间100ms,设置相应的时间刻度为1ns,其余参数遵循上述几个程序即可,然后打开wave窗口,即可观察到仿真波形的信息,如图4-3(a)所示。 

20230920193803675-image

20230920193814859-image

 

图4-3 歌曲模块仿真波形界面 图4-3(b)则是在按下加速键之后的波形图,很明显曲调的索引值相对而言宽度只有按键未按下时的一半,即按下SPEED按键后,音乐的播放速度是原来的2倍,也就是常说的“快进”。对应的测试文件代码如下:

 

 

4.4整体仿真

点歌台系统整体仿真的波形如图4-4所示。对应的代码如下:

 

图片[15]-基于pango的点歌台设计-Pangomicro紫光同创社区-FPGA CPLD-ChipDebug 图4-4 系统的整体仿真波形图 从图4-4中,可以看出在复位键无效的情况下,按动切换按钮,可以进行歌曲的选择,但是由于仿真所需要的时场较长,牵扯到文件很多,这里只进行了一个较短时间的仿真,因此音调的输出并不明显,但是总体来看,没有问题。  

5 硬件下载

5.1 硬件平台简介

KX-MX65P的整个系统分三大部分。如图5-1,核心板+动态配置IO基础部分+主系统扩展部分。

20230920193938297-image

图5-1 KX-MX65P的核心板 核心板FPGA 区,提供标准7组40芯座,接口与FPGA核心板相同,每组40芯数据口向主系统模块座上扩展,无需排线连接,此区,可接插不同公司,包括Intel,XILINX系列、国产紫光同创不同型号FPGA。 动态配置IO功能区,康芯公司提供基础实验多功能-动态配置IO模块,此款开发系统一大特色,“动态配置IO”(多任务重配置实验电路升级),使得用户实验资源得到拓展,克服原有数码管只能动态扫描,按键只能单脉冲无消抖动的弊端,大大减低初学者学习门槛和实验项目的限制。 在主系统的除了核心板,共开辟了8组扩展座,如果接插“动态配置IO板占了2组,剩余6组扩展,如装配7寸液晶,共剩4组供扩展。扩展板可固定,可更换,无需排线连接,兼容市场大多数扩展板,但是在本次设计中,并没有用到该部分。

5.2芯片的选择及管脚锁定

第四章的实验结果基本符合现实情况。接下来即可进行硬件管脚的锁定,这一步可以参考紫光同创官方的实验手册。从实际情况出发,芯片的选择是唯一的,即Logos系列PGL100H。     相对应的管脚锁定可以从文件《KXMS65P_PGL100系统_扩展板手册2301OK》中一一查找,这里不再赘述。锁定好的管脚如图5-2所示。

20230920194049176-image

图5-2 管脚匹配图

5.3 硬件调试

图5-3展示了程序在被烧录进入芯片时的软件截图,由于下载到100%的瞬间太短暂,无法准确地截图,因此此时的烧录进程显示的是95%。

20230920194120289-image

图5-5 下载程序时的软件截图 图5-4展示了进行程序下载前后的数码管显示状态。程序下载之后,从图5-3(b)中可以看到第一个数码管和最后一个数码管为0,意味着初始化状态的音调索引为0和当前没有待播放歌曲。

20230920194139393-image

图5-4 数码管状态图(a)程序下载之前,(b)程序下载之后 按下按键2此时播放第一首歌曲,第一位数码管的数值在0-7之间,最后一个数码管显示1,代表着正在播放第一首歌曲《成都》,再次按下键2,对应的指示灯熄灭,需要再按下键2才能切换到第二首歌曲《稻香》,切换到第三首歌曲或者后续音乐也是类似操作,如图5-5所示。

20230920194154425-image

图5-5播放多首歌曲。(a)第一首《成都》(b)第二首《稻香》(c)第三首《负重一万斤长大》(d)第四首《人间烟火》(e)第五首《游山恋》 在模式5的情况下,按下暂停键也可以停止当前播放的歌曲,再次按下则会恢复。综上所述,系统的功能要求全部实现。


    6 结论

通过利用国产FPGA平台pango进行点歌台的系统开发,采用无源蜂鸣器模拟电子钢琴音源。通过使用Verilog语言构建分频器、计数器和播放器等模块,实现数码管显示当前播放音乐的曲目顺序和当前音乐片段的音阶范围,并支持五首音乐间的切换和暂停。在Modelsim软件中进行了仿真,仿真结果验证了设计的准确性。在康芯试验箱上完成了硬件地下载,顺利完成了设计要求。 虽然完成了基本任务,但是还有一些地方存在不足或者可以改进。例如没有充分利用数码管的功能,仅仅使用了其中两个;没有充分使用按键的功能,也仅仅使用了三个;可以在LCD屏幕上显示歌词和曲目等相关信息,使其更好的观赏性与交互性。 针对以上问题,可以采取以下措施解决:将其余六个数码管用来显示歌曲的播放时间和剩余时间,各占用3个数码管,第一位代表分钟,第二三位代表秒,符合歌曲的一般时长规律;增加其余五个按键的作用,一个用来选择是随机播放还是顺序播放,一个用来调整音量大小,一个用来快退,另外两个按键分别代表每次播放的歌曲顺序加二或减二;进一步学习LCD的驱动,尤其是汉字、字符信息的显示,包括界面、歌手、专辑、歌词歌曲名称等信息。  
   

附录

本次课设的其余四首歌曲简谱全部如下。 图片[21]-基于pango的点歌台设计-Pangomicro紫光同创社区-FPGA CPLD-ChipDebug 1.《稻香》对应的代码如下:

 

 

注:由于每首歌曲编码方式类似,仅仅是音调索引值不同,考虑到代码量较大,故不在这里一一列出。 图片[22]-基于pango的点歌台设计-Pangomicro紫光同创社区-FPGA CPLD-ChipDebug图片[23]-基于pango的点歌台设计-Pangomicro紫光同创社区-FPGA CPLD-ChipDebug 图片[24]-基于pango的点歌台设计-Pangomicro紫光同创社区-FPGA CPLD-ChipDebug   参考文献

[1]Mao M. Counter Based Hardware Resource Reduction for FIMA System Verilog Assertion Checker[J]. Advances in Computer and Communication,2023,4(1).

[2]尹生.基于国产元器件开展设计的思考[J].数字技术与应用,2022,40(12):204-207.DOI:10.19695/j.cnki.cn12-1369.2022.12.61.

[3]王建新,肖超恩,张磊等.基于国产软硬件系统的实验教学FPGA仿真工具设计[J].实验室研究与探索,2022,41(11):124-128+180.DOI:10.19927/j.cnki.syyt.2022.11.026.

[4]丁波,王建和,朱逸斐等.掌上彩超硬件系统主控FPGA芯片国产替代的设计与实现[J].电子技术与软件工程,2022(22):123-127.

[5]李栋.基于FPGA的MIDI音乐发生器的设计探讨[J].信息记录材料,2022,23(07):77-79.DOI:10.16009/j.cnki.cn13-1295/tq.2022.07.026.

[6]王洪钦,李素芬,吴倩.基于FPGA的无源蜂鸣器音乐播放器的设计与实现[J].内江科技,2022,43(04):42-43.

[7]Song C,Wu X,Tao Y. FPGA virtual platform based on systemc and verilog[J]. IOP Conference Series: Materials Science and Engineering,2020,768(7).

[8]徐志博,王浩,覃昌鹏.基于FPGA的音乐灯光系统[J].科学技术创新,2019(18):86-87.

[9]刘玲,刘新,张鹏鸣.基于FPGA的数码管音乐流水灯设计[J].沈阳师范大学学报(自然科学版),2019,37(01):66-70.

[10]李富国,马鑫彤.基于FPGA的音乐播放器设计[J].科学技术创新,2018(36):59-60.

[11]陈嘉.基于FPGA的音乐播放器的设计[J].中国新通信,2018,20(19):162.

[12]李乐吟,沈莹莹,马意彭.基于FPGA的频谱音乐播放显示系统[J].数码世界,2018(05):22-23.

[13]王丽君,李萌.基于FPGA的简易电子琴设计[J].电子科技,2017,30(05):62-64+86.DOI:10.16180/j.cnki.issn1007-7820.2017.05.017.

[14]闫娟.基于Verilog HDL的简易电子琴设计[J].企业技术开发,2011,30(13):104+109.DOI:10.14165/j.cnki.hunansci.2011.13.017.

[15]Martin F,Icek A. Misconceptions about the Fishbein model: Reflections on a study by Songer-Nocks[J]. Journal of Experimental Social Psychology,1976,12(6).

请登录后发表评论

    没有回复内容