版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖南人文科技学院课程设计报告课程名称:课程名称:VHDL 语言与 EDA 课程设计设计题目设计题目: 调频信号发生器 系系 别:别: 信息学院 专专 业:业: 电子信息工程 班班 级:级: 一班 学生姓名学生姓名: : 姚靖瑜 何渡 余建佳 学学 号号: 13409112 13409115 13409120 起止日期起止日期: 2016 年 6 月 16 日 指导教师指导教师: 姚毅 教研室主任:教研室主任: 2 指导教师评语指导教师评语: 指导教师签名: 年 月 日成绩成绩项项 目目权重权重1、设计过程中出勤、学习态度等方面2、课程设计质量与答辩3、设计报告书写及图纸规范程度成成绩绩评评定定
2、总 成 绩 教研室审核意见:教研室主任签字: 年 月 日教学系审核意见: 主任签字: 年 月 日3 摘摘要要本文介绍一种利用EDA技术和VHDL语言,在Quartus环境下,设计的一种调频信号发生器。EDA 技术是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关开发软件,自动完成用软件的方式设计的电子系统到硬件系统实现,最终形成集成电子系统或专用集成芯片的一门新技术。介绍一种基于DDS 原理,并采用FPGA 芯片和VHDL 开发语言设计的任意函数调频的任意波形信号发生器,给出了设计方案和在G
3、W48 CK型EDA 集成电路开发系统上实现的实验结果。关键词:调频;信号发生器;DDS; FPGA;VHDL;Quartus目录设计要求.11、方案论证与对比.11.1 方案对比.11.2 方案选择.22、工作原理及过程.22.1 DDS 的基本原理.22.2 基本流程图 .33、模块设计.33.1 MATLAB 设计 .33.1.1 顶层原理图设计.33.1.2 Smulink 模型仿真.43.1.3 Signalcompiler 的使用.43.2 QUARTUSII 设计.63.2.1 顶层原理图模块.63.2.2 高速 A/D 转换器 TLC5510.63.2.3 调试与操作说明.73
4、.2.4 顶层文件设计.84、问题分析.95、心得体会.96、元件清单.107、致谢.10参考文献.10附录一 AD5510 控制程序.11附录二 顶层文件程序.121 调频信号发生器设计要求设计要求1)能将 FPGA 内部产生的低频信号进行调制,也能选择外部输入的幅度小于 4V 的低频模拟信号进行调制 2)输出信号的载波频率为 100KHz。3)输出波形峰-峰值大于 2V。1、方案论证与对比、方案论证与对比1.1 方案方案对比对比方案 1:使用 DDS 芯片控制产生低频信号和高频载波信号,使 ADC0509 采样外部的低频信号。以单刀双掷开关选择内部或外部信号输入,在示波器上显示调制波形。原
5、理图 1 如下:图 1 方案一原理图方案 2:基于 EDA 技术,由软件 MADLAB 和 DSP Builder 设计完成调频信号发生器模块的原理图。然后通过 MADLAB 中的 Signa Compiler 将模块转换成 VHDL 语言。再在 QuartusII 中编译、仿真、下载完成设计要求。原理图 2 如下:图 2 方案 2 原理图2 1.2 方案选择方案选择方案一由于 DDS 芯片产生的信号波形、功能和控制方式固定,不能满足具体需求;方案二则是基于硬件设计的语言,很容易对硬件电路实现编程下载。经比较我们选择了方案二。2、工作原理及过程、工作原理及过程2.1 DDS 的基本原理的基本原
6、理直接数字频率合成技术(Direct Digital Frequency Syn2thesis ,DDFS ,简称 DDS) 是从相位概念出发直接合成所需波形的一种新的频率合成技术1 。他在相对带宽、频率转换时间、相位连续性、正交输出、高分辨率以及集成化等一系列性能指标方面已远远超过了传统频率合成技术4 。当累加器的 N 很大时,最低输出频率可达 Hz ,mHz ,甚至 Hz 级,即 DDS 的最低合成频率接近于零频。如果 f c 为 50 MHz ,那么当 N 为 48 位其分辨率可达 179 nHz。转换时间最快可达 10 ns 的量级,这都是传统频率合成所不能比拟的。图 3 所示为正弦输
7、出的 DDS 原理图。图 3 DDS 原理图DDS 频率合成原理相位累加器的输入为频率控制字 phase。输出正弦波时,RAM 中存有一个周期正弦波波形取样点幅度值的编码,取样点数为 2N 个。在外部时钟的控制下,每来一个时钟,加法器将对被锁定的频率控制字 phase 与累加器输出的累积相位数据不断累加,输出的相位序列(即相位码) 作为地址去寻址 RAM,同时使 RAM 存储器将相应地址单元的离散的正弦幅度编码输出。该幅度码经过 D/ A 变换后得到模拟的阶梯电压,再经过低通滤波器平滑后,得到所需的正弦信号。当累加器的累积相位数超过2N 时,将该数减去 2N 作为初值再从头开始累加,如此不断循
8、环。在正弦波输出时,设DDS 的时钟频率为 f clk ,频率控制字为 phase ,相位累加器的位数为 N ,则 DDS 的输出频率为:f o = phase 3 f clk / 2 N (1)其中 f clk / 2 N 为频率分辨率,他由相位累加器的位数 N 决定。所以在 DDS 结构及参考时钟确定的前提下,通过控制 phase 就可以方便3 地控制输出频率 f o 。2.2 基本流程图基本流程图MATLAB/simulink 建模系统仿真转换成 VHDL语言引脚锁定下载/配置及实时测试测试和用示波器观察TLC5510 的VHDL 语言打包成模块原理图建立成模块图 4 设计基本流程图3、
9、模块设计、模块设计3.1 MATLAB 设计设计3.1.1 顶层原理图设计顶层原理图设计 其中元件 AltBus3、ADDER1、Dly1 和 Bus4 构成 DDS1 模块,产生调制波信号;AltBus2、ADDER4、Dly2 和 Bus5 构成 DDS2 模块;Bus1、Bus2 和 input 组成输入控制字;Bus6、ADDER6、Busconcatenation 和 inpunt1 组成的是载波控制字;input3、input4 和 n_to_1 multiplexer 构成的是二选一控制器,input4 端口输入的是内部信号,input1 模块是加入的由 tcl5510 控制的外
10、部高频信号。Output 锁定的是 FPGA 的高速 DA 转换器将数字信号转化为模拟信号。顶层原理图 5 如下;4 图 5 顶层原理图3.1.2 Smulink 模型仿真模型仿真在模型编辑窗口中选择 Simulink 下的 Statr 命令,开始仿真,等待仿真结束,双击SCOP 模块,打开 Scope 窗口。调频信号发生器的仿真结束结果如图 6 所示:图 6 MATLAB 仿真波形3.1.3 Signalcompiler 的使用的使用在 Simulink 中完成方正验证后,就需要将涉及转移到硬件上加以实现。这是整个DSP Builder 设计流程中最关键的一部,据此可以获得 FPGA 的 V
11、HDL RLT 代码。a、分析当前的模型5 双击模型中的 Signalcompiler 模块,单机 Analyze 按钮后,Signalcompiler 就会对模块进行分析,检验模型又没有错误。并在 MATLAB 主窗口弹出对话框,给出相关信心。若又错误存在,Signalcompiler 就会停止分析过程。并把错误信息显示在MATLAB 主窗口中;反之,在分析结束后打开 Signalcompiler 窗口。b、设置 Signalcompile在 Signalcompiler 窗口中 ,显示三个部分:1)项目设置选项 Project Setting Options。2)硬件编译流程 Hardwa
12、re Compilation。3)信息框 Message。Signalcompile 的设置都集中在项目设置部分。在 Device 下拉列表中选择需要的器件系列,本实验选择 Cyclone 系列。在 Synthesis(综合)下拉列表中选择综合器件,共又三个选择,此处选择 QuartusII。c、把模型文件 MDL 转换成 VHDL设置好 Device 和 Synthesis 后,右侧的硬件编译就会列出一个操作流程:1)Convert MDL to VHDL:将 MDL 转换成VHDL 文件。2)Synthesis:对转换好的 VHDL 文件进行综合。3)QuartusII:Quartus 编
13、译适配,生成变成文件。单机步骤 1)的图标,完成 Simulink 文件到 VHDL 文件的转换。转换完成后,在Message 提示框中,显示 Generated top level“fm”files,即顶层文件转换完成。若有错误在 Message 提示框中会有简短的提示。d、综合 Synthesis单机步骤 2)的图标,完成综合过程。 e、QuartusII 适配单机步骤 3)的图标,Quartus 完成编译适配的过程,生成变成文件,即.pof 文件和.sof 文件。6 3.2 QuartusII 设计设计3.2.1 顶层原理图模块顶层原理图模块在 QuartusII 软件中打开从 MATL
14、AB 中转换过来的工程文件,注意在自动生成的VHDL 语言(见附录二)里的断口处添加“clock1 : out std_logic;clock2 : out std_logic;”语句,在“end architecture aDspBuilder;”之前添加“clock1=clock; clock2=clock; ”语句。将 VHDL 语言打包成模块如图所示。其中 clock 与 AD5510 的clk 相连,接外部输入;sclrp 接清零信号;intput9:0接 AD5510 的 dout7:0;input14;0和 input 分别锁定试验箱的按键(引脚图)input4 锁定按键控制选择
15、内、外的调制波。3.2.2 高速高速 A/D 转换器转换器 TLC55101)控制程序和模块TLC5510 控制程序见附录一。 TLC5510 控制模块如图 8,oe 为复位信号;din7:0接外部时钟信号; 为 clk 接外部时钟信号,与模块 fm 的 clock 相连。2)TLC5510 引脚图级说明TLC5510 24 引脚。POSP 表贴封装形式(NS)。其引脚排列如图 9 所示:各引脚功能如下:AGND:模拟信号地;ANALOGIN:模拟信号输入端;CLK:时钟输入端;DGND:数字信号地;D1D8:数据输出端口。D1 为数据最低位,D8 为最高位;OE:输出使能端。当 OE 为低时
16、,D1D8 数据有效,当 OE 为高时,D1D8 为高阻抗;VDDA:模拟电路工作电源;VDDD:数字电路工作电源;REFTS:内部参考电压引出端之一,当使用内部电压分压器产生额定的 2V 基准电压时,此端短路至 REFT 端;REFT:参考电压引出端之二;REFB:参考电压引出端之三;REFBS:内部参考电压引出端之四,当使用内部电压基准器产生额定的 2V 基准电压时,此端短路至 REFB 端。7 3.2.3 调试与操作说明调试与操作说明1)引脚锁定如图 10 所示图 10 引脚锁定图2)嵌入逻辑分析仪按图 11 所示嵌入分析仪,进行参数设置。首先选择工作时钟信号 Clock,单机Clock
17、 文本框右侧的”按钮。接着在 Data 栏的Sample depth 下拉菜单中选择信号深度为 2k。 3)编译下载,选择模式 NO.5选定 Processing 下的 Start Compilation 命令,启动编译下载。4)启动逻辑分析仪查看波形如图 128 图 12 实验波形 3.2.4 顶层文件设计顶层文件设计为建立顶层文件,首先必须打开原理图编辑器。调出所需要的元件,其中 Tcl5510模块为驱动模块。按图 13 连接好电路,并且保存。整个电路主要有 fm 和 cl5510 模块组成。Tcl5510 是高速模数转换芯片,主要是将外部送入的信号进行模数转换,送入fm 进行频率调制。f
18、m 模块中本来就设计成了内部调制功能,所以该电路既可以队内部信号进行调制,又可以对外部信号进行调制。fm 是核心部分,外部和内部的信号都是在此芯片的功能下进行调制的,然后进行编译下载和调试后就可以在 FPGA 上实现。在示波器上观察波形。以该原理图为顶层文件,建立工程。选择仿真器和综合器。必要设置:选择FPGA 目标芯片,和工作模式 ,选择配置器件和编程方式。然后进行编译,若编译错误,一次修改。若仿真成功,则进行引脚锁定和下载。选择工作模式 NO5,按照 EDA实验指导书以及要求进行引脚锁定。9 clocksclrpInput37.0Input4inpuntinput13.0clock1clo
19、ck2Output9.0fminst5VCCinput4INPUTVCCinputINPUTsclrpOUTPUTclock1OUTPUTclock2OUTPUTVCCinput13.0INPUTVCCdin7.0INPUToutput9.0OUTPUTVCCclockINPUTclkdin7.0oedout7.0tlc5510instPIN_28PIN_167PIN_144PIN_208PIN_207PIN_228PIN_194PIN_227PIN_193PIN_214PIN_213PIN_233PIN_234PIN_235PIN_236PIN_237PIN_240PIN_239PIN_14
20、0PIN_139PIN_138PIN_137PIN_136PIN_135PIN_134PIN_133PIN_132PIN_128图 13 顶层文件原理图4、问题分析、问题分析在这次课程设计的整个过程中,我们小组三人遇到了很多问题。在利用 MATLAB软件设计顶层原理图时,所有需要的器件都找不到,后来在田汗平老师的指导下,才发现 MATLAB 的存放元器件的目标文件夹设置错误,改正之后问题得到了解决。在进行 simulink 波形仿真后,我们看到的波形出现了失真,并且模糊不清,经过两人的讨论以及反复修改频率控制字之后,终于得到了较为理想的的波形。最后田老师来验收的时候,粗心的我们才发现在整个实验
21、设计中,我们漏掉了一个二选一选择器,以至于“对外部信号进行调制”这一功能不能实现,经过田老师的悉心指导,这一问题也得到了解决。5、心得体会、心得体会以上为我们小组在这次课程设计期间所取得的成果,设计的调频信号发生器基本上能实现对 FPGA 内部的低频信号进行调制的功能,而且对于外部幅度小于 4V 的低频10 模拟信号有一定的调制作用,但因为时间短促,加上水平有限,调制效果不是非常明显,还需要进一步改进。另外,通过这次为期两周的课程设计,我们小组都觉得有很大的收获,首先,通过这次实际操作,使我们对课本上的相关知识有了更深的了解和认识,也让我们明白了“理论联系实际”的重要性,其次,这次课程设计让我
22、们学会了如何发现问题、分析问题、解决问题。最后,我们学会了团队合作的重要性,这对于以后的实际工作有很好的指导作用。6、元件清单、元件清单表 1 元件清单元件名数量备注PC 机一台联想EDA 实验箱一台GW48PK2数字示波器一台ADS7022S函数信号发生器一台CA1640027、致谢、致谢 此次课程设计之所以能够顺利完成,除了我们自身的努力之外,还得感谢田汉平老师、岳舟老师以及同学们对我们的悉心指导和帮助。在整个设计过程中,两位老师都全程陪同,细心并耐心的指出了我们实验当中的不足,并且给了很好的指导性意见,让我们的设计少走了很多弯路。再次对所有在这次设计中给予我们帮助的老师和同学表示感谢。1
23、1 附录一附录一 AD5510 控制程序控制程序library ieee;use ieee.std_logic_1164.all;entity tlc5510 is port(clk :in std_logic; -系统时钟 oe :out std_logic; -TLC5510 的输出使能/OE din:in std_logic_vector(7 downto 0); -来自 TLC5510 的采样数据 dout:out std_logic_vector(7 downto 0); -FPGA 数据输出end tlc5510;architecture behav of tlc5510 issi
24、gnal q:integer range 3 downto 0;beginprocess(clk) -此进程中,把 CLK 进行 4 分频,得到 TLC5510 的转换时钟beginif clkevent and clk=1 then if q=3 then q=0; else q=q+1; end if;end if;end process;oe=0; -输出使能赋低电平 dout=din; -采样数据12 输出 end behav;附录二附录二 顶层文件程序顶层文件程序- library ieee;use ieee.std_logic_1164.all;use ieee.std_logic
25、_signed.all;library dspbuilder;use dspbuilder.dspbuilderblock.all;library lpm;use lpm.lpm_components.all;Entity fm is Port(clock1 : out std_logic; clock2 : out std_logic;clock:in std_logic;sclrp :in std_logic:=0;Input3:in std_logic_vector(7 downto 0);Input4:in std_logic;inpunt:in std_logic;input1:in
26、 std_logic_vector(4 downto 0);Output:out std_logic_vector(9 downto 0) );end fm;architecture aDspBuilder of fm issignalSAOutputO:std_logic_vector(9 downto 0);signal sclr :std_logic:=0;signalA0W:std_logic_vector(8 downto 0);13 signalA1W:std_logic_vector(24 downto 0);signalA2W:std_logic_vector(16 downt
27、o 0);signalA3W:std_logic_vector(3 downto 0);signalA4W:std_logic_vector(3 downto 0);signalA5W:std_logic_vector(11 downto 0);signalA6W:std_logic;signalA7W:std_logic_vector(5 downto 0);signalA8W:std_logic_vector(11 downto 0);signalA9W:std_logic_vector(8 downto 0);signalA10W:std_logic;signalA11W:std_log
28、ic;signalA12W:std_logic_vector(5 downto 0);signalA13W:std_logic_vector(17 downto 0);signalA14W:std_logic_vector(25 downto 0);signalA15W:std_logic_vector(8 downto 0);signalA16W:std_logic_vector(4 downto 0);signalA17W:std_logic_vector(16 downto 0);signalA18W:std_logic_vector(8 downto 0);signalA19W:std
29、_logic_vector(19 downto 0);signalA20W:std_logic_vector(24 downto 0);signalA21W:std_logic_vector(8 downto 0);signalA22W:std_logic_vector(17 downto 0);signalA23W:std_logic_vector(9 downto 0);signalA24W:std_logic_vector(25 downto 0);signalA25W:std_logic_vector(7 downto 0);signalA26W:std_logic_vector(10
30、 downto 0);signalA27W:std_logic_vector(9 downto 0);signalA28W:std_logic_vector(7 downto 0);signal datasub16_0Mux:std_logic_vector(8 downto 0);signal datasub16_1Mux:std_logic_vector(8 downto 0);signal data_16_muxin:std_logic_vector(17 downto 0);signal Sel_16_Mux:std_logic_vector(0 downto 0);Beginasse
31、rt (10) report altversion severity Note;14 Output= SAOutputO;- Global reset circuitry for the input global reset sclrpsclr= sclrp;- Input - I/O assignment from Simulink Block Input3A9W(7 downto 0) = Input3;A9W(8) = 0;- Input - I/O assignment from Simulink Block Input4A10W = Input4;- Input - I/O assi
32、gnment from Simulink Block inpuntA11W = inpunt;- Input - I/O assignment from Simulink Block input1A12W(4 downto 0) = input1;A12W(5) = 0;A0W(8)= 0;A1W(24)= 0;A2W(16)= 0;- Constant assignment - Simulink Block Constant6A3W(3)= 0;A3W(2 downto 0)= 000;- Constant assignment - Simulink Block Cst1A4W(3)= 0;
33、A4W(2 downto 0)= 000;- Constant assignment - Simulink Block Cst2A5W(11)= 0;A5W(10 downto 0)= 00000000000;- Constant assignment - Simulink Block Cst3A6W= 0;- Constant assignment - Simulink Block Cst6A7W(5)= 0;A7W(4 downto 0)= 00000;- Constant assignment - Simulink Block Cst7A8W(11)= 0;A8W(10 downto 0
34、)= 00000000000;datasub16_0Mux(7 downto 0)= A25W(7 downto 0);15 datasub16_0Mux(8)= A25W(7);datasub16_1Mux= A9W;data_16_muxin= datasub16_1Mux & datasub16_0Mux;Sel_16_Mux(0)= A10W;- Concatenation Operation - Simulink Block Bus1A16W(3 downto 0) = A11W & A4W(2 downto 0);A16W(4)=0;- Concatenation
35、Operation - Simulink Block Bus2A17W(15 downto 0) = A5W(10 downto 0) & A16W(4 downto 0);A17W(16)=0;- Concatenation Operation - Simulink Block Bus6A18W(7 downto 0) = A6W & A15W(6 downto 0);A18W(8)=0;- Concatenation Operation - Simulink Block Bus7A19W(18 downto 0) = A0W(7 downto 0) & A8W(10
36、 downto 0);A19W(19)=0;- Concatenation Operation - Simulink Block Bus8A20W(23 downto 0) = A7W(4 downto 0) & A19W(18 downto 0);A20W(24)=0;- Concatenation Operation - Simulink Block BusConcatenationA21W(7 downto 0) = A12W(4 downto 0) & A3W(2 downto 0);A21W(8)11,width_inr=0,width_outl=10,width_o
37、utr=0,lpm_signed=BusIsUnsigned,round=0,satur=0)port map (xin=A26W,yout=SAOutputO);16 -Bus Formatting Simulink Block AltBusAltBusi : SBF generic map(width_inl=10,width_inr=0,width_outl=8,width_outr=0,lpm_signed=BusIsUnsigned,round=0,satur=0)port map (xin = A23W,yout= A0W(7 downto 0);-Bus Formatting S
38、imulink Block AltBus2AltBus2i : SBF generic map(width_inl=26,width_inr=0,width_outl=24,width_outr=0,lpm_signed=BusIsUnsigned,round=0,satur=0)port map (xin = A14W,yout= A1W(23 downto 0);-Bus Formatting Simulink Block AltBus3AltBus3i : SBF generic map(width_inl=18,width_inr=0,width_outl=16,width_outr=
39、0,lpm_signed=BusIsUnsigned,round=0,satur=0)port map (17 xin = A13W,yout= A2W(15 downto 0);- Delay Element - Simulink Block Dly1Dly1i : SDelaygeneric map (LPM_WIDTH = 18,LPM_DELAY = 1,SequenceLength = 1,SequenceValue = 1)port map (dataa= A22W,clock= clock,ena = 1,sclr = sclr,result= A13W);- Delay Ele
40、ment - Simulink Block Dly2Dly2i : SDelaygeneric map (LPM_WIDTH = 26,LPM_DELAY = 1,SequenceLength = 1,SequenceValue = 1)port map (dataa= A24W,clock= clock,ena = 1,sclr = sclr,result= A14W);- Mux - Simulink Block nto1Multiplexernto1Multiplexeri : sMuxAltr generic map (lpm_pipeline =0,lpm_size =2,lpm_widths =1,lpm_width =9,SelOneHot =0)port map (clock= 0,ena = 1,18 sclr = 0,data = data_16_muxin,sel = Sel_16_Mux,result= A15W);- Sum Operator - Simulink Block ADDER1ADDER1i : SAdderSub generic map (lpm_width =17,pipeline = 0,SequenceLength = 1,SequenceValue = 1,AddSubVal = AddAdd)port map (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妇产科剖宫产护理问题
- 中国缓控释肥(缓-控释肥)行业市场规模测算逻辑模型 头豹词条报告系列
- 数字产业创新研究中心:2024中国研究报告
- 大班健康活动教案:我会旋转
- 肺病的养护与治疗
- 5的乘法口诀(教案)2023-2024学年数学 二年级上册
- 自理能力打卡活动主题
- 急性酒精中毒病人的护理
- 肺部重度感染护理查房
- 艾滋病的并发症
- 私募基金纠纷案件裁判指引
- 阴道流血症状护理
- 新疆维吾尔自治区2023年7月普通高中学业水平考试数学试卷
- 园林植物器官的识别-园林植物生殖器官的识别
- 炼钢厂安全生产教育培训课件
- 拼音四线三格A4打印版
- 机械专业职业生涯发展报告
- 生物技术为精准医疗注入新动力
- MBD数字化设计制造技术
- 部编版道德与法治五年级上册中华民族一家亲第一课时课件
- 2024年金融科技行业的数字化金融培训
评论
0/150
提交评论