




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信号与信息处理综合实验报告信息与通信工程学院信号与信息处理综合实验报告(fpga部分)班级: 姓名: 学号: 序号: 第19页 实验三 用fpga实现快速傅里叶变换一、实验目的(1)掌握xilinx ise中ip core的使用方法;(2)初步掌握xilinx 公司的fft ipcore的使用方法;(3)比较dsp和fpga实现fft的异同。二、 实验内容(1)按实验指导书所给出的步骤,用xilinx ip core实现256点的fft并进行仿真和测试。(2) 将所给出的例子改写为512点的ifft并进行仿真和测试。三、程序基本信息(一)、程序模块描述:本次实验里涉及了三个程序,第一个是原始程
2、序,另外两个是对原始程序作简单修改后的功能拓展,基本是类似的。以下只对原始程序作较为详细的说明,而功能拓展只简单说明修改的情况。本次实验主要通过fpga ipcore实现。所谓ip core就是预先设计好、经过严格测试和优化后的电路功能模块。它犹如一个黑盒子,用户只需要配置好其相关接口并在顶层文件中将其实例化即可,但是它本质上也是一个ise工程文件,存储在设计工程的ipcore_dir目录下,由于其代码本身过于复杂且本次实验中基本不涉及,因此下面不作介绍。本次实验全部采用以下两种ip核:fast fourier transform(fft)和block memory generator。1、2
3、56点fft(streaming i/o):(1)源程序(ip core):fft核核名:fft256;架构:streaming i/o(流水线);其它参数:工作频率100mhz,定点格式,输入数据位宽和相位因子位宽均为16比特,需要缩放,向下截取,顺序输出,添加同步复位sclr控制管脚,输入数据延迟3时钟周期等。调用该ip core的控制信号将在介绍顶层文件时说明。存储器核全称:block memory generator,可直译为块存储器生成器,可以生成任意大小的存储器阵列并可以针对速度或功率对其进行优化。本次实验使用它来生成存储器阵列,用于存储输入数据。由于输入数据(复数)的实部和虚部使
4、用两个几乎完全相同的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):重要的组成部分,对于工程的正确运行是必需的,其中顶层文件完成控制信号的声明,部分信号(主要为恒定信号)的赋值,接受来自控制文件的信号,利用信号实例化和调用所有ip
5、核的任务,而控制信号则主要根据系统时钟及相关触发条件对控制信号及相关参数进行赋值,并将其结果返回给顶层文件。这两个文件的主要工作都是对相关控制信号进行处理,下面介绍这些控制信号及它们在相关文件中是如何被处理的,通过这些基本就可了解这两个文件的内容。a. 输入(控制)信号:这里都是ip核的输入信号,需要在顶层文件或控制文件中对其初始化或赋值。fft核控制(输入)信号:xn_re和xn_im:输入操作数,分别代表实部和虚部,位宽为16位,表明实部和虚部都是16位。顶层文件中还包含32位的xn和xk信号也用来表示操作数,高16位表示实部,低16位表示虚部;start:fft开始信号,高有效,表明开始
6、输入数据。控制文件中在一开始把它置为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的蝶形处理单元视为一个阶段,每个阶段进行一次数据的缩减,缩减的比例以此输入中对应阶段的两比特表示;scale_sch_we:scale_sch的使能信号,这里同样置0
7、表示scale_sch不再变化;sclr:fft核同步复位信号,高有效,控制文件中置其为0表明不需要复位;clk:输入时钟信号,实验中由fpga板产生;xk_re及xk_im:输出的数据(补码形式),两个信号分别代表实部和虚部,实验中采用了缩放,因此这两个信号位宽和输入数据是相同的,都是16,输出的数据将存储在xk中;xn_index:输入数据的下标,位宽等于以2为底fft点数的对数,对于256点fft而言是8位;xk_index:输出数据的下标,位宽与xn_index相同;存储器核控制(输入)信号:本次实验中仅使用了端口a,下面的信号都是针对它的。clka:端口a使用的时钟信号,这里和clk
8、是相同的;ena:端口a的使能信号,启用相关读写和复位操作,这里直接使用顶层文件中的rd_en(读使能)信号;addra:该信号把相关地址赋给a端口以用于读写操作,这里直接使用顶层文件中的rd_addr信号(10位);b. 输出(状态)信号:这些都是ip核的输出信号以表明工作状态,顶层文件和控制文件不需要对它们进行修改,但在调用ip核时仍需要声明它们,在仿真时通过观察这些信号的状态可以获得很多有用信息。rfd(ready for data):fft核输出信号,当其为高时表明fft核正在加载数据,当其由低变高时表明fft核已经转备好接收数据;busy:fft核输出信号,当其为高时表明fft正在计
9、算中;dv:fft核输出信号,当其为高时表明当前输出端口存在有效数据;edone:fft核输出信号,即将完成,在done之前一个周期给出高电平;done:fft核输出信号,当其为高时表明fft已经计算完成,但高电平只持续一个时钟周期;douta:存储器核输出信号,返回读操作中得到的数据,这里它用来返回从input_i.coe或input_q.coe文件中的数据,因此位宽为16,返回的数据存储在xn中;c. 其它信号:这里的信号和ip核无关,仅用在控制文件和顶层文件中,用于传递参数或显示相关状态,其中xn和xk信号前面已有描述,这里不再重复。reset:控制文件信号,在顶层文件中为rst,来源为
10、fpga板,当其为高电平时,块序号清零(下面会介绍),注意fft核也有一个控制信号reset,但是和这里介绍的无关,顶层文件实例化fft核时没有使用reset信号;rd_en:从rom中读取数据的使能信号,这里直接使用fft核的rfd信号,即:一旦fft核已经准备好或正在接收数据,就读取新数据;wr_en:往ram里写数据的使能信号,这里直接使用fft核的dv信号,即:一旦fft核开始输出有效数据,就开始写入这些数据;rd_addr:读取数据的地址,10位(表示1024个数),在这里由2位块序号和8位输入数据序号组成,见下面的相关说明;rd_block_index:表示数据块的序号,读操作用,
11、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的高16位;output_im:输出数据的虚部,16位,直接使用xk的低16位;(
12、3)测试文件(test_fft.v):该文件对于工程的正常运行不是必需的,它仅用在modelsim仿真中,也是通过相关信号的处理来构建仿真环境,以下简要介绍它的工作流程(其中所有信号都将送给顶层文件)。打开(或创建)文件output_data.txt,对应的语句语句为“fp = $fopen(output_data.txt)”;开始置写使能(wf_en)信号为高,计数器(counter)为0;产生周期为10ns时钟信号clk,并向顶层文件中输出,作为系统时钟;在每一个时钟的上升沿,若fft核输出的dv为高电平(表明数据有效),则向文件output_data.txt中写入输出的有效数据,数据源自
13、顶层文件的output_re和output_im,将被转换成十进制,写入文件的语句为“$fdisplay(fp, %d %d, output_re, output_im)”,写入数据的形式为无符号十进制数,同时计数器值加1;若计数器值变为1023,即已写入了1024个数,则置写使能信号为低,停止写入。以上流程结束后,在modelsim中显示波形的同时,工程目录下将多出一个output_data.txt文件,存储了一次 fft运算的结果。若延长仿真时间,则fft核还会输出相同的数据,但它们将不会被写入文件中。2、1024点fft(streaming i/o):这是源程序的功能拓展,基本内容和源程
14、序是相同的,以下只说明需要修改的地方。在fft核设置的第一页,把点数改成1024,其它设置无需改动,改完后需要重新生成ip核;xn_index和xk_index位宽是以2为底fft点数的对数,因此对于1024点数fft来说应从8位改成10位;scale_sch信号的位宽为2log2nfft2,其中nfft为fft点数,因此对于1024点fft来说应改为10位,这里按照xilinx官方说明文件(见下面截图)的内容将其改为1010101010;(对于scale_sch的取值,xilinx官方文件也给出了其它方案,下面给出另一个截图,这段叙述给出了scale_sch的意义所在,即每两个比特对应输入中
15、某阶段即每个蝶形运算的压缩比例。按照这段内容的说法,若将scale_sch改成1010101011可以完全避免数据溢出的情况,但是由于时间所限我没有进行测试。)对于上面的256点fft而言,由于xn_index和xk_index都是8位,最多表示256个数,而输入的却有1024个,因此前面需要添加两位块序号,使用4块rom进行管理,而对于1024点fft来说,xn_index和xk_index都是10位,不需要使用块序号进行管理,也就是说rd_block_index和out_block_index已经没有存在的意义,需要去掉或者屏蔽掉它们,按照以下方法即可实现: 把语句“assign rd_a
16、ddr = 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”,其它设置无需改动,改完后需要重新生成ip核;添加unload信号(实验指导书上把它错打成了“uload”),它仅用在burst i/o结构的fft核中
17、,表示将开始输出处理的结果,添加的具体方法如下:在顶层文件实例化fft核模块和控制文件模块加入语句“.unload(unload),”;控制文件中加入语句“assign unload = 1;”,模块声明(module fft_ctrl)部分加入“output unload,”,表明该信号的值将从控制文件传递到顶层文件中。以上功能拓展,若要进行chipscope在板调试,还要对cdc文件和ucf文件进行修改,但我这次只进行了modelsim的仿真,因此无法给出cdc文件和ucf文件的修改方案。四、功能测试记录 1、256点fft(streaming i/o): (1)modelsim仿真波形分
18、析 (以下modelsim仿真图中,为便于观察波形和计算时延,添加了rfd信号和rd_block_index信号) 以下是全过程仿真波形,可以看到整个仿真结果大致可分为4个阶段: 第一阶段,模拟实际系统的初始化,除了打开或创建用于写入结果的文件output_data.txt外不进行任何操作; 第二阶段,系统开始工作,开始会有一个短暂的重置时间(rst信号为0),这时清空块序号out_block_index和rd_block_index,这段时间里rfd信号也变为高表示fft核已经准备好接收数据,重置过后正式开始fft计算,这段时间虽然系统暂时不会有任何输出,但从rd_block_index的变
19、化上可以看出数据已经开始加载,每加载256个输入数值该信号会加1; 第三阶段,开始输出有效数据,dv信号变为高,此时output_re和output_im开始输出计算结果,由于wf_en信号为高电平,结果也被写入文件中,为确保只写入一次计算结果计数器counter也将开始工作,这段时间里,每输出256个数据,out_block_index信号都将加1; 第四阶段,一次fft结果已经全部写入文件,计数器值变为1023,此时置wf_en为0停止写入,计算器也清零停止工作,但是数据的加载没有结束,fft还将重复输出前面的结果,dv信号仍为高电平,以后无论怎样延长仿真时间,都将停留在这个阶段,即只输出
20、fft结果但不写入文件的阶段。 以下是开始输出数据阶段的仿真图的放大版,以及仿真完成后output_data.txt的内容,默认为按2进制显示,将其改为按无符号数显示时,可以看到输出的结果已经写入到文件中,且写入形式为无符号数。 若将输出的信号改为有符号数,则与老师给的output.txt文件内容对应,当然,这里只是改变了显示的形式,实际处理和写入时仍按照无符号数进行。 计算时延: 这段时间严格来说应该是从数据开始输入(加载)到第一个有效数据输出这段时间,即rfd信号变为高到dv信号变为高这段时间,根据下页的两个截图可以判定,时延大致为6095000-105100=5989900ps即大约61
21、0-6s。 (2)chipscope测试波形分析以下先介绍我的chipscope内核定义文件是如何设置的。trigger parameters选项卡里,trigger ports设为1,trigger width设为20,即1个触发源,里面包含20个触发信号,触发信号至少应为10个,另外更好的设置方案是设置2个触发源,每个触发源设置10个信号,具体下面会说明;capture parameters选项卡里,去掉data same as trigger选项,设置data width为113,即113个数据信号;net connections选项卡里,按下设置信号连接:clock signals里设
22、置时钟源为fft_top模块下的clk_bufgp;trigger signals里设置触发源为fft_top模块下的ctrl_inst/out_block_index(2位),ctrl_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个信号,分
23、别是fft_top下的output_re(16位)、output_im(16位)、xn_index(8位)和xk_index(8位),fft_inst下的xn_re(16位)、xn_im(16位)、xk_re(16位)、xk_im(16位)和dv信号(1位)。必须要说明的是,设置如此多的信号只是为了获取更多的信息,但这样也会耗费更多的处理时间,实际上可以精简一些信号。下面先给出不设置触发条件情况下的一次采集波形的截图,简单说明图中包含的内容。 图中上半部分是设置触发的窗口,此时没有设置任何触发条件,因此所有制都是x表示不定值,这时任何数据都会采集并显示,下面是采集到的波形,共有9个信号,前两个
24、信号表示实际输出的数值(在modelsim中它们要写入文件),第四第五个信号表示fft核输出的结果,在数据有效信号dv(第三个)为1时它和output是相同的,第六第七个信号则表示当前输入的数据,第八个信号是输出数据的序号,第九个信号则是输入数据的信号,这些信号的名称和前面介绍的大致相同。 要获得图中的显示结果,需把所有数值按无符号数显示,另外若output信号展开后序号从高到低,需要反转这个显示顺序,改成序号从低到高。 如果运行正确的话,output信号输出的数据在output_data.txt可以查找到,若output信号是按有符号数显示的,则数据可以在output.txt中可以查找到,和
25、modelsim仿真类似,说明了chipscope仿真和modelsim仿真获得的计算结果是相同的,这里不再给出对应的截图。要说明的是,chipscope仿真不产生结果文件,欲比较结果需要事先执行modelsim仿真。 为计算时延,需要确定第一个输出值和第一个输入值之间的时间差,在上面的波形中,可以查找xk_index为0的时隙,此时由对应的xn_index即可确定时延。其中一个比较方便的办法是设置触发条件,设置后,chipscope只会从满足触发条件的时刻开始抓取数据。设置方法:触发窗口中,置xk_index为0000000,而后再次抓取数据就获得下面的波形。 由该图可以看到,输出序号为0的
26、时候,输入序号已达87,即输入了87个数以后才开始输出结果,所以时延就是连续加载87个数据的时间。 以下给出其他触发条件的截图。 设置触发条件为rd_block_index=10: 设置触发条件为out_block_index=10: (以上两个截图都是理想情况,即输入序号和输出序号至少有一个为0,因为设置的触发条件是启用新的rom块来存储另外256个数据,但是偶尔抓取到的数据不是这种情况,具体原因未知) 这里的判定条件都是“=”,即从满足的时刻开始抓取数据,当然也有其它的判定条件,但由于时间原因没有进行测试。 2、1024点fft(streaming i/o): 所有功能拓展都只进行了mod
27、elsim功能仿真。 该图的大致波形和256点fft是相同的,这里不再分析,用相同的方法计算时延,得到结果为21485000ps即大约210-5s,比256点fft长了不少。 1024点的fft输出结果和256点fft差别较大,这里不再给出结果截图。 3、256点fft(radix-4,burst i/o): 仿真截图如下: 在dv数据有效信号为1前就输出了四组数据,这种现象是正常的。在burst i/o架构下,输入数据分为4块存储到ram中,每计算一次蝶形运算,计算结果仍然存储到这4块ram中,直至最后输出。在这种架构下,数据不能连续输入,整个ipcore的工作状态分为数据输入、处理和输出等
28、不同的状态。整个仿真中,包含了4次把计算出的临时数据存储到ram又读出的过程,才会出现这种情况。虽然输出了四组数据,但fft核判定这些数据都不是有效的,dv信号保持为0,因此它们也不会被写入文件中。如果延长仿真时间,这种现象会一再出现。 同样可以获得计算时延约为5954000ps,和原程序差不多。一般来说,采用基4算法速度应该快于基2算法,这里计算时间没有大幅缩短的原因是采用了burst i/o结构,不能处理连续数据,处理时间较长。 下面是仿真后输出的结果和原程序(streaming i/o架构)的结果比较,可以看到还是有一定差别的。五、调试过程中的主要问题及难点1、modelsim仿真波形中
29、,fft输出一直为0,没有有效数据。仿真时间过短,在这段时间里不能输出有效的结果,需要延长仿真时间。2、加入ucf文件后,无法调用chipscope,删除后chipscope调试却又出现其它错误(见问题3)。测试文件(test_fft.v)被错误地用成了顶层文件,在implementation视图中显示成下图的样子。开始在做实验的时候图省事,直接把这个文件通过“add source”加入进来,由于它和顶层文件的拓展名相同,且里面包含顶层文件的调用,结果ise把它当成了新的顶层文件。事实上它只是一个测试文件,只包含modelsim仿真所需要的信号,因此ucf文件中的很多信号与之不对应,产生了这个
30、错误。 解决方法有两个:(1)仅仅删除这个文件,这样就可以执行chipscope,但会导致modelsim仿真出错; (2)删除文件后,重新新建一个测试文件(verilog text fixture),并用test_fft.v文件覆盖它。3、使用chipscope测试时,开始抓取数据后却长时间无波形出现。正常情况下,波形应该立即出现。出现这种情况的原因比较多,以下逐一分析:(1)chipscope仿真使用的时钟信号和fpga板子的信号不对应,此时往往会有如下提示:“waiting for core to be armed, slow or stopped clock”。有两个原因可能导致这个问
31、题:a. 如问题2中所述,测试文件被当成了顶层文件,与此同时ucf文件也是不存在的,这样导致时钟信号没有绑定到板子上,当然chipscope找不到时钟信号,虽然测试文件自身包含一个时钟信号,但是chipscope根本不会使用它; b. cdc文件中,clk信号设置错误。正确的设置是fft_top模块下的clk_bufgp。 (2)触发条件设置不对。xk_index、out_block_index和rd_block_index、xn_index最好分开设置,因为它们一个对应输出一个对应输入,而输出序号和输入序号又是不同步的,如果设置不好(如xk_index和xn_index设置成相同的),那么c
32、hipscope就永远抓取不到符合条件的波形。4、chipscope显示的结果不正确。这个问题有两种表现方式:(1)显示的数据和modelsim仿真的不同,这一般不是运行的问题,而是显示的问题,在output信号中比较常见。为显示正确结果,需要确保:a信号序号的顺序应该是从上往下由低到高,如output_re_0到output_re_15,如果不正确,右键单击相应信号选择反转;b显示数字的形式应与modelsim的一致,推荐都按无符号数“unsigned decimal”显示,因为它也是output_data.txt的显示形式。(2)若在按照(1)中的说明操作后,显示的数据还是和modelsi
33、m不同,如置触发条件为out_block_index为特定值时,抓取到的数据和modelsim对应位置的不同,这就是chipscope的问题了。出现这种问题的原因,可能是cdc文件触发源设置信号过少(至少应有10个信号)。5、添加或删除信号(变量)后,仿真出现错误。这些信号通常是需要在多个文件中传递参数的。要确保:(1)在这些关联文件中均添加这个这个信号的声明,并注明这个信号是输入还是输出,通常这些操作需要在模块声明部分完成; (2)在实例化模块语句中,如果要和对应模块传递参数或直接利用此信号控制模块(通常是ip核)运行,也需要加入语句,格式:.要传递给模块的信号名(当前模块的信号名),如.r
34、st1(rst),则把当前模块的rst信号状态传给调用模块中的rst1信号。 6、在256点fft(radix-4,burst i/o)的功能仿真中,波形出现红色线条。 未添加unload信号。六、fft部分的资源占用情况(device utilization summary) 去掉cdc文件,并重新执行implement design操作,就可以获得如下的设备利用率报告(如果执行synthesize xst操作会得到一个不太详尽的报告,里面只含有对资源占用的大概预测值)。 以下给出256点fft采用streaming i/o和burst i/o的报告。 streaming i/o:devic
35、e utilization summary-slice logic utilizationusedavailableutilizationnote(s)number of slice registers2,57511,44022%number used as flip flops2,575number used as latches0number used as latch-thrus0number used as and/or logics0number of slice luts1,6455,72028%number used as logic1,1985,72020%number usi
36、ng o6 output only513number using o5 output only22number using o5 and o6663number used as rom0number used as memory3361,44023%number used as dual port ram0number used as single port ram0number used as shift register336number using o6 output only53number using o5 output only0number using o5 and o6283n
37、umber used exclusively as route-thrus111number with same-slice register load102number with same-slice carry load9number with other load0number of occupied slices6471,43045%number of lut flip flop pairs used1,990number with an unused flip flop851,9904%number with an unused lut3451,99017%number of ful
38、ly used lut-ff pairs1,5601,99078%number of unique control sets29number of slice register sites lostto control set restrictions15011,4401%number of bonded iobs4010239%number of loced iobs224055%number of ramb16bwers2326%number of ramb8bwers5647%number of bufio2/bufio2_2clks0320%number of bufio2fb/buf
39、io2fb_2clks0320%number of bufg/bufgmuxs1166%number used as bufgs1number used as bufgmux0number of dcm/dcm_clkgens040%number of ilogic2/iserdes2s02000%number of iodelay2/iodrp2/iodrp2_mcbs02000%number of ologic2/oserdes2s02000%number of bscans040%number of bufhs01280%number of bufplls080%number of bu
40、fpll_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_syncs010%average fanout of non-clock nets2.07 burst i/o:device utilization summary-slice logic utilizationusedavailableu
41、tilizationnote(s)number of slice registers1,91211,44016%number used as flip flops1,912number used as latches0number used as latch-thrus0number used as and/or logics0number of slice luts1,3775,72024%number used as logic1,1095,72019%number using o6 output only789number using o5 output only1number usin
42、g o5 and o6319number used as rom0number used as memory1821,44012%number used as dual port ram0number used as single port ram0number used as shift register182number using o6 output only23number using o5 output only0number using o5 and o6159number used exclusively as route-thrus86number with same-slic
43、e register load85number with same-slice carry load1number with other load0number of occupied slices5641,43039%number of lut flip flop pairs used1,658number with an unused flip flop1281,6587%number with an unused lut2811,65816%number of fully used lut-ff pairs1,2491,65875%number of unique control sets13number of slice register sites lostto control set restrictions5911,4401%number of bonded iobs3710236%number of ramb16bwers2326%number of ramb8bwers76410%number of bufio2/bufio2_2clks0320%number of bufio2fb/bu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地下停车场出入口设计
- 职工病死补偿协议书
- 聘用兼职厨师协议书
- 苜蓿种植收购协议书
- 租领合同补充协议书
- 中学与家长安全教育协议范文
- 独立音乐保证金协议
- 希望人生教学设计
- 建筑工程水电施工合同
- 退休人员慈善活动合作合同
- 大数据导论(计科2103-4)学习通超星期末考试答案章节答案2024年
- 《地方导游基础知识》7.3 青海 地方导游基础知识-题库及答案
- 小学美术人教版六年级上册 教案-点的集合
- 浙江省金华市义乌市东阳市2024年小升初英语试卷( 含笔试解析无听力原文无音频)
- 感觉统合教育指导师理论考试复习题库(含答案)
- SQL语句创建学生信息数据库表的示例学生信息数据库表
- 舆情风险应对处置
- 2024河南中考数学备考 二次函数图象与性质综合题、交点问题 (课件)
- 快速入门穿越机-让你迅速懂穿越机
- 数字电子技术(广东工业大学)智慧树知到期末考试答案章节答案2024年广东工业大学
- 人工智能对书法技法的革新
评论
0/150
提交评论