硬件乐曲自动演奏电路设计_第1页
硬件乐曲自动演奏电路设计_第2页
硬件乐曲自动演奏电路设计_第3页
硬件乐曲自动演奏电路设计_第4页
硬件乐曲自动演奏电路设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、江西理工大学应用科学学院SOPC/EDA综合课程设计报告设计题目: 硬件乐曲自动演奏电路设计设 计 者: 学 号: 班 级: 指导老师: 王忠锋完成时间: 2012年01月6日设计报告综合测试总评格式(10)内容(40)图表(10)答辩(20)平时(20)目录前 言3乐曲硬件演奏电路EDA设计41设计要求42设计方案43原理描述53.1 音名与频率的关系53.2 控制音长的节拍发生器74乐曲硬件演奏电路的层次化设计方案74.1 音乐节拍发生器NoteTabs74.2 音符译码电路Tonetaba模块154.3数控分频模块(speaker)设计174.4乐曲硬件演奏电路顶层电路的设计和仿真215

2、实验总结与心得246参考文献25前 言乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数化库单元LPM器件。通过引入支持LPM的EDA软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。本课设在EDA开发平台上利用VHDL

3、语言设计数控分频器电路,利用数控分频的原理设计乐曲硬件演奏电路,以“欢乐颂”乐曲为例,将音乐数据存储到音乐节拍器中,就达到了以纯硬件的手段来实现乐曲的演奏效果。只要修改音乐节拍器所存储的音乐数据,将其换成其他乐曲的音乐数据,连接到程序中就可以实现其它乐曲的演奏。关键词:FPGA;EDA;VHDL;音乐乐曲硬件演奏电路EDA设计1设计要求利用可编程逻辑器件FPGA,设计一个乐曲硬件演奏电路。由键盘输入控制音响,同时可自动演奏乐曲。演奏时可选择键盘输入乐曲或者已存入的乐曲,并配以一个小扬声器。其结构如图所示,该设计产生的音乐选自欢乐颂片段。基准时钟12MHZ时钟电路数控分频器音乐节拍产生电路音符译

4、码电路图2.1乐曲演奏电路结构方框图2设计方案利用FPGA来实现乐曲硬件演奏电路。乐曲的12平均率规定:每2个八度(如简谱中的中音1与高音1)之间的频率相差1倍。在2个八度音之间,又可分为12个半音,每2个半音的频率比为12/2。另外,音符A的频率为440HZ,音符B到C之间,E到F之间为半音,其余为全音。由此可以计算出简谱中从低音l至高音1之间每个音符的频率。设计音符查找表电路模块,时钟模块,数控分频器模块,音乐节拍产生模块电路。3原理描述产生音乐的两个因素是音乐频率和音乐的持续时间(即音高和节拍),以纯硬件完成演奏电路比利用微处理器(CPU)来实现乐曲演奏要复杂的多如果不借助于功能强大的E

5、DA工具和硬件描述语言,凭借传统的数字逻辑技术,即使最简单的演奏电路也难以实现。根据设计要求,乐曲硬件演奏电路系统主要由数控分频器和乐曲存储模块组成。数控分频器对FPGA的基准频率进行分频,得到与各个音阶对应的频率输出。乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由计数器的计数时钟信号作为乐曲节拍控制信号。3.1 音名与频率的关系音乐的十二平均率规定:每两个八度音(如简谱中的中音与高音)之间的频率相差一倍在两个八度音之间,又可分为十二个半音,每两个半音的频率比为4。另外,音名(简谱中的低音)的频率为440Hz,音名B到C之间

6、,E到F之间为半音,其余为全音,由此可以计算出简谱中从低音1到高音1之间每个音名的频率如下表所示.表3-1简谱中的音名与频率的关系音名频率/Hz音名频率/Hz音名频率/Hz低音1261.63中音1532.25高音11046.50低音2293.67中音2587.33高音21174.66低音3329.63中音3659.25高音31318.51低音4349.23中音4698.46高音41396.92低音5391.99中音5783.99高音51567.98低音6440中音6880高音61760低音7493.88中音7987.76高音71975.52由于音阶频率多为非整数,而分频系数又不能为小数,故必须

7、将得到的分频数四舍五入取整。若基准频率过低,则由于分频系数过小,四舍五入取整后的误差较大,若基准频率过高,虽然误码差变小,但分频结构将变大。实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取舍合适的基准频率。本设计中选取4MHz的基准频率,若无4MHz的时钟频率,实际上,只要各个音名间的相对品频率关系不变,C作1与D作1演奏出的音乐听起来都不会“走调”。各音阶频率及相应的分频系数如下表所示。为了减少输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。由于最大的分频系数为7644,故采用13位二进制计数器已能满足分频要求。在下面表中除给

8、出了分频比以外,给出了对应于各个音阶频率时计数器不同的初始值,对于乐曲中的休止符,要将分频系数设为0,即初始值为8191即可,此时扬声器将不会发声。对于不同的分频系数,加载不同的初始值即可。用加载初始值而不是将分频输出译码反馈,可以有效地减少本设计占用可编程逻辑器件的资源,也是同步计数器的一个常用设计技巧。3.2 控制音长的节拍发生器该演奏电路演奏的乐曲是“欢乐颂”片段,其最小的节拍为1拍。将1拍的时长定为0.25秒,则只需要再提供一个4Hz的时钟频率即可产生1拍的时长,演奏的时间控制通过ROM查表的方式来完成。对于占用时间较长的节拍(一定是拍的整数倍),如全音符为4拍(重复4),2/4音符为

9、2拍(重复2),1/4音符为1拍(重复1)。要求演奏时能循环进行,因此需另外设置一个时长计数器,当乐曲演奏完成时,保证能自动从头开始演奏。该计数器控制真值表按顺序输出简谱。 4乐曲硬件演奏电路的层次化设计方案根据层次化的设计思路,可把乐曲硬件演奏电路分为三个模块,音乐节拍发生器NoteTabs模块,音符译码电路Tonetaba模块,数控分频模块(speaker)。下面给出其EDA设计过程:4.1 音乐节拍发生器NoteTabs该模块将利用FPGA的片内ROM存放乐曲简谱真值表,由一个二进制计数器为乐曲数据存储器ROM的地址发生器。该计数器的计数频率为4Hz,即每一计数值的停留时间为0.25秒,

10、随着NoteTaba中计数器按4Hz的时钟频率作加法计数时,即随地址值递增时,乐曲数据ROM中的音符数据,将从ROM中的输出口输向音符译码电路Tonetaba,所存储乐曲就开始连续自然地演奏起来。二进制计数器的位数将根据所存放乐曲简谱基本节拍数来决定,对于乐曲“欢乐颂”片段其节拍数为138,即选择计数器的位数为8即可。其VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY NoteTabs IS PORT ( clk : IN STD_LOGIC; ToneIndex : OUT INTEGER RANGE 0 TO 15 );EN

11、D;ARCHITECTURE one OF NoteTabs IS SIGNAL Counter : INTEGER RANGE 0 TO 138;BEGIN CNT8 : PROCESS(clk) BEGIN IF Counter = 138 THEN Counter <= 0; ELSIF (clk'EVENT AND clk = '1') THEN Counter <= Counter + 1; END IF; END PROCESS; Search : PROCESS(Counter) BEGIN CASE Counter IS WHEN 00 =&

12、gt; ToneIndex <= 10; WHEN 01 => ToneIndex <= 10; WHEN 02 => ToneIndex <= 10; WHEN 03 => ToneIndex <= 10; WHEN 04 => ToneIndex <= 10; WHEN 05 => ToneIndex <= 10; WHEN 06 => ToneIndex <= 10; WHEN 07 => ToneIndex <= 10; WHEN 08 => ToneIndex <= 11; WHEN

13、 09 => ToneIndex <= 11; WHEN 10 => ToneIndex <= 11; WHEN 11 => ToneIndex <= 11; WHEN 12 => ToneIndex <= 12; WHEN 13 => ToneIndex <= 12; WHEN 14 => ToneIndex <= 12; WHEN 15 => ToneIndex <= 12; WHEN 16 => ToneIndex <= 12; WHEN 17 => ToneIndex <= 12

14、; WHEN 18 => ToneIndex <= 12; WHEN 19 => ToneIndex <= 12; WHEN 20 => ToneIndex <= 11; WHEN 21 => ToneIndex <= 11; WHEN 22 => ToneIndex <= 11; WHEN 23 => ToneIndex <= 11; WHEN 24 => ToneIndex <= 10; WHEN 25 => ToneIndex <= 10; WHEN 26 => ToneIndex &l

15、t;= 10; WHEN 27 => ToneIndex <= 10; WHEN 28 => ToneIndex <= 9; WHEN 29 => ToneIndex <= 9; WHEN 30 => ToneIndex <= 9; WHEN 31 => ToneIndex <= 9; WHEN 32 => ToneIndex <= 8; WHEN 33 => ToneIndex <= 8; WHEN 34 => ToneIndex <= 8; WHEN 35 => ToneIndex <

16、;= 8; WHEN 36 => ToneIndex <= 8; WHEN 37 => ToneIndex <= 8; WHEN 38 => ToneIndex <= 8; WHEN 39 => ToneIndex <= 8; WHEN 40 => ToneIndex <= 9; WHEN 41 => ToneIndex <= 9; WHEN 42 => ToneIndex <= 9; WHEN 43 => ToneIndex <= 9; WHEN 44 => ToneIndex <=

17、10; WHEN 45 => ToneIndex <= 10; WHEN 46 => ToneIndex <= 10; WHEN 47 => ToneIndex <= 10; WHEN 48 => ToneIndex <= 10; WHEN 49 => ToneIndex <= 10; WHEN 50 => ToneIndex <= 10; WHEN 51 => ToneIndex <= 10; WHEN 52 => ToneIndex <= 10; WHEN 53 => ToneIndex

18、<= 10; WHEN 54 => ToneIndex <= 9; WHEN 55 => ToneIndex <= 9; WHEN 56 => ToneIndex <= 9; WHEN 57 => ToneIndex <= 9; WHEN 58 => ToneIndex <= 9; WHEN 59 => ToneIndex <= 9; WHEN 60 => ToneIndex <= 9; WHEN 61 => ToneIndex <= 9; WHEN 62 => ToneIndex &l

19、t;= 9; WHEN 63 => ToneIndex <= 9; WHEN 64 => ToneIndex <= 10; WHEN 65 => ToneIndex <= 10; WHEN 66 => ToneIndex <= 10; WHEN 67 => ToneIndex <= 10; WHEN 68 => ToneIndex <= 10; WHEN 69 => ToneIndex <= 10; WHEN 70 => ToneIndex <= 10; WHEN 71 => ToneInde

20、x <= 10; WHEN 72 => ToneIndex <= 11; WHEN 73 => ToneIndex <= 11; WHEN 74 => ToneIndex <= 11; WHEN 75 => ToneIndex <= 11; WHEN 76 => ToneIndex <= 12; WHEN 77=> ToneIndex <= 12; WHEN 78 => ToneIndex <= 12; WHEN 79 => ToneIndex <= 12; WHEN 80 => Ton

21、eIndex <= 12; WHEN 81 => ToneIndex <= 12; WHEN 82 => ToneIndex <= 12; WHEN 83 => ToneIndex <= 12; WHEN 84 => ToneIndex <= 11; WHEN 85=> ToneIndex <= 11; WHEN 86 => ToneIndex <= 11; WHEN 87 => ToneIndex <= 11; WHEN 88 => ToneIndex <= 10; WHEN 89 =>

22、; ToneIndex <= 10; WHEN 90 => ToneIndex <= 10; WHEN 91 => ToneIndex <= 10; WHEN 92 => ToneIndex <= 9; WHEN 93 => ToneIndex <= 9; WHEN 94 => ToneIndex <= 9; WHEN 95 => ToneIndex <= 9; WHEN 96 => ToneIndex <= 8; WHEN 97 => ToneIndex <= 8; WHEN 98 =>

23、; ToneIndex <= 8; WHEN 99 => ToneIndex <= 8; WHEN 100 => ToneIndex <= 8; WHEN 101 => ToneIndex <= 8; WHEN 102 => ToneIndex <= 8; WHEN 103 => ToneIndex <= 8; WHEN 104 => ToneIndex <= 9; WHEN 105 => ToneIndex <= 9; WHEN 106 => ToneIndex <= 9; WHEN 107

24、 => ToneIndex <= 9; WHEN 108 => ToneIndex <= 10; WHEN 109 => ToneIndex <= 10; WHEN 110 => ToneIndex <= 10; WHEN 111 => ToneIndex <= 10; WHEN 112 => ToneIndex <= 9; WHEN 113 => ToneIndex <= 9; WHEN 114 => ToneIndex <= 9; WHEN 115 => ToneIndex <= 9

25、; WHEN 116 => ToneIndex <= 9; WHEN 117 => ToneIndex <= 9; WHEN 118 => ToneIndex <= 8; WHEN 119 => ToneIndex <= 8; WHEN 120 => ToneIndex <= 8; WHEN 121 => ToneIndex <= 8; WHEN 122 => ToneIndex <= 8; WHEN 123 => ToneIndex <= 8; WHEN 124 => ToneIndex &

26、lt;= 8; WHEN 125 => ToneIndex <= 8; WHEN 126 => ToneIndex <= 8; WHEN 127 => ToneIndex <= 8; WHEN 128 => ToneIndex <= 0; WHEN 129 => ToneIndex <= 0; WHEN 130 => ToneIndex <= 0; WHEN 131 => ToneIndex <= 0; WHEN 132 => ToneIndex <= 0; WHEN 133 => ToneI

27、ndex <= 0; WHEN 134 => ToneIndex <= 0; WHEN 135 => ToneIndex <= 0; WHEN 136 => ToneIndex <= 0; WHEN 137 => ToneIndex <= 0; WHEN 138 => ToneIndex <= 0; WHEN OTHERS => NULL; END CASE;END PROCESS;END;音乐节拍发生器的仿真输出波形文件如图4.1(a)所示,分析可知仿真结果正确无误,将以上设计的音乐节拍发生器电路设置成可调用的元件,以备

28、高层设计中使用,其元件符号如图4.1(b)所示(a) (b) 图4.1音乐节拍发生器 (a) 仿真输出波形(b)元件符号图图4.2欢乐颂曲谱4.2 音符译码电路Tonetaba模块音符译码电路即音调发生器实际上是一个查表电路,放置21个音乐简谱对应的频率表,根据该表为数控分频模块(speaker)提供所发音符频率的初始值,而此数在数控分频模块入口的停留时间即为此音符的节拍数,不失一般性,以下VDHL程序中仅设置了“欢乐颂”乐曲全部音符所对应的音符频率的初始值,共16个,每个音符停留时间由音乐节拍发生器的时钟频率决定,在此为4Hz信号,这16个值的输出由对应于音符译码电路的4位输入值Index3

29、.0确定,该值中音符的停留时间由音乐节拍发生器中的音符数据决定,该数据重复的次数为该音符的节拍数,如为2则为四二拍,如为4则为四四拍即全音符。其VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; HIGH : OUT STD_LOGIC; Tone : OUT STD_LOGIC_VECTOR (12 DOWNTO 0) )

30、;END;ARCHITECTURE one OF ToneTaba ISBEGINPROCESS(Index) BEGIN CASE Index IS WHEN "0000" => Tone<="1111111111111" ; CODE<="0000" HIGH <='0'- 8191 WHEN "0001" => Tone<="1000100010001" ; CODE<="0001" HIGH <='

31、;0'- 4369; WHEN "0010" => Tone<="1001010110010" ; CODE<="0010" HIGH <='0'- 4786; WHEN "0011" => Tone<="1010000011111" ; CODE<="0011" HIGH <='0'-5151; WHEN "0101" => Tone<="101

32、1000001000" ; CODE<="0101" HIGH <='0'-5640; WHEN "0110" => Tone<="1011100011110" ; CODE<="0110" HIGH <='0'-5918; WHEN "0111" => Tone<="1100000010110" ; CODE<="0111" HIGH <='0&

33、#39;-6166; WHEN "1000" => Tone<="1100010001000" ; CODE<="0001" HIGH <='1'-6280; WHEN "1001" => Tone<="1101100001001" ; CODE<="0010" HIGH <='1'-6921; WHEN "1010" => Tone<="11010000

34、10010" ; CODE<="0011" HIGH <='1'-6674; WHEN "1100" => Tone<="1101001100111" ; CODE<="0101" HIGH <='1'-6759; WHEN "1101" => Tone<="1101110001110" ; CODE<="0110" HIGH <='1'-

35、7054; WHEN "1111" => Tone<="1110001000010" ; CODE<="0001" HIGH <='1'-7234; WHEN OTHERS => Tone<="1111111111111" ; CODE<="0000" HIGH <='0' END CASE; END PROCESS;END;在源程序中Index3.0是音乐节拍发生器输出的音符数据; TONE12.0是为数控分频模块

36、提供的音符频率初始值,为方便测试,特设置一个音名代码显示输出CODE3.0和音高指示信号HIGH,可以通过一个数码管或LED来显示乐曲演奏时对应的音符和高音名。音符译码电路Tonetaba模块的仿真输出波形如图4.2(a)所示, 例如当输入Index=9,产生的分频系数便是6921,CODE输出对应该音阶简谱的显示数码2,high输出为高电平,指示音阶为高音,high输出为低电平时则指示音阶为中音,分析可知仿真结果正确无误。将以上设计的音符译码电路Tonetaba设置成可调用的元件,以备高层设计中使用,其元件符号如图4.2(b)所示: (a) (b) 图4.3 音符译码电路Tonetaba(a

37、) 仿真输出波形;(b)元件符号图4.3数控分频模块(speaker)设计数控分频器对FPGA的基准频率进行分频,得到与各个音阶对应的频率输出。数控分频模块是由一个初值可变的13位加法计数器构成。该计数器的模为8192,当计数器计满时,产生一个进位信号FullSpkS,该信号就是用作发音的频率信号。在计数器的预置端给定不同的初值,其输出将产生不同的频率信号,频率信号初值Tone就是前级音符译码电路Tonetaba的输出,它计满所需要的分频比可由下式决定: Tone12.0+ 分频比=8192+进位信号FullSpkS 结合表4-1和以上分析式可知,低音时,Tone值小,分频比大,进位信号Spk

38、S的周期长,扬声器发出的声音低,Tone随音乐的乐谱而变化,自动控制分频比,从而实现数控分频,发生信号的频率与Tone成正比,这就是利用数控分频器自动演奏音乐的原理。音名分频系数初始值音名分频系数初始值音名分频系数初始值低音17644547中音138224369高音119116280低音268101381中音234054786高音212706921低音360672124中音330345157高音315176674低音457272464中音428645327高音414326759低音551023089中音525515640高音512566935低音645453646中音622735918高音61

39、1377054低音740504141中音720256166高音710137178表4-1各音阶频率对应的分频值数控分频器的输入时钟频率为4MHz,通过分频后其进位信号FullSpkS是一周期脉冲信号,为有利于驱动扬声器,在音调输出时再进行二分频,将脉冲展宽,使之占空比为50%,扬声器这样就有足够的发声功率。其VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera IS PORT ( clk : IN STD_LOGIC; Tone : IN STD_LO

40、GIC_VECTOR (12 DOWNTO 0); SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speakera IS SIGNAL PreCLK, FullSpkS : STD_LOGIC;BEGIN DivideCLK : PROCESS(clk)VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ;BEGIN PreCLK <= '0' IF Count4>11 THEN PreCLK <= '1' Count4 := "0000&qu

41、ot; ELSIF clk'EVENT AND clk = '1' THEN Count4 := Count4 + 1; END IF;END PROCESS; GenSpkS : PROCESS(PreCLK, Tone) VARIABLE Count13 : STD_LOGIC_VECTOR (12 DOWNTO 0);BEGINIF PreCLK'EVENT AND PreCLK = '1' THENIF Count13 = 16#1FFF# THEN Count13 := Tone ; FullSpkS <= '1'

42、 ELSE Count13 := Count13 + 1; FullSpkS <= '0'END IF;END IF;END PROCESS; DelaySpkS : PROCESS(FullSpkS) VARIABLE Count2 : STD_LOGIC;BEGINIF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2; IF Count2 = '1' THEN SpkS <= '1' ELSE SpkS <= '0'

43、; END IF;END IF;END PROCESS;END;VHDL程序的第一个进程,首先对FPGA的MHz的时基脉冲按照tone输入的分频系数对MHz的脉冲分频,得到所需要的音符频率;第二个进程的作用是在音调输出时再进行二分频,将脉冲展宽,使扬声器有足够发声功率。数控分频模块的仿真输出波形和元件符号如图所示, 当输入Tone=6280,产生高音的发声频率信号SpkS。(a)(b)图4.4数控分频模块图(a) 仿真输出波形(b)元件符号图4.4乐曲硬件演奏电路顶层电路的设计和仿真乐曲硬件演奏电路顶层电路分为三个模块,音乐节拍发生器NoteTabs模块,音符译码电路Tonetaba模块,数控

44、分频模块(speaker),如图所示的是顶层电路原理图。图4.5乐曲硬件演奏电路顶层原理图CLK为音调频率信号为4MHz,CLK8HZ是乐曲硬件演奏电路节拍频率信号为8Hz;index为手控输入的音符数据;auto为手动/自动选择按扭,auto=1时为自动演奏,auto=0时为手动输入。CODE简谱码输出显示,HIGH为高8度指示,Sp为声音频率输出。其顶层设计的VHDL程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY m_top IS PORT ( CLK4hz : IN STD_LOGIC; CLK4mhz : IN STD_LOGIC; CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; HIGH1 : OUT STD_LOGIC; SPK : OUT STD_LOGIC );END;ARCHITECTURE one OF m_top IS COMPONENT Note

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论