基于FPGA的电子琴设计FPGA实训.docx

上传人:b****3 文档编号:10926489 上传时间:2023-05-28 格式:DOCX 页数:30 大小:152.99KB
下载 相关 举报
基于FPGA的电子琴设计FPGA实训.docx_第1页
第1页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第2页
第2页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第3页
第3页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第4页
第4页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第5页
第5页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第6页
第6页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第7页
第7页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第8页
第8页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第9页
第9页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第10页
第10页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第11页
第11页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第12页
第12页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第13页
第13页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第14页
第14页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第15页
第15页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第16页
第16页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第17页
第17页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第18页
第18页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第19页
第19页 / 共30页
基于FPGA的电子琴设计FPGA实训.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于FPGA的电子琴设计FPGA实训.docx

《基于FPGA的电子琴设计FPGA实训.docx》由会员分享,可在线阅读,更多相关《基于FPGA的电子琴设计FPGA实训.docx(30页珍藏版)》请在冰点文库上搜索。

基于FPGA的电子琴设计FPGA实训.docx

基于FPGA的电子琴设计FPGA实训

第一章绪论

1.1引言

随着电子技术的飞速发展,微电子技术的进步主要表现在大规模集成电路加工技术即半导体工艺技术的发展上,使得表征半导体的工艺水平的线宽已经达到了60nm,并在不断地缩小,面在硅片单位面积上,集成了更多的晶体管。

集成电路设计正在不断地向超大规模,极低功耗和超高速的方向发展,电子产品的功能越来越强大,体积越来越小,功耗越来越低。

同时,利用可编程逻辑器件和EDA技术使设计方法发生了质的变化。

把以前“电路设计+硬件搭试+调试焊接”转化为“功能设计+软件模拟+仿真下载”。

利用EDA开发平台,采用可编程逻辑器件CPLD/FPGA使硬件的功能可通过编程来实现,这种新的基于芯片的设计方法能够使设计者有更多机会充分发挥创造性思维,实现多种复杂数字逻辑系统的功能,将原来由电路板设计完成的工作放到芯片的设计中进行,减少了连线和体积,提高了集成度,降低了干扰,大大减轻了电路设计和PCB设计的工作量和难度,增强了设计的灵活性,有效地提高了工作效率,增加了系统的可靠性和稳定性,提高了技术指标。

这些技术使得各种电子产品迅速的进入了我们的生活,我们处在一个被电子产品深度包围的时代,在一个普通老百姓的家里,衣食住行,每一个产品的诞生都离不开EDA技术,从彩色电视机,到智能冰箱,到全自动洗衣机,电饭煲,到微波炉,电磁炉,电子琴,再到个人随身用的手机,MP3音乐播放器都需要EDA技术提供支持。

本文应用VHDL硬件描述语言,设计一个乐曲硬件演奏电路,它能将一首预先设置存储好的乐曲自动播放出来,除此之外,也能够通过按键的方式输入音符,使其具备简易电子琴的功能。

通过此项研究,能够深切的体会利用EDA工具开发的优越性,在此基础上,对乐曲硬件演奏电路功能进行丰富,具体一定的社会实用性。

下面对乐曲演奏电路的设计与实现中涉及的EDA技术,以及EDA技术中常用的开发器件CPLD/FPGA可编程逻辑器件,开发语言VHDL以及开发软件QuartusⅡ作简单介绍。

1.2EDA简介

EDA是电子设计自动化(ElectrONicDesignAUTOMATION)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。

1.3FPGA简介

FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个新概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。

FPGA的基本特点主要有

1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

2)FPGA可做其它全定制或半定制ASIC电路的中试样片。

3)FPGA内部有丰富的触发器和I/O引脚。

4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。

用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。

掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。

FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。

当需要修改FPGA功能时,只需换一片EPROM即可。

这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。

因此,FPGA的使用非常灵活。

FPGA有多种配置模式:

并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。

1.4VHDL语言简介

VHDL的英文全名是VHSICHardwareDescriptionLanguage(VHSIC硬件描述语言)。

VHSIC是VeryHighSpeedIntegratedCircuit的缩写,是20世纪80年代在美国国防部的资助下始创的,并最终导致了VHDL语言的出现。

1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。

VHDL主要用于描述数字系统的结构,行为,功能和接口。

除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。

VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外部分的概念是VHDL系统设计的基本点

1.5QuartusII简介

QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。

对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

QuartusII图标MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。

目前Altera已经停止了对MaxplusII的更新支持,QuartusII与之相比不仅仅是支持器件类型的丰富和图形界面的改变。

Altera在QuartusII中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。

AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

第二章总体设计

2.1方案设计与比较

2.1.1设计内容

用FPGA器件驱动蜂鸣器演奏“送别”片段,一首乐曲包含三个要素:

乐曲声音的频率,发音时间的长短,停顿的时间。

按照图1乐谱,设计相应电路控制speaker信号的方波频率,某一频率持续时间长短,各频率间间隔大小,就可以推动蜂鸣器演奏乐曲。

2.1.2设计方案比较

方案一:

由单片机AT89S52来设计实现乐曲演奏电路。

外围电源使用+5V电源供电,时钟由12MHz的晶振产生,通过按键的状态来检测乐曲演奏的状态,中央处理器由AT89S52单片机来完成,乐曲演奏状态由七段数码管来模拟。

这种方案结构简单,比较易掌握,各部分电路实现起来野非常容易,在传统的乐曲演奏设计中应用也较为广泛。

其原理框图如图2。

图1单片机乐曲演奏原理图

方案二:

基于现场可编程逻辑门阵列FPGA,通过EDA技术,采用VerilogHDL硬件描述语言实现乐曲演奏电路设计。

程序设计思想为:

1、用频电路产生不同频率方波;2、利用计数器实现speaker信号频率选择,某一频率持续时间长短,各频率间间隔大小。

其框图如图2。

图2乐曲演奏电路原理框图

2.1.3方案论证与选择

通过方案一、二的比较,可以看出方案一的设计使用的分立元件电路较多,因此会使电路调试困难度增加,且电路的不稳定性也会随之增加;而采用FPGA芯片实现该电路,在整体性上较方案一好,在信号的处理和整个系统的控制中,方案二也能大大缩减电路的体积,提高电路的稳定性并且系统的调试周期也能大大缩短。

由于它们完全不同的工作原理,一般来讲,同样的逻辑,基于FPGA设计比基于单片机设计快很多。

单片机是基于指令工作的,单片机的时钟驱动着程序一步步的执行。

而基于FPGA则是把相应的逻辑“暂时”固化为硬件电路,而后的不响应速度就是电信号从一个管脚到另一个管脚的传播速度,同时电信号也要在芯片内进行一些栅电容的充放电动作,但这些动作都是非常非常快的。

从目前的EDA技术来看,其特点是应用广泛、使用普及、软件功能强大。

在ASIC和PLD器件方面,向高密度、超高速、低电压、低功耗方向发展。

当今社会人们对低故障、高实时、高可靠、高稳定性能更加青睐,综合本设计的要求以及以上比较的情况,我们选择基于FPGA的乐曲演奏电路的设计方案。

2.2硬件设计

2.2.1稳压电源电路

该稳压电路的作用是当电网电压波动、负载和温度变化时,维持输出直流电压稳定。

该电路可为晶振电路以及扬声器提供+3.3V的稳定电压,驱动器件工作。

其原理图如图3所示。

图3系统的稳压电源电路

2.2.2有源晶振电路

采用有源晶振作为时钟信号源,它是一个完整的振荡器,其内部除了石英晶体外还有阻容软件和晶体管,有源晶振信号质量好,比较稳定,而且连接方式比较简单。

主要是作为电源滤波,通常使用的为一个电容和电感组成的PI型滤波网络,输出端使用一个小阻值电阻过滤信号。

串电阻可减小反射波,避免反射波叠加引起过冲,减少谐波以及阻抗匹配,减小回波干扰及导致的信号过冲。

其原理图如图4所示。

图4有源晶振电路

2.2.3蜂鸣器电路

根据蜂鸣器输入信号频率的不同决定了其发声不同的原理,来设计一个由数控分频器控制BUZZER发声的简单实验。

数控分频器的预置值由乐曲的音调的值来决定,从而间接地控制BUZZER得发声频率。

其原理图如图5所示。

 

图5蜂鸣器电路

2.3.4七段数码显示电路

七段数码管和普通发光二极管的发光原理一样,为了进行直观显示而将普通发光二极管封装在一起,能够进行16进制数字显示;有共阳极和共阴极之分,该设计采用共阴极的连接方式,在控制端输入高点平的时候发光,在输入低电平的时候就不发光。

其原理电路图如图6所示。

图6七段数码管显示电路

2.3软件设计

通过至顶向下(TOP--DOWN)的设计方法,我们对电路的设计要求作了分析,从电路要实现的功能着手,逐层分析电路设计的步骤,再具体到各个模块的设计实现以及各模块实现方案的选择。

2.3.1音乐节拍和音调发生器模块

图7音乐节拍和音调发生器模块

(1)音乐节拍和音调发生器模块RTL电路图

图8音乐节拍和音调发生器模块RTL电路图

(2)地址发生器模块

地址发生器模块设置了一个8位二进制计数器(计数最大值为256),作为音符数据ROM的地址发生器。

每来一个时钟脉冲信号(Clk),8位二进制计数器就计数一次,ROM文件中的地址也就随着递增,音符数据ROM中的音符也就一个接一个连续的取出来了。

在地址发生器的VHDL设计中,这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒,四四拍的4分音符持续时间。

例如,地址发生器在以下的VHDL逻辑描述中,“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间。

那么相应随着程序[4]中的计数器按4Hz的时钟频率作加法计数时,即随地址递增时,将从音符数据ROM中将连续取出4个音符“3”通过toneindex[3..0]端口输向分频预置数模块。

这样梁祝乐曲中的音符就一个接一个的通过toneindex[3..0]端口输向分频预置数模块。

2.3.2音乐谱对应分频预置数查表电路模块

(1)音乐谱分频预置数模块

图9音乐谱分频预置数模块

(2)音乐谱对应分频预制数查表电路VHDL程序设计

音乐谱分频预置数模块是乐曲简谱码对应的分频预置数查表电路。

它提供了每个音符所对应的分频预置数,即给数控分频模块提供计数初值,这里以“梁祝”乐曲为例,列出了在这个乐曲中所用到的13个音符的分频预置数。

在这个模块的VHDL逻辑描述中设置了四四拍乐曲中全部音符所对应的分频预置数,共13个,每一音符的停留时间由音乐节拍和地址发生器模块的时钟(Clk)的输入频率决定,在此为4Hz。

这13个值的输出由程序[3]的4位输入值index[3..0]确定。

输向程序[4]中index[3..0]的值又由地址发生器模块的输出toneindex[3..0]的输出值和持续时间决定。

模块的功能是输出各个音符所对应的分频预置数,即当index是“0000”,tone输出为2047,即休止符的分频预置数;当index是“0101”时,tone输出为1197即低音5的分频预置数;当index是“1111”时,tone输出为1728即高音1的分频预置数等等其它状态时,tone分别输出相应音符的分频预置数。

2.3.3音乐谱对应分频预置数查表电路模块

(1)音乐符数控11分频电路模块

图10音乐符数控11分频电路模块

(2)音乐符数控11分频电路模块RTL电路图

图11音乐符数控11分频电路模块RTL电路图

(3)音乐符数控11分频模块电路VHDL程序设计

音符的频率由数控分频模块获得,这是一个数控分频电路。

它是由一个初值可变的加法计数器构成。

该计数器的模为2047,当计数器记满时,计数器产生一个溢出信号FULL,此溢出信号就是用作发音的频率信号。

在计数器的输入端给定不同的初值,而此预置数就是表1中的计数初值,就可得到不同音符的发音频率信号。

它计满时所需要的计数初值可由下式来表示。

计数初值(Tone)=2047-分频系数

而分频系数又可有下式来求:

分频系数=基准频率/音符的发生频率

低音时Tone值小,分频系数大,溢出信号周期长,扬声器发出的声音低,Tone随音乐的乐谱变化大,自动控制分频比,实现了数控分频,发生信号的频率与音调Tone成正比。

这就是利用数控分频器自动演奏音乐的原理。

时钟(Clk)端输入的是在十六进制模块里对12MHz的信号进行16分频得到的750KHz,750KHz的信号根据分频预置数模块中所提供的计数初值,分别得出相应音符频率的两倍值。

此时从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,这时的频率就变为原来的1/2,刚好就是相应音符的频率。

数控分频模块中对Clk输入信号的分频比由11位预置数tone[10..0]决定。

Fout的输出频率将决定每一个音符的音调,这样,分频计数器的预置值tone[10..0]与Fout的输出频率就有了对应关系。

例如在分频预置数模块中若取tone[10..0]=1036,将发出音符为“3”音的信号频率。

2.3.4乐曲演奏音符数据文件

WIDTH=4;--乐曲演奏数据

DEPTH=256;

Address_radix=dec;

Data_radix=dec;

CONTENTBEGIN

33335556

88896855

1212121513121012

99999990

999107766

55568899

33886568

55555555

101010127799

68555555

350335679

66666656

888912121210

991098865

33338888

68653568

55555555

00000000

05135173

50506716

65500321

11321112

32116232

16232000

52671210

03532157

00671112

32000513

51735567

16655032

11132111

23026712

其中WIDTH=4,表示数据输出为宽为4;DEPTH=256,表示共有256个4位数据点;ADDRESS-RADIX=DEC,表示地址信号用十进制;DATA-RADIX=DEC,表示输出数据是十进制数。

形成ROM中的配置数据(初始化数据)文件的方法如下:

在QUARTUS||中编辑.mif文件。

首先在File菜单下的New菜单上选择TextEditorFile命令,进入文本编辑器,然后输入以上格式的数据文件。

文件中的关键词WIDTH设置ROM的数据宽度;DEPTH设置ROM数据的深度,即4位数据的数量,文件中设置的256等效于8位地址线宽度;ADDRESS-RADIX=DEC和DATA-RADIX=DEC表示设置地址和数据的表达式格式都是十进制;地址/数据表以CONTENTBEGIN开始,以END结束;其中的地址/数据表达方式是冒号左边写ROM地址值,冒号右边写对应此地址放置的十进制数据,如46:

9,表示46为地址,9为该地址中的数据。

这样每读到一个地址,即可输出其相应的数据。

文件编辑好后,保存时取文件名为“singer.mif”,存盘的路径为“g:

\music\singer”。

2.2.5定制音符数据的ROM文件

1.定制的基本步骤如下:

(1) 进入QUARTUS||,选菜单TOOL->megawizardplug-inmanager,选择“creatanew…”,然后按“next”键,选择LPM-ROM;最后在browse下的栏中键入路径与输出文件名,注意后缀vhd小写。

(2) 单击“next”键,,选择ROM数据位宽度为4,地址线宽为256,即设置此ROM能存储4位二进制数据共256个。

(3) 通过“browse”钮,找到ROM中的加载文件路径和文件名:

注意ROM元件的inclock是地址锁存时钟。

(4) 打开已定制的ROM文件,将它设置为工程,并确定目标器件,进行测试仿真波形,

按照定制步骤对音符数据文件进行ROM定制。

第三章系统软硬件调试

3.1NoteTabs音乐节拍和音调发生器模块的仿真

将所编写的音乐节拍和音调模块NoteTabs的程序设为工程,选用Altera公司的Cyclone系列中的EPIC12Q240C8为目标芯片进行仿真。

仿真结果如下图:

图12音乐节拍和音调模块NoteTabs波形仿真

3.2ToneTaba分频预置数查表模块的仿真

3.2.1波形仿真

将所编写的分频预置数查表模块ToneTaba的程序设为工程,选用Altera公司的Cyclone系列中的EPIC12Q240C8为目标芯片进行仿真。

仿真结果如下图:

 

图13分频预置数查表模块ToneTaba波形仿真

3.2.2模块功能分析与调试

ToneTaba分频预置数模块的功能是输出各个音符所对应的分频预置数,由上面的仿真波形图可看到若当index是“0000”,tone输出为2047,即休止符的分频预置数;当index是“0101”时,tone输出为1197即低音5的分频预置数;当index是“1111”时,tone输出为1728即高音1的分频预置数等等其它状态时,tone分别输出相应音符的分频预置数,仿真波形图证明了程序实现了模块的功能。

3.3Speakera音乐符数控分频模块的仿真

3.3.1波形仿真

将所编写的音乐符数控分频模块Speakera的程序设为工程,选用Altera公司的Cyclone系列中的EPIC12Q240C8为目标芯片进行仿真。

仿真结果如下图:

图14Speakera音乐符数控分频模块波形仿真

3.3.2模块功能分析与调试

Speakera音乐符数控分频此模块的功能是根据初始值Tone的值,对输入时钟信号Clk的频率进行分频,得到想要的音符的发声频率其时钟(Clk)端输入的是在十六进制模块里对12MHz的信号进行16分频得到的750KHz,750KHz的信号根据分频预置数模块中所提供的计数初值,分别得出相应音符频率的两倍值。

此时从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,这时的频率就变为原来的1/2,刚好就是相应音符的频率。

在clk端输入一具有较高频率的信号(这里是12MHz)的信号,通过分频后由cout输出。

这里是对12MHz的信号进行16分频得到750KHz的信号。

750KHz的时钟脉冲信号是给数控分频模块提供时钟信号。

数控分频模块中对Clk输入信号的分频比由11位预置数tone[10..0]决定。

spkout的输出频率将决定每一个音符的音调,这样,分频计数器的预置tone[10..0]与Fout的输出频率就有了对应关系。

若在分频预置数模块中若取tone[10..0]=1036,将发出音符为“3”音的信号频率。

在这个仿真波形图中,Tone的值可设为6c0(即高音1的分频预置数1728),Clk的频率为750KHz,spkout输出的脉冲信号的周期为849.9291us(即1176.568Hz),接近高音1的发声频率。

由表中可知高音1的分频系数为319,即对输入时钟Clk进行319次分频就可得高音1的发声频率,因此这个程序实现了模块的功能。

3.4扩大此音乐硬件演奏电路的通用性

前面所设计的电路只能演奏“梁祝”曲子,但是在实际应用中,若能将电路实用于各种曲子的演奏,它的实用性和应用范围就会扩大许多。

这里主要通过修改分频预置数模块的程序,使其实用于各种曲子的演奏。

另外要使更改乐曲方便,主要通过重新设置音符数据文件,再对其进行LPM-ROM定制。

在前面的VHDL设计中,我们只能通过程序输出“梁祝”曲子中的13个音符的分频预置数(即计数初值),但是在其它的乐曲中可能会用到另外的那些音符,因此对程序进行修改完善它的功能,使其能输出另外那些音符的分频预置数。

把修改的程序代替原来此模块的程序连入顶层文件后,要使所设计的音乐硬件演奏电路可随意更改曲子,只要修改音符数据文件,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2