音樂播放器試驗(yàn)報告_第1頁
音樂播放器試驗(yàn)報告_第2頁
音樂播放器試驗(yàn)報告_第3頁
音樂播放器試驗(yàn)報告_第4頁
音樂播放器試驗(yàn)報告_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)報告成績:設(shè)計(jì)型同組學(xué)生姓名:無二、實(shí)驗(yàn)內(nèi)容和原理(必填)四、操作方法和實(shí)驗(yàn)步驟六、實(shí)驗(yàn)結(jié)果與分析(必填)課程名稱:數(shù)字系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)1指導(dǎo)老師:實(shí)驗(yàn)名稱:音樂播放實(shí)驗(yàn)實(shí)驗(yàn)類型:一、實(shí)驗(yàn)?zāi)康暮鸵螅ū靥睿┤?、主要儀器設(shè)備(必填)五、實(shí)驗(yàn)數(shù)據(jù)記錄和處理七、討論、心得1、 實(shí)驗(yàn)?zāi)康暮鸵?、掌握音符產(chǎn)生的方法,了解DDS技術(shù)的應(yīng)用。2、了解AC97音頻接口電路的應(yīng)用。3、掌握系統(tǒng)“自頂而下”的設(shè)計(jì)方法。2、 實(shí)驗(yàn)內(nèi)容和原理i實(shí)驗(yàn)內(nèi)容:設(shè)計(jì)一個音樂播放器ii實(shí)驗(yàn)原理:系統(tǒng)劃分為主控制器(mcu)、樂曲讀?。╯ong_reader)、音符播放器(note_player)、AC97音頻接口(codec

2、_conditioner)和ac97_if五個子模塊。系統(tǒng)圖如下:$flng._done按僵處理模塊樂曲讀取TieWROI空playbutton!SoGigLEDresetnnextsample圖6,30系統(tǒng)的總體框圖主控制器pH,riiinextbutton;next->-ysamplenotednnq1»1Pl;3l音符播放codecconditioTier聞詁丁沁、not%duration|"xCodeccomnedionmcu接收按鍵信息,通知song_reader是否要播放(play)以及播放播放哪一首歌曲(song)。song_r

3、eader模塊根據(jù)mcu要求逐個取出音符note,duration送給note_player,樂曲播放完畢回復(fù)(song_done)給mcu。note_player接收音符后以48kHz速率送出該音符的正弦波樣品給AV97音頻接口模塊。當(dāng)一個音符播放結(jié)束,向song_reader回復(fù)note_done。codec_conditioner、ac97_if負(fù)責(zé)與AC97接口工作。另外,&鍵處理模塊完成葡人同步化、防顫動和脈沖變換等功能。主要儀器設(shè)備帶modelsim和ISE的PC機(jī),XUPVirtex-IIPro開發(fā)系統(tǒng)一套四、設(shè)計(jì)過程1.音符播放器(note_player)的設(shè)計(jì)主要任務(wù)

4、有:從song_reader模塊接收所需播放的音符信息note,duration;根據(jù)note值找出DDS的相位增量;以48khz的速率從sinerom取出正弦樣品送給AC97接口模塊;當(dāng)一個音符播放完畢,向song_rom模塊索取新的音符。Note_palyer的結(jié)構(gòu)框圖如下:圖6.35notc_payer模塊的結(jié)構(gòu)框圖各個端口含義如下:引事名,g*WfflelkInput100MHz時伸信號Input契位信號,哥電平有城ptsy.CMbbeinput來自tneu模塊.高電平措敢Input來自Mjngjxadfr粳坡的音符標(biāo)記durHti£Hi_U3lJc4d(5:0Input來自

5、皿膽皿1曲橫觀的音符持域時間_Input來自MxgZurm疑,一個時蚌胸期寬修梢立電干赫聲密示新的看解物也d0i>c_wiih.notcOuipuE給出模塊應(yīng)答括號,葉酎忡闔期量度的高屯平肱泮襲術(shù)齊特指設(shè)完.gtwniir.rtexOwTipleInput來自皿面聞汕g模塊的新的正弦樣品清竄侑%弊等曲曲,正臉沖.寬度小時髀樹期"翻立一_beaiInput4S1H1徜弓肽珅,正M沖寬度一個時科冏期(1國1-,可由2比值r_(»«L皿n出7號分地廣得到LmnilKnuE(1501Quipvt正弦杵8一new_!i*mple-readyOutput7Mmdww模跳

6、的控制信號,-個時仲固期寬度的高電平觸針取"知岬上研品輸出(1)DDS設(shè)計(jì)DDS的主要思想是,從相位的概念除法合成所需的波形,其結(jié)構(gòu)由相位累加器,相位-幅值轉(zhuǎn)換器、D/A轉(zhuǎn)換器和低通濾波器組成。SineROM中存放一個完整的正弦信號樣品,其映射關(guān)系為s(i)=(2A(n-1)-1)*sin(2*pi*i/2An)。其中,m為SineROM的地址線位數(shù),n為rom的數(shù)據(jù)線寬度,s(i)數(shù)據(jù)形式為補(bǔ)碼。f為取樣時鐘clk的頻率,k為相位增量。輸出正弦信號頻率fo=k*f/2Am?;驹砜驁D如rtv,addr2L0|口叫皿山11romPduulraw3ddt-2iL-LDj-敗據(jù)處理地址

7、處理SineROM>rb"isampkl_%下:si卬S12CE."匹Derateresei一圖6,37sinereadcr原理H瑞.DDS的優(yōu)化:為了減少硬件復(fù)雜性,降低芯片面積和功耗,提高芯片速度,對DDS進(jìn)行了優(yōu)化,利用正弦波的對稱性,只需要存儲四分之一的正弦信號樣品就可以提供整個波形。需要注意的是:SineROM存放的是四分之一的波形,因此一個完整的正弦波形存儲容量需要多兩位。四分之一周期未給出地址為1024時的值,這一點(diǎn)取1023的值(1023時樣品已經(jīng)達(dá)到最大值)。為了得到準(zhǔn)確的正弦頻率,本實(shí)驗(yàn)的相位增量為22位,其中小數(shù)部分為10位。根據(jù)地址的高兩位,我

8、們可以把正弦信號分為四個區(qū)域,如右圖所示在每個區(qū)域的地址和數(shù)據(jù)的處理方法見下表區(qū)域SineROM地址(njin_addr)SaHiplc備注00rav_addr19:l0,、rawdatafl5:001zrawZiddr20:IO=1OM時:rom_iikrZ023,”歹情況京5版尸444鏟向+raiA_data(15:01024*raw_ad<lrl19:1010-raw_daral5:QJ+數(shù)據(jù)取反LJ當(dāng)raw/addrROd0=1商時;卬山_溫速1023二情況-rawdAtal5:0+1數(shù)據(jù)取反;-raw_addrl9:10+1Sine_reader代碼(i)相位累加器full_a

9、dder:modulefull_adder(in1,in2,adderout,co);parameterN=1;inputN-1:0in1,in2;outputN-1:0adderout;outputregco;wireN-1:0in1,in2;regN-1:0adderout;always(in1orin2)beginco,adderout=in1+in2;endendmodule(ii)地址處理模塊address_dealenmoduleaddress_dealer(raw_addr,rom_addr);inputwire21:0raw_addr;outputreg9:0rom_addr;

10、always(*)begincase(raw_addr21:20)2'b00:rom_addr<=raw_addr19:10;2'b01:if(raw_addr20:10=1024)rom_addr<=1023;elserom_addr<=(raw_addr19:10+1);2'b10:rom_addr<=raw_addr19:10;2'b11:if(raw_addr20:10=1024)rom_addr<=1023;elserom_addr<=(raw_addr19:10+1);default:rom_addr<=10

11、'b0;endcaseendendmodule進(jìn)行地址處理,輸入SineROM中(iii)數(shù)據(jù)處理模塊data_dealer:moduledata_dealer(ctrl,raw_data,sample);inputwirectrl;inputwire15:0raw_data;outputreg15:0sample;always(*)begincase(ctrl)1:sample<=raw_data15:0;0:sample<=(raw_data15:0+1);default:sample<=16'b0;endcaseendendmodule進(jìn)行數(shù)據(jù)處理(iv

12、)D觸發(fā)器無使能及重置端moduledff(d,clk,q);inputclk;inputd;outputregq;always(posedgeclk)beginq<=d;endendmodule有使能端無重置端moduledffen(d,en,clk,q);parameterWIDTH=1;inputen,clk;inputWIDTH-1:0d;outputregWIDTH-1:0q;always(posedgeclk)beginif(en)q<=d;elseq<=q;endendmodule有使能端及重置端moduledffren(d,reset,clk,q,en);pa

13、rameterWIDTH=1;inputreset,en;inputclk;inputWIDTH-1:0d;outputWIDTH-1:0q;regWIDTH-1:0q;always(posedgeclk)beginif(reset)q<=WIDTH1'b0;elseif(en)q<=d;elseq<=q;endendmodule(v)頂層模塊sine_reader:odulesine_reader(clk,reset,generate_next_sample,step_size,sample_out,new_sample_ready);inputclk,reset;

14、input19:0step_size;inputgenerate_next_sample;outputwire15:0sample_out;outputwirenew_sample_ready;wire21:0raw_addr;wire21:0d1;/workoutfulladder其中2'b00,step_size將20位的step_size轉(zhuǎn)化為22位,實(shí)現(xiàn)與raw_addr的對位相力口。full_adder#(22)full_adder(.in1(raw_addr),.in2(2'b00,step_size),.adderout(d1),.co();/workoutdff

15、endffren#(22)dffren(.reset(reset),.d(d1),.clk(clk),.en(generate_next_sample),.q(raw_addr);/workoutaddress_dealerwire9:0rom_addr;address_dealeraddressdealer(.raw_addr(raw_addr),.rom_addr(rom_addr);/workoutsine_romwire15:0raw_data;sine_romsine_rom(.addr(rom_addr),.clk(clk),.dout(raw_data);/workoutdata

16、_dealerwire15:0sample;data_dealerdatadealer(.ctrl(raw_addr21),.raw_data(raw_data),.sample(sample);/workoutdffendffen#(16)dffen(.d(sample),.clk(clk),.en(generate_next_sample),.q(sample_out);/workoutdffdffdff(.d(generate_next_sample),.clk(clk),.q(new_sample_ready);endmodule頂層模塊將各個模塊進(jìn)行連接(vi)利用modelsim仿

17、真波形如下:|出置a除局部放大圖:圖中g(shù)enerate_next_sample為來自conec_conditioner的正弦請求信號。當(dāng)需要新的正弦信號波形為高電平時,就會輸出新的正弦信號,這與sine_reader的邏輯功能是匹配的。音符定時器:為一個6位二進(jìn)制計(jì)數(shù)器,beat、timer_clear分別為時能、清0信號,均為高電平有效,定時時間為音符的長短(duration_to_load個beat周期),timer_clear為定時結(jié)束標(biāo)志。音符定時器note_timer:modulenote_timer(beat,duration_to_load,clk,timer_clear,tim

18、er_done);inputwireclk,beat,timer_clear;inputwire5:0duration_to_load;outputwiretimer_done;reg5:0counter;always(posedgeclk)beginif(timer_clear)counter<=0;elseif(beat)counter<=counter+1;elsecounter<=counter;endassigntimer_done=(counter=duration_to_load)?1:0;endmodule(3)note_player控制器及頂層模塊:根據(jù)控制

19、器的算法流程圖可設(shè)計(jì)一段式狀態(tài)機(jī)程序;實(shí)驗(yàn)已經(jīng)提供了note_player的頂層結(jié)構(gòu)的大部分代碼,補(bǔ)充了sine_reader和timer的端口接口。設(shè)計(jì)時為簡潔,將前者也力口入至Unote_player中:modulenote_player(clk,reset,play_enable,note_to_load,duration_to_load,done_with_note,load_new_note,beat,generate_next_sample,sample_out,new_sample_ready/state);inputclk;inputreset;/Whenhighweplay,

20、whenlowwedon't.inputplay_enable;/Thenotetoplayinput5:0note_to_load;/Thedurationofthenotetoplayinput5:0duration_to_load;/Tellsuswhenwehaveanewnotetoloadinputload_new_note;/Whenwearedonewiththenotethisstayshigh.outputdone_with_note;/regdone_with_note;/Thisisour1/48thsecondbeatinputbeat;/Tellsuswhe

21、nthecodecwantsanewsampleinputgenerate_next_sample;/Oursampleoutputoutput15:0sample_out;/Tellsthecodecwhenwe'vegotasampleoutputnew_sample_ready;/一-sine_read?£?eeay-/wire19:0step_size;sine_readersine_reader_inst(.clk(clk),.reset(reset),/.step_size(10'd18,10'd791),.step_size(step_size)

22、,.generate_next_sample(generate_next_sample),/?.new_sample_ready(new_sample_ready),.sample_out(sample_out);/note_play?+x'?u/parameterRESET=0,PLAY=1,LOAD=2,DONE=3;reg1:0state;regdone_with_note;regtimer_clear;wiretimer_done;reg5:0note;/assignen=(state=PLAY);/assigndone_with_note=(state=DONE);alway

23、s(posedgeclk)if(reset)beginstate<=RESET;note<=6'b0;done_with_note<=0;timer_clear<=1;endelsecase(state)RESET,LOAD,DONE:if(-play_enable)beginstate<=RESET;note<=6'b0;done_with_note<=0;timer_clear<=1;endelseif(load_new_note)beginstate<=PLAY;done_with_note<=0;timer_c

24、lear<=0;endelsebeginstate<=LOAD;note<=note_to_load;done_with_note<=0;timer_clear<=1;endPLAY:if(timer_done)beginstate<=DONE;note<=note_to_load;done_with_note<=1;timer_clear<=1;endelseif(-play_enable)beginstate<=RESET;note<=6'b0;done_with_note<=0;timer_clear<

25、=1;endelseif(load_new_note)beginstate<=PLAY;done_with_note<=0;timer_clear<=0;endelsebeginstate<=LOAD;note<=note_to_load;done_with_note<=0;timer_clear<=1;enddefault:beginstate<=RESET;note<=6'b0;done_with_note<=0;timer_clear<=1;endendcase/一一?土©frequency_rom?&#

26、163;?66My口??,/wireclk;frequency_romfrequency_rom(.dout(step_size),.addr(note),.clk(clk);/一?土Do?e-'(?/wire5:0duration_to_load;note_timernotetimer(.clk(clk),.beat(beat),.duration_to_load(duration_to_load),.timer_clear(timer_clear),.timer_done(timer_done);endmoduleMssages產(chǎn)向亞'附M_Meset產(chǎn)Jro忸3yerj4

27、uay_we金松呢的附JfU/Ffl忸jtojoadE33MoU_plaps.tfr.r/durabonte_to*d金植陛尸與也戶HkhW.ffltw.EfceJwte-iaycrJfcj加eatJ|hote-jiayffl-_±_Y/genB-ate_n«ct_sampieJ/notejiayer_¥jtfc>ne_;iMth_nstco11M11001D00100Q癡wmlimuimronimiMjmiiwinjinmMWnnmiliiiinmnwWjmjinRimmuiflnnwuifW一1一二一0)000)tPKWOJ?n_n_ri_n_Rn_rL

28、Jnn_n_JTL_nn_n_JTL_TL_nn_JiJrL-rLJiLjL_riiiB-"IejiByer_B_vpie_put*fnatejJayer_vjnew_sannpie_nBadiy口一/CEjJayer_t2_v/temp_|0-1鬲詆尸即ejtfe仲SEp_Jat-.(XH>1iZ*CurswMiTLLJL_n_ni_nrLLn_rLJi_n_jLnntYiHTTTWjxnccnnjTnimimTXTTxiiTmTEGiiwcywntwTmnyxDncEroocnTCJiinw'nxxnTmTnTTniijl*.mJ.iom丸:a.r卜IL-iH;,上

29、10一匹,司|£川pIBH二葡OOQElps11I11400356U0Mps明|Waverotej)4ayeftb.v局部放大圖:1nave250000Ai.i.knon.100000.C-Jnnttjiayer_l±_Vj,Mmple_XJt:uij:印mps【口psU50M0K故0口。四*jfrw4tjdayer_tb_yiAiew_safflpie_riBadryC-品誨尸叫位T_+加¥加(吐曲厚虹樵呷1面廠I處U蝌4“F100110aiDooiQ0QdK1tejiaya-_&_vfrstt卡M<rtEjiayef_曲jw拉ay_erdWeC-

30、DtE-_piayer_th_vMotE_tDjDiddAtotejiayef_tn_yftiuratm_OT_lnaddjfrwtrjlayer_tb_yfload_new_natr*T(Kejiayer_ttj_Yft)eaitfl<T_pver_y/dgncJMlh_nCitC%10CKLOOOaiDiailOiDllln_rl_n_rLTLTLnrT_rL_rurLTLTLrLnn_rLnEooTBatei0011BM|JOiUdEiH9wcrHQiffjpiflgJ3r圖中play_enable為mcu的控制信號,note_to_load和duration_to_load分別表

31、示音符標(biāo)記和音符持續(xù)時間,generate_next_sample為正弦樣品請求信號。在正弦請求信號出現(xiàn)之后,tempi開始計(jì)數(shù),即開始播放,符合邏輯。2 .樂曲讀取(song_reader)的設(shè)計(jì)任務(wù)有:1、根據(jù)mcu模塊要求,選擇播放樂曲;2、相應(yīng)note_palyer模塊請求,從song_rom中取出音符note,duration)送名nnote_player模塊播放;3、判斷樂曲是否播放完畢,若播放完畢則回復(fù)給mcu。根據(jù)任務(wù)要求,其結(jié)構(gòu)框圖為:端口含義為:表612樂曲讀取模塊so©府的的端口含義引腳名稱I/O_-h_引腳說明dkInput100MHz時鐘信號reselJnp

32、ut復(fù)位信號r高串平有一效的InputB-來自mcu的控制信號,高電平播放Input米自mcu的控制信號,當(dāng)前播放樂曲的序號note_doneInpui來自模埼nme_playcr應(yīng)答信號,十時鐘周期寬度的高電平脈沖表示一個音苻播放靖束sagdnneOutput給mcu的應(yīng)答信號,當(dāng)樂曲播放結(jié)束,輸出一個時鐘周期寬度的高電平臟加Output音符標(biāo)記duralion(5flOutpui音符的持續(xù)時間-LOutput蛤note_ptayc的控制信號.一個時仲M(fèi)的高電寐沖也行新的音符需,(1)地址計(jì)數(shù)器模塊:為5位二進(jìn)制計(jì)數(shù)器,其中note_done為計(jì)數(shù)允許輸入,狀態(tài)q為song_rom的低5位地

33、址,song1:0為songrom的高兩位地址。地址計(jì)數(shù)器address_counter代碼如下:moduleaddress_counter(clk,reset,note_done,q,co);inputclk,reset,note_done;outputreg4:0q;outputco;assignco=(q=5'b11111)&&note_done;always(posedgeclk)beginif(reset)q<=5'b0;elseif(note_done)q<=q+1;elseq<=q;endendmoduleduration為0時,

34、表示樂曲結(jié)束,輸出一個高電平脈沖(2)結(jié)束判斷模塊:當(dāng)計(jì)數(shù)器出現(xiàn)進(jìn)位或者song_done。輸出脈沖寬度應(yīng)該為一個時鐘周期,采用lab11中的脈沖變換電路。結(jié)束判斷judger代碼如下:modulejudger(clk,duration,co,song_done);input5:0duration;inputco,clk;outputsong_done;wiresong_done_temp;assignsong_done_temp=(duration=0)|co;one_pulseone_pulse(.clk(clk),.reset(reset),.in(song_done_temp),.ou

35、t(out);endmodule其中one_pulse利用了已經(jīng)提供的代碼實(shí)現(xiàn)了脈沖變換。3 3)song_reader控制器及頂層模塊:其流程圖如下由于從song_rom中讀出數(shù)據(jù)需要一個時鐘信周期,所以在流程中插入NEXT_NOTE狀態(tài),目的是延遲一個時鐘周期輸出new_note信號,以配合song_rom的讀取要求。根據(jù)流程圖,使用一段式狀態(tài)機(jī)可寫出代碼(代碼寫入controller_of_song_reader模塊中)modulesong_reader(clk,reset,play,song,note_done,song_done,note,duration,new_note);inp

36、utclk,reset,play,song,note_done;outputsong_done,note,duration,new_note;wire1:0song;wire5:0note,duration;wire4:0q;wireco;address_counteraddresscounter(.reset(reset),.clk(clk),.note_done(note_done),.q(q),.co(co);song_romsongrom(.clk(clk),.dout(note,duration),.addr(song,q);judgerjudger(.clk(clk),.co(co

37、),.duration(duration),.song_done(song_done);controller_of_song_readercontroller_of_song_reader_inst(.co(co),.q(q),.duration(duration),.clk(clk),.reset(reset),.play(play),.note_done(note_done),.new_note(new_note);endmodulecontroller_of_song_reader模塊:modulecontroller_of_song_reader(clk,reset,note_done

38、,play,q,co,duration,new_note);inputclk,reset,note_done,play,q,co,duration;outputnew_note;parameterRESET=2'b00,NEW_NOTE=2'b01,WAIT=2'b10,NEXT_NOTE=2'b11;regnew_note;reg1:0state;always(posedgeclk)beginif(reset)beginstate<=RESET;new_note<=0;endelsecase(state)RESET:beginif(play)beg

39、instate<=NEW_NOTE;new_note<=1;endelsebeginstate<=RESET;new_note<=0;endendNEW_NOTE:beginnew_note<=1;state<=WAIT;endWAIT:beginif(play)beginif(note_done)beginstate<=NEXT_NOTE;new_note<=0;endelsebeginstate<=WAIT;new_note<=0;endendelsebeginstate<=RESET;new_note<=0;ende

40、ndNEXT_NOTE:beginstate<=NEW_NOTE;new_note<=1;endendcaseendendmodule辿I圖中play為mcu控制信號(高電平有效),song亦為mcu控制信號(樂曲序號),note為音符標(biāo)記,duration為音符持續(xù)時間,new_note是給note_player的控制信號。觀察note_player應(yīng)答信號(note_done)之后,音符標(biāo)記和音符持續(xù)時間的變化以及給note_player的控制信號可知預(yù)期功能。3.主控制模塊mcu設(shè)計(jì)mcu的工作流程圖如下:主控制器mcu模塊有響應(yīng)按鍵信息,控制系統(tǒng)播放兩大任務(wù)。根據(jù)要求,端口

41、描述如下:<6.11主控耦模塊ma的端口含義I/O一.弓1釁說明.-qInput100MHy時鐘信resettnpuE復(fù)位棺號.離電平有抬pt>)r_buthXlInput一播放”技健.低電平有效Input下一曲“按一個時腫周期寬度的舟電平.靴沖如Oulpui;島電平視示播放Output當(dāng)播放下一曲時,輸曲個時神懈期寬度的跖阻平北位昧沖若復(fù)位111MBBH加吐inputEjl”時模塊的底善信號一十時鐘闔期寬隙的都電平豚沖表示一曲播放站束_E剛.工-4-jj.*二t:.(1)設(shè)計(jì)出一段式狀態(tài)機(jī):modulemcu(clk,reset,play_button,next,play,res

42、et_play,song_done,song);inputclk,reset,play_button,next,song_done;outputplay,reset_play,song;modulemcu(clk,reset,play_button,next,play,reset_play,song_done,song);inputclk,reset,play_button,next,song_done;outputplay,reset_play,song;parameterRESET=3'b000,WAIT=3'b001,END=3'b010,NEXT=3'B011,PLAY=3'b100;regplay,reset_play;reg1:0song;reg2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論