信号与信息处理综合实验FPGA实验三报告-FFT_第1页
信号与信息处理综合实验FPGA实验三报告-FFT_第2页
信号与信息处理综合实验FPGA实验三报告-FFT_第3页
信号与信息处理综合实验FPGA实验三报告-FFT_第4页
信号与信息处理综合实验FPGA实验三报告-FFT_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、信息与通信工程学院信号与信息处理综合实验报告(FPGA部分)班级:姓名:学号:序号:实验三 用FPGA实现快速傅里叶变换一、 实验目的(1) 掌握Xilinx ISE中IP Core的使用方法;(2) 初步掌握Xilinx 公司的FFT IPCore的使用方法;(3) 比较DSP和FPGA实现FFT的异同。二、 实验内容(1)按实验指导书所给出的步骤,用Xilinx IP Core实现256点的FFT并进行仿真和测试。(2)将所给出的例子改写为512点的IFFT并进行仿真和测试。 三、实验过程说明1、 Xilinx FFT IPcore使用说明在Xilinx公司的IPCore中,提供两不同的架

2、构:Burst I/O架构和Streaming I/O流水线架构。所谓的Burst I/O是指数据的输入和输出都是突发的,即输入输出是一段一段的而不是连续的;所谓的Streaming I/O流水线架构则是指输入数据和输出数据都是以一定的频率连续不断地进行的。Burst I/O 架构下,采用的是时间抽取(DIT)方法,而 在Streaming I/O流水线架构下采用的是频率抽取(DIF)方法。当采用基4分解时,N点FFT共需log4 (N) 级,每一级包含N/4个基4的蝶形图,如果点数N不是4的幂次,则还需要另外一个基2的级。如果采用基2的分解,则共有log2 (N)级,每一级包含N/2个基2蝶

3、形。IFFT通过将对应的FFT的相位因子取共轭实现。本实验以Streaming I/O流水线架构为例学习Xilinx FFT IPcore的使用方法。Streaming I/O流水线架构示意图如下图所示。这种架构将多个基2的蝶形处理单元排成流水线形式以提供连续的数据处理,每个处理单元有它自己的存储单元用于存储输入和中间数据。数据数据可以连续输入到流水线的前级,经过一段计算时延,从输出端连续输出一个数据块的数据。当然,这种架构也允许在数据块之间添加一段时间的间隔。在scaled fixed-point模式下,数据在每进行一对基2级之后都会进行一次移位,移位次数可以事先根据输入数据范围确定。除了这

4、种模式外,IP core还提供一种块浮点模式用于改善性能。输出数据可以以比特逆序输出,也可以自然序输出,当采用自然序输出时,需要用到额外的存储资源。与streaming I/O架构不同,Burst I/O以一组蝶形计算单元完成所有运算,其中基4的Burst I/O架构示意图如下图所示。在这种架构下,输入数据分为4块存储到RAM中,每计算一次蝶形运算,计算结果仍然存储到这4块RAM中,直至最后输出。在这种架构下,数据不能连续输入,整个IPcore的工作状态分为数据输入、处理和输出等不同的状态。显然,这种架构占用资源量明显少于Streaming I/O结构,但是处理数据的吞吐量有限。在不同的配置下

5、,IPcore对外的接口有一些差别,下面仅对在本实验中将要用到的部分端口的功能做以下说明:端口名位宽方向描述Xn_re可配输入输入数据实部,与xn_index对应Xn_im可配输入输入数据虚部start1输入启动控制信号,拉高则FFT开始加载数据,可一直置高,此时由IP core的状态控制加载Fwd_inv1输入1表示FFT,0表示IFFTScale_sch在不同模式下位宽不同,在Streaming I/O模式下,输入各级移位次数Sclr1输入同步复位信号Clk1输入工作时钟Xk_re可配,scaled模式下同Xn_re输入输入数据实部,与xn_index对应Xk_im同上输入输入数据虚部Xn

6、_index与点数有关输出Xn所对应的序号Xk_index与点数有关输出Xk所对应的序号RFD1输出加载数据阶段为高Dv1输出输出数据时为高2、 实验步骤(1) 新建工程;(2) 新建FFT IPcore。 命名为fft256,在IP列表中选择Digital signal processing->transforms->FFTs,选择7.1版本,点击Next,然后点击finish;(3) 在按以下截图下设置参数,然后点击Next(4) 在第2个页面上按下图设置,其含义分别为:定点格式;输入数据位宽16比特,相位因子16比特、Scaling选项选择scaled,截取模式选择trunc

7、ation、添加同步复位sclr控制管脚、输出自然顺序,输入数据时序3 clock cycle offset选项。点击Next,进入第3页面(5) 第3页面上,选择Number of Stages using block ram为3,点击Generate生成IPcore。(6) 新建block RAM IPcore,取名为input_rom_I;(7) 在第2页面上选择单口ROM,其他选项保持不变;(8) 第3页面设置如下图,注意选择use ENA pin选项;(9)第4页面上,选择下图中所示的两个寄存器选项;(10)选择压缩包中的input_I.coe作为该ROM的初始化文件;其他选项保持默

8、认值,点击Generate;(11)再按照上述步骤生成一个ROM,选择压缩包中的input_Q.coe文件作为初始化文件;(12)将压缩包中的fft_top.v,fft_ctrl.v添加到工程中;(13)为fft_top.v编写测试文件,可参阅压缩包中的test_fft.v,注意理解程序中文件输出部分的功能;(14)对该设计进行功能仿真,记录仿真波形,并分析Streaming I/O架构下256点FFT的计算时延;(15)使用Chipcope对该设计进行在板测试,观察xn_index、xn_im、xn_re、xk_im、xk_re、xk_index的相对时序关系,触发条件可以xk_index、

9、out_block_index或rd_block_index、xn_index取某一具体数值开始触发采数操作。(16)去掉cdc文件,在布局布线报告中找到Device Utilization Summary部分,观察FFT部分的资源占用情况。(17)比较DSP实现FFT与FPGA实现FFT的异同。(18)(扩展功能)修改FFT点数为1024点,重新进行完成上述流程;(19)(扩展功能)将FFT IPcore改为Radix-4 Burst I/O架构,重新完成上述过程(注意,此时需要uload信号,直接在ctrl模块里置1即可),并对streaming I/O方式的时延、吞吐量以及资源占用情况进

10、行比较。四、实验代码分析程序模块描述:本次实验里涉及了三个程序,第一个是原始程序,另外两个是对原始程序作简单修改后的功能拓展,基本是类似的。以下只对原始程序作较为详细的说明,而功能拓展只简单说明修改的情况。本次实验主要通过FPGA IPCore实现。所谓IP Core就是预先设计好、经过严格测试和优化后的电路功能模块。它犹如一个黑盒子,用户只需要配置好其相关接口并在顶层文件中将其实例化即可,但是它本质上也是一个ISE工程文件,存储在设计工程的ipcore_dir目录下,由于其代码本身过于复杂且本次实验中基本不涉及,因此下面不作介绍。本次实验全部采用以下两种IP核:Fast Fourier Tr

11、ansform(FFT)和Block Memory Generator。1、256点FFT(Streaming I/O):(1)源程序(IP Core):FFT核核名:fft256;架构:Streaming I/O(流水线);其它参数:工作频率100MHz,定点格式,输入数据位宽和相位因子位宽均为16比特,需要缩放,向下截取,顺序输出,添加同步复位sclr控制管脚,输入数据延迟3时钟周期等。调用该IP Core的控制信号将在介绍顶层文件时说明。存储器核全称:Block Memory Generator,可直译为块存储器生成器,可以生成任意大小的存储器阵列并可以针对速度或功率对其进行优化。本次实

12、验使用它来生成存储器阵列,用于存储输入数据。由于输入数据(复数)的实部和虚部使用两个几乎完全相同的IP核,因此主要介绍实部使用的核,虚部使用的核若采用不同参数会在括号里注明。核名:input_rom_I(input_rom_Q);存储器类型:单口ROM;读取数据位宽:16位;读取数据深度(个数):1024;使用的初始化文件:input_I.coe(input_Q.coe),存储了1024个16位数,表示输入数据的实部(虚部);使用使能管脚。(2)顶层文件(fft_top.v)及控制文件(fft_ctrl.v):重要的组成部分,对于工程的正确运行是必需的,其中顶层文件完成控制信号的声明,部分信号

13、(主要为恒定信号)的赋值,接受来自控制文件的信号,利用信号实例化和调用所有IP核的任务,而控制信号则主要根据系统时钟及相关触发条件对控制信号及相关参数进行赋值,并将其结果返回给顶层文件。这两个文件的主要工作都是对相关控制信号进行处理,下面介绍这些控制信号及它们在相关文件中是如何被处理的,通过这些基本就可了解这两个文件的内容。a. 输入(控制)信号:这里都是IP核的输入信号,需要在顶层文件或控制文件中对其初始化或赋值。FFT核控制(输入)信号:XN_RE和XN_IM:输入操作数,分别代表实部和虚部,位宽为16位,表明实部和虚部都是16位。顶层文件中还包含32位的XN和XK信号也用来表示操作数,高

14、16位表示实部,低16位表示虚部;START:FFT开始信号,高有效,表明开始输入数据。控制文件中在一开始把它置为1,但对于Streaming I/O结构而言,任何时候置1都可以开始数据的加载;FWD_INV:指示IP Core是FFT还是IFFT,顶层文件中把它置1表明是FFT运算;FWD_INV_WE:FWD_INV端口的使能信号,由于这里自始至终都是进行FFT运算,因此顶层文件中把它置0表明FWD_INV信号不再变化;SCALE_SCH:若选择在数据处理中进行缩放则需要此信号,流水线结构中,将每个基2的蝶形处理单元视为一个阶段,每个阶段进行一次数据的缩减,缩减的比例以此输入中对应阶段的两

15、比特表示;SCALE_SCH_WE:SCALE_SCH的使能信号,这里同样置0表示SCALE_SCH不再变化;SCLR:FFT核同步复位信号,高有效,控制文件中置其为0表明不需要复位;CLK:输入时钟信号,实验中由FPGA板产生;XK_RE及XK_IM:输出的数据(补码形式),两个信号分别代表实部和虚部,实验中采用了缩放,因此这两个信号位宽和输入数据是相同的,都是16,输出的数据将存储在XK中;XN_INDEX:输入数据的下标,位宽等于以2为底FFT点数的对数,对于256点FFT而言是8位;XK_INDEX:输出数据的下标,位宽与XN_INDEX相同;存储器核控制(输入)信号:本次实验中仅使用

16、了端口A,下面的信号都是针对它的。CLKA:端口A使用的时钟信号,这里和CLK是相同的;ENA:端口A的使能信号,启用相关读写和复位操作,这里直接使用顶层文件中的RD_EN(读使能)信号;ADDRA:该信号把相关地址赋给A端口以用于读写操作,这里直接使用顶层文件中的RD_ADDR信号(10位);b. 输出(状态)信号:这些都是IP核的输出信号以表明工作状态,顶层文件和控制文件不需要对它们进行修改,但在调用IP核时仍需要声明它们,在仿真时通过观察这些信号的状态可以获得很多有用信息。RFD(Ready for data):FFT核输出信号,当其为高时表明FFT核正在加载数据,当其由低变高时表明FF

17、T核已经转备好接收数据;BUSY:FFT核输出信号,当其为高时表明FFT正在计算中;DV:FFT核输出信号,当其为高时表明当前输出端口存在有效数据;EDONE:FFT核输出信号,即将完成,在DONE之前一个周期给出高电平;DONE:FFT核输出信号,当其为高时表明FFT已经计算完成,但高电平只持续一个时钟周期;DOUTA:存储器核输出信号,返回读操作中得到的数据,这里它用来返回从input_i.coe或input_q.coe文件中的数据,因此位宽为16,返回的数据存储在XN中;c. 其它信号:这里的信号和IP核无关,仅用在控制文件和顶层文件中,用于传递参数或显示相关状态,其中XN和XK信号前面

18、已有描述,这里不再重复。RESET:控制文件信号,在顶层文件中为RST,来源为FPGA板,当其为高电平时,块序号清零(下面会介绍),注意FFT核也有一个控制信号RESET,但是和这里介绍的无关,顶层文件实例化FFT核时没有使用RESET信号;RD_EN:从ROM中读取数据的使能信号,这里直接使用FFT核的RFD信号,即:一旦FFT核已经准备好或正在接收数据,就读取新数据;WR_EN:往RAM里写数据的使能信号,这里直接使用FFT核的DV信号,即:一旦FFT核开始输出有效数据,就开始写入这些数据;RD_ADDR:读取数据的地址,10位(表示1024个数),在这里由2位块序号和8位输入数据序号组成

19、,见下面的相关说明;RD_BLOCK_INDEX:表示数据块的序号,读操作用,2位,可表示4个ROM块,由于输入数据有1024个,而输入序号XN_INDEX和XK_INDEX都是8位,最多表示256个数,因此需要4个ROM块来管理所有输入数据,每个块存储256个数,控制文件中,当数据序号达到255(即已有256个数据)时,该信号加一表明开始启用下一个ROM块,块序号(2位)和输入序号(8位)共同组成RD_ADDR信号指示数据地址;OUT_BLOCK_INDEX:表示数据块的序号,写操作用,2位,和RD_BLOCK_INDEX性质相同;OUTPUT_RE:输出数据的实部,16位,直接使用XK的高

20、16位;OUTPUT_IM:输出数据的虚部,16位,直接使用XK的低16位;(3)测试文件(test_fft.v):该文件对于工程的正常运行不是必需的,它仅用在Modelsim仿真中,也是通过相关信号的处理来构建仿真环境,以下简要介绍它的工作流程(其中所有信号都将送给顶层文件)。打开(或创建)文件output_data.txt,对应的语句语句为“fp = $fopen("output_data.txt")”;开始置写使能(WF_en)信号为高,计数器(counter)为0;产生周期为10ns时钟信号CLK,并向顶层文件中输出,作为系统时钟;在每一个时钟的上升沿,若FFT核输

21、出的DV为高电平(表明数据有效),则向文件output_data.txt中写入输出的有效数据,数据源自顶层文件的OUTPUT_RE和OUTPUT_IM,将被转换成十进制,写入文件的语句为“$fdisplay(fp, "%d %d", output_re, output_im)”,写入数据的形式为无符号十进制数,同时计数器值加1;若计数器值变为1023,即已写入了1024个数,则置写使能信号为低,停止写入。以上流程结束后,在Modelsim中显示波形的同时,工程目录下将多出一个output_data.txt文件,存储了一次 FFT运算的结果。若延长仿真时间,则FFT核还会输出

22、相同的数据,但它们将不会被写入文件中。2、1024点FFT(Streaming I/O):这是源程序的功能拓展,基本内容和源程序是相同的,以下只说明需要修改的地方。在FFT核设置的第一页,把点数改成1024,其它设置无需改动,改完后需要重新生成IP核;XN_INDEX和XK_INDEX位宽是以2为底FFT点数的对数,因此对于1024点数FFT来说应从8位改成10位;SCALE_SCH信号的位宽为2×log2NFFT2,其中NFFT为FFT点数,因此对于1024点FFT来说应改为10位,这里按照XILINX官方说明文件(见下面截图)的内容将其改为1010101010;(对于SCALE_

23、SCH的取值,XILINX官方文件也给出了其它方案,下面给出另一个截图,这段叙述给出了SCALE_SCH的意义所在,即每两个比特对应输入中某阶段即每个蝶形运算的压缩比例。按照这段内容的说法,若将SCALE_SCH改成1010101011可以完全避免数据溢出的情况,但是由于时间所限我没有进行测试。)对于上面的256点FFT而言,由于XN_INDEX和XK_INDEX都是8位,最多表示256个数,而输入的却有1024个,因此前面需要添加两位块序号,使用4块ROM进行管理,而对于1024点FFT来说,XN_INDEX和XK_INDEX都是10位,不需要使用块序号进行管理,也就是说RD_BLOCK_I

24、NDEX和OUT_BLOCK_INDEX已经没有存在的意义,需要去掉或者屏蔽掉它们,按照以下方法即可实现: 把语句“assign rd_addr = rd_block_index, xn_index”改成“assign rd_addr = xn_index”(必要步骤),然后删掉RD_BLOCK_INDEX和OUT_BLOCK_INDEX的声明语句和调用语句(不是必要的步骤)。 3、256点FFT(Radix-4,Burst I/O)这是源程序的功能拓展,基本内容和源程序是相同的,以下只说明需要修改的地方。在FFT核设置的第一页,把类型改成“Radix-4, Burst I/O”,其它设置无需

25、改动,改完后需要重新生成IP核;添加UNLOAD信号(实验指导书上把它错打成了“uload”),它仅用在Burst I/O结构的FFT核中,表示将开始输出处理的结果,添加的具体方法如下:在顶层文件实例化FFT核模块和控制文件模块加入语句“.unload(unload),”;控制文件中加入语句“assign unload = 1;”,模块声明(module fft_ctrl)部分加入“output unload,”,表明该信号的值将从控制文件传递到顶层文件中。以上功能拓展,若要进行Chipscope在板调试,还要对CDC文件和UCF文件进行修改,但我这次只进行了Modelsim的仿真,因此无法给

26、出CDC文件和UCF文件的修改方案。五、实验结果分析1. 256点FFT的modelsim仿真:仿真可大致分为4个阶段: 第一阶段,模拟实际系统的初始化,除了打开或创建用于写入结果的文件output_data.txt外不进行任何操作; 第二阶段,系统开始工作,开始会有一个短暂的重置时间(RST信号为0),这时清空块序号OUT_BLOCK_INDEX和RD_BLOCK_INDEX,这段时间里RFD信号也变为高表示FFT核已经准备好接收数据,重置过后正式开始FFT计算,这段时间虽然系统暂时不会有任何输出,但从RD_BLOCK_INDEX的变化上可以看出数据已经开始加载,每加载256个输入数值该信号

27、会加1; 第三阶段,开始输出有效数据,DV信号变为高,此时OUTPUT_RE和OUTPUT_IM开始输出计算结果,由于WF_en信号为高电平,结果也被写入文件中,为确保只写入一次计算结果计数器COUNTER也将开始工作,这段时间里,每输出256个数据,OUT_BLOCK_INDEX信号都将加1; 第四阶段,一次FFT结果已经全部写入文件,计数器值变为1023,此时置WF_en为0停止写入,计算器也清零停止工作,但是数据的加载没有结束,FFT还将重复输出前面的结果,DV信号仍为高电平,以后无论怎样延长仿真时间,都将停留在这个阶段,即只输出FFT结果但不写入文件的阶段。结果见下图:仿真完成后out

28、put_data.txt的内容,默认为按2进制显示,将其改为按无符号数显示时,可以看到输出的结果已经写入到文件中,且写入形式为无符号数。若将输出的信号改为有符号数,则与老师给的output.txt文件内容对应,当然,这里只是改变了显示的形式,实际处理和写入时仍按照无符号数进行。计算延时:这段时间严格来说应该是从数据开始输入(加载)到第一个有效数据输出这段时间,根据图中数据可以判断,延时为6094737ps。2.256点FFT的Chipscope测试波形分析:以下先介绍我的Chipscope内核定义文件是如何设置的。Trigger Parameters选项卡里,Trigger Ports设为1,

29、Trigger Width设为20,即1个触发源,里面包含20个触发信号,触发信号至少应为10个,另外更好的设置方案是设置2个触发源,每个触发源设置10个信号,具体下面会说明;Capture Parameters选项卡里,去掉Data Same As Trigger选项,设置Data Width为113,即113个数据信号;Net Connections选项卡里,按下设置信号连接:Clock Signals里设置时钟源为fft_top模块下的clk_BUFGP;Trigger Signals里设置触发源为fft_top模块下的ctrl_inst/out_block_index(2位),ctrl

30、_inst/rd_block_index(2位),xk_index(8位)和xn_index(8位),共20个触发信号(更好的设置方案是设置两个触发源,一个触发源包含out_block_index和xk_index共10位信号,另一个包含rd_block_index和xn_index共10位信号,最小的设置方案是至少设置以上任何一个触发源,否则采集的数据会不正确);Data Signals共包含113个信号,分别是fft_top下的output_re(16位)、output_im(16位)、xn_index(8位)和xk_index(8位),fft_inst下的xn_re(16位)、xn_im

31、(16位)、xk_re(16位)、xk_im(16位)和dv信号(1位)。实验结果如下:可以看到图中数据与理论值一致 要获得图中的显示结果,需把所有数值按无符号数显示,另外若output信号展开后序号从高到低,需要反转这个显示顺序,改成序号从低到高。 如果运行正确的话,output信号输出的数据在output_data.txt可以查找到,若output信号是按有符号数显示的,则数据可以在output.txt中可以查找到,和Modelsim仿真类似,说明了Chipscope仿真和Modelsim仿真获得的计算结果是相同的,这里不再给出对应的截图。要说明的是,Chipscope仿真不产生结果文件,

32、欲比较结果需要事先执行Modelsim仿真。3. 去掉cdc文件,在布局布线报告中找到Device Utilization Summary部分,观察FFT部分的资源占用情况:结果如下:4.1024点FFT的modelsim仿真:结果如下图:可以看到波形和256点FFT差不多,数据也和理论值相符。可见延时为21585100ps,可以看到比之前的256点FFT的延时长很多。5. 256点FFT(Radix-4,Burst I/O):将FFT IPcore改为Radix-4 Burst I/O架构,重新完成上述过程,并对streaming I/O方式的时延、吞吐量以及资源占用情况进行比较。结果如下图

33、:在DV数据有效信号为1前就输出了四组数据,这种现象是正常的。在Burst I/O架构下,输入数据分为4块存储到RAM中,每计算一次蝶形运算,计算结果仍然存储到这4块RAM中,直至最后输出。在这种架构下,数据不能连续输入,整个IPcore的工作状态分为数据输入、处理和输出等不同的状态。整个仿真中,包含了4次把计算出的临时数据存储到RAM又读出的过程,才会出现这种情况。虽然输出了四组数据,但FFT核判定这些数据都不是有效的,DV信号保持为0,因此它们也不会被写入文件中。如果延长仿真时间,这种现象会一再出现。图中可以看出延时大约为6070000左右,和原程序的结果差不多。一般来说,采用基4算法速度

34、应该快于基2算法,这里计算时间没有大幅缩短的原因是采用了Burst I/O结构,不能处理连续数据,处理时间较长。资源占用情况见下表:Device Utilization Summary-Slice Logic UtilizationUsedAvailableUtilizationNote(s)Number of Slice Registers2,57511,44022%     Number used as Flip Flops2,575       Number used

35、as Latches0       Number used as Latch-thrus0       Number used as AND/OR logics0   Number of Slice LUTs1,6275,72028%     Number used as logic1,2005,72020%      

36、;   Number using O6 output only517           Number using O5 output only22           Number using O5 and O6661           

37、;Number used as ROM0       Number used as Memory3361,44023%         Number used as Dual Port RAM0           Number used as Single Port RAM0    &#

38、160;      Number used as Shift Register336               Number using O6 output only53               Number using O5 out

39、put only0               Number using O5 and O6283       Number used exclusively as route-thrus91           Number with same-slice regis

40、ter load82           Number with same-slice carry load9           Number with other load0   Number of occupied Slices6621,43046% Number of LUT Flip Flop pairs used2,002&#

41、160;      Number with an unused Flip Flop872,0024%     Number with an unused LUT3752,00218%     Number of fully used LUT-FF pairs1,5402,00276%     Number of unique control sets29   

42、;    Number of slice register sites lost        to control set restrictions15011,4401% Number of bonded IOBs3710236%     Number of LOCed IOBs223759% Number of RAMB16BWERs2326% Number of RAMB8BWERs5647

43、% Number of BUFIO2/BUFIO2_2CLKs0320% Number of BUFIO2FB/BUFIO2FB_2CLKs0320% Number of BUFG/BUFGMUXs1166%     Number used as BUFGs1       Number used as BUFGMUX0   Number of DCM/DCM_CLKGENs040% Number of IL

44、OGIC2/ISERDES2s02000% Number of IODELAY2/IODRP2/IODRP2_MCBs02000% Number of OLOGIC2/OSERDES2s02000% Number of BSCANs040% Number of BUFHs01280% Number of BUFPLLs080% Number of BUFPLL_MCBs040% Number of DSP48A1s121675% Number of ICAPs010% Number of MCBs020% Number of PCILOGICSEs020% Number of PLL_ADVs020% Number of PMVs010% Number of STARTUPs010% Number of SUSPEND_SYNCs01

温馨提示

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

评论

0/150

提交评论