版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
BlackfinDSP的寻址方式及指令系统本章参考书:
Blackfin®ProcessorProgrammingReference,内核结构及存储器结构回顾DSP技术<2>内核结构(知识回顾)DSP技术<3>two16-bitmultiplierstwo40-bitaccumulatorstwo40-bitarithmeticlogicunits(ALUs)four8-bitvideoALUsone40-bitshiftereight32-bitregistersor
16independent16-bitregisters存储器结构(知识回顾)所有资源,如内部存储器、外部存储器、I/O控制寄存器都统一用32位地址映射到4GB空间L1存储器由内核直接访问,性能最高外部存储器通过ExternalBusInterfaceUnit(EBIU)访问DMA可以提供高带宽的数据搬移。它可在内部存储器和外部存储器之间提供代码及数据的块传输DSP技术<4>内部存储器:每个Blackfin处理器包含3个块的片内存储器,内核对这些存储器可以进行高速访问L1指令存储器,由SRAM和cache组成。该存储器可以被处理器全速访问。L1数据存储器,由SRAM和(或)cache组成。该存储器可以被处理器全速访问。L1高速暂存RAM,该存储器可与L1存储器以相同的速度访问,但它只能用作数据SRAM,而不能配置成cache。L2存储器,容量比L1大,访问性能比L1稍低,作为多核之间的共享内存,可以存放数据和指令,但不能用作cacheDSP技术<5>外部存储器:通过外部总线扩展器ExternalBusInterfaceUnit(EBIU)进行访问。它是一个16位总线接口,可以与多种类型的存储器进行无缝连接,如SDRAM、flashmemory、EPROM、ROM、SRAM、memory-mappedI/O设备。I/O内存空间:Blackfin没有定义独立的I/O空间,所有I/O设备的控制寄存器都通过32位地址映射到统一的4GB地址空间。DSP技术<6>RegisterFiles(知识回顾)处理器的运算单元定义有3个寄存器组——DataRegisterFile,PointerRegisterFile,TheDAGregisters数据寄存器:用于接收从数据总线输入的操作数以及
保存运算单元的运算结果指针寄存器:存放地址指针地址发生寄存器:这是一组专门的寄存器,用于管理在数字信号处理运算过程中的循环缓冲器,实现地址产生的零开销DSP技术<7>地址算术单元寄存器组DSP技术<8>数据运算单元寄存器组:R0~R7操作举例32位访问:R2=R1+R2;16位访问:R2.L=R1.H*R0.L在寄存器组与L1数据存储器之间连接有3组32位的独立数据总线,包括2个Load,和1个StoreDSP技术<9>累加器寄存器:A0~A1结构16位:An.L,An.H8位扩展位:An.X32位:An.W40位:AnDSP技术<10>操作举例A0=A1;/*40-bitmove*/A1.W=R7;/*32-bitmove*/A0.H=R5.H;/*16-bitmove*/R6.H=A0.X;/*read8-bitvalueandsignextendto16bits*/DSP技术<11>算术逻辑单元ALU2个ALUs实现定点数据的算术及逻辑运算。ALU定点指令对16-,32-,and40-bit的操作数进行运算,得到16-,32-,or40-bit的定点输出。ALU指令包括:寄存器加减立即数加减乘法器结果加减逻辑运算:AND,OR,NOT,XOR,bitwiseXOR,Negate函数运算:ABS,MAX,MIN,四舍五入,除法DSP技术<12>乘累加单元(MAC)2个乘法器(MAC0和MAC1)实现定点乘法和乘累加运算。乘法器实现两个16位数相乘,得到32位结果,乘法结果可用于累加器进行40位的加减运算。乘法运算乘加运算(结果可舍入)乘减运算(结果可舍入)DSP技术<13>桶形移位寄存器BarrelShifter桶形移位寄存器实现16-,32-,or40-bit的移位运算。包括:算术移位,逻辑移位,旋转,以及比特的测试、置位、封装、解封装、指数位检测等。DSP技术<14>程序控制器PROGRAMSEQUENCER程序控制器控制程序流并提供处理器要执行的下条指令的地址。程序流大部分是线性的,此时处理器顺序地执行程序指令。当程序采用非顺序结构时,线性程序流会发生改变,非顺序结构包括:循环子程序跳转中断和异常空闲DSP技术<15>地址算术单元ADDRESSARITHMETICUNITAAU负责保证在内存和内核寄存器之间进行可靠的数据传输。它可以独立地进行地址运算,以免去数据运算单元负担地址运算。DSP技术<16>AAU使用数据地址产生器计算数据的存取地址DSP技术<17>AAU实现多种功能以减小数据访问的开销产生地址:在数据访问期间提供数据地址产生地址后自动修改:提供数据搬移时的地址,并为下一次搬移自动增减地址产生偏移地址:提供相对于某个基地址的偏移量,不改变原始地址指针修改地址:增减地址,不进行数据搬移位逆序地址:在数据搬移时提供位逆序地址DSP技术<18>DAG的寄存器索引寄存器I[3:0]:无符号32位,保存一个指向存储器的地址,如R3=[I0]变址寄存器M[3:0]:有符号32位,在寄存器数据搬移时,提供I寄存器的增量,如R0=[I0++M1]基址和长度寄存器B[3:0]和L[3:0]:无符号32位,Bn和Ln设置一个循环缓冲器的起始地址和寻址范围,Bn、Ln及In相同下标为相关联的一组,公共完成循环寻址指针寄存器P[5:0],FP,USP,SP:无符号32位指针寄存器,在不同的指令中操作和使用。堆栈指针SP仅在监控模式下可以访问,用户堆栈指针USP在用户模式下是可以访问的DSP技术<19>BLANKFIN指令集简介DSP技术<20>DSP技术<21>Blackfin指令集特点(1)Blackfin处理器系列汇编语言指令集使用易于编程和可读性强的代数语法。采用专门调整的灵活的高密度编码的指令,这些指令被编译后只占用非常小的存储空间。指令集还提供了多功能指令,以使在一个指令中能够使用多个处理器内核资源。除许多微控制器上常见的功能外,指令集编译C和C++源代码时效率非常高。指令集还支持用户(算法/应用代码)和管理员(O/S内核,设备驱动,调试器,ISRs)两种运行模式,允许对处理器内核资源的多级访问。DSP技术<22>Blackfin指令集特点(2)汇编语言采用了处理器独特的体系结构,具有以下优点:无缝集成DSP/CPU特征,对8位和16位操作进行了优化。并发加载/存储的改进哈佛体系结构,每个周期支持2个16位MAC或4个8位ALU+2个加载/存储+2个指针更新。所有的寄存器、I/O、和存储器被映射成为统一4GB存储空间,提供了一个简化编程模式。微控制器特征,如任意位和位域操作,插入和提取,对8位、16位和32位数据类型上的整数操作,独立的用户和管理员堆栈指针。代码密度增强,包括混合的16和32位指令(无模式转换和代码分离)。常用指令以16位编码。DAG的寻址DSP技术<23>DAG寻址方式汇总帧和堆栈指针循环缓冲寻址位逆序寻址索引和指针寄存器的索引寻址自动增减寻址预修改堆栈指针寻址立即数偏移地址的索引寻址后修改寻址<24>DSP技术不同位宽的寻址Blackfin是按字节编址的,但32-,16-,8-bit的访问必须是32-,16-,8-bit对齐的,对应的DAG寄存器的增量为4,2,1。32比特访问:R0=[P3++],访问后P3的增量为416比特访问:R0.L=W[I3++],访问后I3的增量为28比特访问:R0=B[P3++](Z),访问后P3的增量为1,字节值可以零扩展/符号扩展到32位DSP技术<25>帧和堆栈指针很多时候,FP和SP可以像普通的P寄存器一样来操作,在Load和Store指令中它们与通用指针类似:R1=B[SP](Z)FP和SP还有其特殊的功能,FP作为帧指针可以扩展16位编码的Load/Store操作的寻址范围;SP作为堆栈指针在堆栈操作的指令中发挥作用。DSP技术<26>SP堆栈指针分为用户堆栈指针和监控堆栈指针。用户模式下:只能访问用户堆栈指针USP,但汇编程序中的访问别名仍为SP监控模式下:可以访问用户堆栈指针USP,和监控堆栈指针SP<27>DSP技术一些Load/Store指令专用FP和SP来操作FP-索引Load/Store,扩展了16位编码的加载/保存操作的寻址范围堆栈的Push/Pop指令链接/解除链接(Link/Unlink)指令,他们控制堆栈帧空间并为该空间管理FP<28>DSP技术索引和指针寄存器的索引寻址索引寻址使用I寄存器或者指针寄存器中的值作为有效地址R0=[I2];/*加载32位值*/R0.H=W[I2];/*加载16位值*/R0=B[I2];/*加载8位值*/[P1]=R0;/*保存32位值*/W[P1]=R0;/*保存16位值*/B[P1]=R0;/*保存8位值*/DSP技术<29>在进行8和16位Load操作时可以进行符号位扩展或者零扩展。例如,假设P1指向的地址中的16位值为0x8080,则R0=W[P1](Z);/*R0=0x00008080*/R1=W[P1](X);/*R1=0xFFFF8080*/R2=B[P1](Z);/*R2=0x00000080*/R3=B[P1](X);/*R3=0xFFFFFF80*/DSP技术<30>索引寻址可以支持立即数偏移量,这种寻址方式允许程序可以利用一个数据表的基地址,来获取数据表中的数据。而这个寻址过程中基地址指针的值不会被修改。例如,假设P1=0x64008000,则[P1+n]访问的是0x64008000+n这个地址上的值。
其中,根据访问的位宽,P1+n应该是位对齐的,否则会触发一个异常事件。DSP技术<31>自动增减寻址自动增减寻址会在访问后自动更新指针寄存器或者I寄存器。增量大小根据访问的位宽决定,32、16和8比特访问时指针的增量分别为4、2、1。8和16比特的读操作可以指定目标寄存器为符号扩展或零扩展指针寄存器可以用于8、16和32比特访问,而I寄存器只能用于16和32比特访问DSP技术<32>举例R0=W[P1++](Z);从P1指向的地址加载一个16位的值到R0,高位零扩展。访问后P1加2R0=[I2--];从I2指向的地址加载一个32位的值到R0。访问后I2减4DSP技术<33>预修改堆栈指针寻址预修改寻址只用于堆栈指针SP它是在使用SP之前先对SP进行修改仅支持32位操作举例:[--SP]=R0;将R0压入堆栈DSP技术<34>后修改寻址后修改寻址使用I寄存器或者P寄存器的值作为有效地址,然后通过另一个寄存器的值来修改它。P寄存器可以通过其它的P寄存器来修改I寄存器可通过M寄存器来修改这类指令不支持P寄存器作为目的寄存器,也不支持字节寻址DSP技术<35>后修改寻址举例R5=[P1++P2];从P1指向的地址Load一个32位数到R5,然后P1=P1+P2R2=W[P4++P5](Z);
从P4指向的地址Load一个16位值到R2,高位零扩展,然后P4=P4+P5R2=[I2++M1];从I2指向的地址Load一个32位数到R2,然后I2=I2+M1DSP技术<36>循环寻址索引寄存器Ix:是输出到地址总线上的值变址寄存器Mx:是Ix的增量(步长)基址寄存器Bx:缓冲区起始地址长度寄存器Lx:缓冲区长度缓冲区的边界判断和地址的计算方法如下:如果Mx>0时,且Ix+Mx<Bx+Lx,则Ix=Ix+Mx;且Ix+Mx≥Bx+Lx,则Ix=Ix+Mx–Lx;如果Mx<0时,且Ix+Mx≥Bx,则Ix=Ix+Mx;且Ix+Mx<Bx,则Ix=Ix+Mx-Lx。<37>DSP技术循环寻址说明<38>DSP技术循环寻址注意事项预调整地址方式不支持循环寻址方式。在向Bx寄存器写入起始地址的同时,对应的Ix寄存器也会自动赋予相同的值。Bx、Lx、Ix三个寄存器的序号必须一致,而Mx寄存器可以在同一个DAG组中任意选取。两个DAG中都可以设置循环缓存区Mx寄存器可以正也可以负对Lx和Bx寄存器清零,对应的Ix寄存器自动恢复线性寻址方式。<39>DSP技术循环寻址的应用构建软件的FIFO一些多维信号运算的缓冲区管理
,如FFT、矩阵运算等DSP技术<40>位逆序寻址为了对运算输出结果进行有序排列,一些算法(如FFT)需要采用位逆序方式寻址。为了满足这些需要,DAG的位逆序寻址特征允许重复的将数据序列分小块并以位逆序方式保存这些数据的地址P3+=P0(BREV)<41>DSP技术比特逆序的加法<42>DSP技术位逆序的来历-FFTFFT计算过程:输入-蝶形运算-整序(位逆序)-输出<43>DSP技术位逆序寻址的概念位逆序寻址主要针对FFT算法设计,FFT计算过程中输入数据的排列次序被按照一定规律打乱,称为逆序排列。用m=log2N位二进制数可以表示N个输入数据的下标,将二进制下标的高低位交换,就得到逆序序列。如N=8时,A3的下标是011,逆序后变成110,即A6,数组A0,A1,A2,A3,A4,A5,A6,A7逆序后变成A0,A4,A2,A6,A1,A5,A3,A7。位逆序寻址可自动按照逆序规律计算地址,节省了逆序操作的软件开销。DAG提供了位逆序寻址方式。<44>DSP技术指令集DSP技术<45>DSP技术<46>程序流控制指令(1)跳转指令JUMP,JUMP.S,JUMP.L语法JUMP(Preg);跳转至寄存器Preg所指向的一个绝对地址JUMP(PC+Preg);跳转至PC(程序计数器)的一个相对地址,偏移量为Preg寄存器的内容JUMPoffset;跳转至PC+offsetJUMP.Soffset;短跳转至PC=PC+offset(13位)JUMP.Loffset;长跳转至PC=PC+offset(25位)JUMPuser_label;跳转至用户定义标记的绝对地址其中,Preg:P5–0,SP,FPExamplejumpget_new_sample;跳转至用户定义标记的绝对地址jump(p5);跳转至寄存器Preg所指向的一个绝对地址jump(pc+p2);跳转至PC(程序计数器)的一个相对地址,偏移量为Preg寄存器的内容jump0x224;跳转至PC+offsetjump.s0x224;短跳转至PC=PC+offsetjump.l0xFFFACE86;长跳转至PC=PC+offsetDSP技术<47>DSP技术<48>程序流控制指令(2)条件跳转指令IFCCJUMP语法IFCCJUMPdestination;如果CC=1,则跳转IF!CCJUMPdestination;如果CC=0,则跳转Exampleifccjump0xFFFFFE08(bp);如果CC为1,则后向(0xFFFFFE08是负值)跳转到一个偏移地址,BP是分支预测选项,帮助处理器提高跳转指令的性能。ifccjump0x0B4;如果CC为1,则前向(0x0B4是正值)跳转到一个偏移地址ifccjumpdest_label;如果CC为1,则跳转到一个绝对地址DSP技术<49>调用和返回指令(1)子程序调用指令:CALL语法CALL(Preg);调用寄存器Preg所指向的一个绝对地址的子程序CALL(PC+Preg);调用PC的一个相对地址,偏移量为Preg寄存器的内容CALLoffset;调用一个相对地址PC+offset其中,Preg:P5–0,SP,FPCALL指令执行后,当CALL的下一条指令地址会被写入到RETS寄存器DSP技术<50>Examplecall(p5);call(pc+p2);call0x123456;callget_next_sample;DSP技术<51>调用和返回指令(2)子程序返回指令:RTS,RTI,RTX,RTN,RTE语法RTS;由子程序返回,将RETS寄存器的值放入PCRTI;由从中断返回,将RETI寄存器的值放入PCRTX;由特殊情况返回,将RETX寄存器的值放入PCRTN;由非屏蔽中断返回,将RETN寄存器的值放入PCRTE;由竞争返回,将RETE寄存器的值放入PCDSP技术<52>循环指令有两种指令格式第一种是LOOPloop_nameloop_counter;LOOP_BEGINloop_name;LOOP_ENDloop_name;第二种是LSETUP(Begin_Loop,End_Loop)Loop_Counter;Begin_Loop和End_Loop可以是偏移地址或绝对地址标签,编译器会将绝对地址转换为相对地址DSP技术<53>Example1lsetup(4,4)lc0;lsetup(poll_bit,end_poll_bit)lc0;lsetup(4,6)lc1;lsetup(FIR_filter,bottom_of_FIR_filter)lc1;lsetup(4,8)lc0=p1;lsetup(4,8)lc0=p1>>1;DSP技术<54>Example2loopDoItSomeLC0;loop_beginDoItSome;…loop_endDoItSome;loopMyLoopLC1;loop_beginMyLoop;…loop_endMyLoop;DSP技术<55>加载指令加载立即数register=constant;加载指针寄存器P-register=[indirect_address]加载数据寄存器D-register=[indirect_address]加载半字D-register=W[indirect_address](Z);零扩展D-register=W[indirect_address](X);符号扩展DSP技术<56>加载字节D-register=B[indirect_address](Z);零扩展D-register=B[indirect_address](X);符号扩展Exampler0=-344(x);p3=[p2];p5=[p0++];r6=[p2+12];r3=[p0];r2=w[sp--](z);r0=b[p4+0xFFFF800F](x);DSP技术<57>存储指令存储指针寄存器[indirect_address]=P-register;存储数据寄存器[indirect_address]=D-register;Example[fp-12]=p1;[p2]=p3;[sp--]=r2;[i3++m0]=r7;w[i1]=r3.h;b[p1++]=r7;DSP技术<58>寄存器数据转移指令语法:dest_reg=src_regIFCCdest_reg=src_regIF!CCdest_reg=src_regdest_reg=src_reg(Z/X)dest_reg=src_reg_byte(Z/X)Exampler7=p2;retn=p0;ifccr3=r0;R4=R0.L(Z)a0.h=r7.hr7=r2.b(x);DSP技术<59>堆栈操作指令进栈指令:--SP(Push)语法[--SP]=src_reg;对一个寄存器进行压栈[--SP]=(src_reg_range);对多个寄存器进行连续压栈出栈指令:SP++(Pop)语法dest_reg=[SP++];(dest_reg_range)=[SP++];DSP技术<60>Example[--sp]=p0;[--sp]=(r7:5,p5:0);[--sp]=(r7:2);r0=[sp++];(p5:4)=[sp++];DSP技术<61>堆栈操作指令连接和撤销指令:LINK,UNLINK语法LINKuimm18;UNLINK;执行连接(LINK)指令时,将当前的RETS寄存器和帧指针FP的值压入堆栈,并将帧分配在堆栈的空间中。与此相反,撤销连接(UNLINK)指令时,将恢复压入堆栈中的RETS寄存器和帧指针FP的值。利用该指令可以在堆栈中为子函数的局部变量分配空间DSP技术<62>Examplelink8;建立8个字的帧空间[--sp]=(r7:0,p5:0);压栈(r7:0,p5:0)=[sp++];出栈unlink;删除帧空间DSP技术<63>控制代码比特(CC)相关指令比较指令CC=operand_1==operand_2CC=operand_1<operand_2CC=operand_1<=operand_2Examplecc=r3==r2;cc=r4<=3;cc=p0<p3;cc=p2<-4;cc=a0<=a1;DSP技术<64>转移CCdest=CCdest|=CCdest&=CCdest^=CCCC=sourceCC|=sourceCC&=sourceCC^=source取反CCCC=!CCDSP技术<65>逻辑运算(比特域逻辑运算)与:dest_reg=src_reg_0&src_reg_1非:dest_reg=~src_reg或:dest_reg=src_reg_0|src_reg_1异或:dest_reg=src_reg_0^src_reg_1DSP技术<66>BXORSHIFT,BXOR这两种比特域异或指令可以实现线性反馈移位寄存器(LFSR)。应用:伪随机序列生成循环码(如BCH)的编码和解码CRC校验DSP技术<67>比特运算比特清零:BITCLR(register,bit_position)比特置位:BITSET(register,bit_position)比特反转:BITTGL(register,bit_position)比特测试CC=BITTST(register,bit_position)CC=!BITTST(register,bit_position)DSP技术<68>比特融合dest_reg=DEPOSIT(backgnd_reg,foregnd_reg)dest_reg=DEPOSIT(backgnd_reg,foregnd_reg)(X)该指令将foregnd_reg中指定长度的比特段拷贝到backgnd_reg中指定的比特位置。应用:视频图像叠加算法比特提取dest_reg=EXTRACT(scene_reg,pattern_reg)(Z)dest_reg=EXTRACT(scene_reg,pattern_reg)(X)该指令从scene_reg中提取特定位置及长度的比特段应用:视频图像模式识别与分离算法DSP技术<69>比特复用BITMUX(source_1,source_0,A0)(ASR)BITMUX(source_1,source_0,A0)(ASL)该指令将source_1和source_0中的比特复用到A0,并对寄存器中的值进行移位操作。应用:如卷积编码DSP技术<70>ExampleDSP技术<71>比特1的计数dest_reg=ONESsrc_reg该指令统计src_reg中为1的比特的个数应用:误码校验;错误比特计数DSP技术<72>移位指令算术移位dest_reg>>>=shift_magnitude;dest_reg=src_reg>>>shift_magnitude(opt_sat);accumulator=accumulator>>>shift_magnitude;dest_reg=ASHIFTsrc_regBYshift_magnitude(opt_sat);accumulator=ASHIFTaccumulatorBYshift_magnitude;DSP技术<73>逻辑移位dest_pntr=src_pntr>>1;dest_pntr=src_pntr>>2dest_pntr=src_pntr<<1;destdest_pntr=src_pntr<<2dest_reg>>=shift_magnitude;dest_reg<<=shift_magnitude;dest_reg=src_reg>>shift_magnitude;dest_reg=src_reg<<shift_magnitude;dest_reg=LSHIFTsrc_regBYshift_magnitude;DSP技术<74>算术移位和逻辑移位的区别算术移位需要对符号位进行处理,即有符号的移位。右移时保持符号位;左移时,移位到一定程度会保持饱和。而逻辑移位是无符号的移位。右移时,符号位补0;左移时最低为补0DSP技术<75>旋转移位dest_reg=ROTsrc_regBYrotate_magnitudeaccumulator_new=ROTaccumulator_oldBYrotate_magnitude比特旋转移位,从一端移出的比特会从另一端移进来。移位链中包含CCDSP技术<76>ExampleDSP技术<77>移位加dest_pntr=(dest_pntr+src_reg)<<1dest_pntr=(dest_pntr+src_reg)<<2dest_reg=(dest_reg+src_reg)<<1dest_reg=(dest_reg+src_reg)<<2dest_pntr=adder_pntr+(src_pntr<<1)dest_pntr=adder_pntr+(src_pntr<<2)DSP技术<78>算术运算指令绝对值:dest_reg=ABSsrc_reg加减法常规加减法:dest_reg=src_reg_1+/-src_reg_2;预减/增比例的加/减法:dest_reg=src_reg_0+/-src_reg_1(RND20/RND12);立即数加减法:register+=constant;register-=constant;预减/增比例的加/减法首先将输入数据进行右/左移位,然后进行加减,再对加减结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年城市综合体土地房屋股权转让与建设合同范本3篇
- 2024年度农业发展与农产品销售合同
- 2024年桩基工程检测服务协议版B版
- 2024年度绿色节能变频器批量采购与销售合作协议3篇
- 2024年度科研课题研究合同3篇
- 2024年度商务咨询合同补充协议3篇
- 2024年度网络安全检测与加固服务合同2篇
- 2024版KTV装修项目安全管理合同范本3篇
- 2024版9A文建筑设备租赁与施工一体化合同2篇
- 2024企业特别项目组成员聘用及成果分成合同2篇
- 浙江标准农贸市场建设与管理规范
- 护理质控分析整改措施(共5篇)
- 金属矿山安全教育课件
- 托盘演示教学课件
- 中华农耕文化及现实意义
- DB32T 4353-2022 房屋建筑和市政基础设施工程档案资料管理规程
- DBJ61-T 112-2021 高延性混凝土应用技术规程-(高清版)
- 2023年高考数学求定义域专题练习(附答案)
- 农产品品牌与营销课件
- 苏科版一年级心理健康教育第17节《生命更美好》教案(定稿)
- 车辆二级维护检测单参考模板范本
评论
0/150
提交评论