版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
逻辑综合的资料第1页/共133页2023/5/12内容提纲综合的概念描述语句与逻辑综合代码优化逻辑可综合风格第2页/共133页2023/5/13综合的概念综合的过程就是将Verilog语句描述的电路从寄存器传输级(RTL)模型构造成门级网表的过程包括翻译、映射、优化等可综合风格的VerilogHDL和VHDL的语法只是它们各自语言的一个子集,国际标准目前尚未最后形成,各厂商的综合器所支持的HDL子集也略有所不同系统级(高层次的行为描述)的综合由于还不太成熟按照一定的原则来编写代码就可以保证Verilog模块综合前和综合后仿真的一致性,只有设计者深入了解综合的实质,才能写出高质量的代码第3页/共133页2023/5/14数值数据类型与综合硬件模型数值与常量的对应关系:0:逻辑0,低电平1;逻辑1,高电平Z高阻,或无关值(用于casez和casex)X无关值或未知值第4页/共133页2023/5/15数据类型与综合线网型Wire:通用的线网类型,综合成导线第5页/共133页2023/5/16变量:Reg:既可用于端口也可用于变量,能综合Integer:仅能用于变量,并且以二进制补码的格式存储数值,可综合Time:仅用于仿真Real:仅用于仿真Realtime:仅用于仿真第6页/共133页2023/5/17过程块任意边沿–
在所有输入信号的任意边沿进入的过程块产生组合逻辑。这种过程块称为组合块。always@(aorb)//与门y=a&b;•
单个边沿–
在一个控制信号的单一边沿上进入的过程块产生同步逻辑。这种过程块称为同步块。always@(posedgeclk)//Dflip-flopq<=d;–
同步块也可以对异步复位信号的变化产生敏感always@(posedgeclkornegedgerst_)if(!rst_)q<=0;elseq<=d;第7页/共133页2023/5/18储值单元的综合原则硬件三种基本的储值单元Wire锁存器触发器对verilog语言而言,对于线网型只能综合成wireReg可以综合成导线也可能综合成存储器(锁存器或触发器)第8页/共133页2023/5/19若同步块中使用一个reg,则:
如果在一个时钟周期赋值并在另一个周期被采样,则只能以硬件寄存器实现。
如果reg还是一个基本输出,它会出现在综合网表中,但不一定是一个硬件寄存器。
若两者都不是,该信号可能被优化掉。第9页/共133页2023/5/110若组合块中使用一个reg,则:
如果reg值随块的任何一个输入的变化而改变,则在综合时不会产生硬件寄存器。
如果reg值并不总是随块的输入变化而改变,则综合时会产生一个锁存器。第10页/共133页2023/5/111举例1modulenoreg(a,b,c);inputa,b;outputc;regc,temp;always@(aorb)beginTemp=a^b;C=~tempendendmodule在一个过程块内,先赋值紧接着引用,没有综合成存储器第11页/共133页2023/5/112举例2modulelatch(a,b,c);inputa,b;outputc;regc;always@(aorb)if(a)c=b;endmodule由于变量c在a=0时没有赋值,所以综合出了锁存器第12页/共133页2023/5/113举例3moduleex1reg(d,clk,q);inputd,clk;outputq;regq,rega;always@(posedgeclk)beginrega=0;if(d)rega=1;q=rega;endendmodule说明:在这个例子中,rega只作暂存,因此会被优化掉。第13页/共133页2023/5/114举例4moduleex2reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always@(aorborc)beginif(a&b)rega=c;elserega=0;y=rega;endendmodule说明:在这个例子中,y和rega总是赋新值,因此产生一个纯组合逻辑,Rega作为暂存器被优化掉第14页/共133页2023/5/115举例5moduleex4reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always@(aorborc)beginif(a&b)rega=c;y=rega;endendmodule说明:在这个例子中,rega不总是产生新值,因此会产生一个锁存器,y是锁存器的输出,Rega作为暂存器被优化掉第15页/共133页2023/5/1163.运算符与综合几乎所有的操作符都可以综合。===和!==与x和z有关的操作符不可综合写表达式时,要用圆括号使逻辑关系明确,最好不要依赖运算的优先级操作符类型符号连接及复制操作符一元操作符算术操作符逻辑移位操作符 关系操作符相等操作符按位操作符逻辑操作符条件操作符{}{{}}!~&|^+-*%<<>>><>=<===!=&^~^|&&||?:第16页/共133页2023/5/117算术运算符的综合综合工具把线网型和寄存器型翻译成无符号数据格式把整型翻译成有符号二进制补码数据格式第17页/共133页2023/5/118进位与位宽对算术运算都存在结果与操作数的宽度匹配问题,为避免结果的截断误差:加法运算:结果位宽大于或等于两个操作数中最大位宽乘法运算:结果位宽大于或等于两个操作数位宽之和第18页/共133页2023/5/119位选择的综合常量索引位选择modulebitselect(a,b,c);input[2:0]a,b;output[2:0]c;Reg[2:0]c;always@(aorb)C[2:0]={a[1:0],b[0};endmodule第19页/共133页2023/5/120过程赋值语句只能出现在always里阻塞赋值:moduleblockassignment(clk,q1,q2);inputclk;output[2:0]q1,q2;reg[2:0]q1,q2;Always@(posedgeclk)beginQ1=q1+1;Q2=q1;endendmodule第20页/共133页2023/5/121第21页/共133页2023/5/122非阻塞赋值语句moduleblockassignment(clk,q1,q2);inputclk;output[2:0]q1,q2;reg[2:0]q1,q2;Always@(posedgeclk)beginQ1<=q1+1;Q2<=q1;endendmodule第22页/共133页2023/5/123第23页/共133页2023/5/124建议组合逻辑使用阻塞语句时序逻辑使用非阻塞语句对所附加的延时控制,都被综合工具忽略在一个模块中,同一个变量不能既有阻塞赋值又有非阻塞赋值,大多数的综合工具报错第24页/共133页2023/5/125条件表达式的综合moduleconditioin1(din,c1,c2,dout);inputdin,c1,c2;outputdout;Assigndout=(c1^c2)?din:0;endmodule第25页/共133页2023/5/126第26页/共133页2023/5/127条件表达式级联,有优先级moduleconditioin2(din1,din2,c1,c2,dout);inputdin1,din2,c1,c2;outputdout;Assigndout=(c1)?(din1&din2):(!c2)?(din1|din2):(din1^din2);endmodule第27页/共133页2023/5/128第28页/共133页2023/5/129Always语句的组合逻辑综合对于组合逻辑,事件列表必须包括所有输入变量临时变量可以不用列出,通常综合出来就是导线,且不唯一,可以不用,主要是让代码更简洁注意功能仿真的结果与实际综合结果的不一致,见下例第29页/共133页2023/5/130Moduleincompletevent(din,c,dout);Inputdin,c;outputdout;always@(c)Dout=din&c;endmodule第30页/共133页2023/5/131综合结果和功能仿真第31页/共133页2023/5/132时序仿真第32页/共133页2023/5/133if语句的综合modulecompif(out,d0,d1,s);inputd0,d1,s;outputout;regout;always@(sord0ord1)if(s)out=d1;elseout=d0;endmodule单条的if---then语句综合为一个二选1数据选择器第33页/共133页2023/5/134不完整的if分支语句的综合Modulelatch(counter,state);input[3:0]counter;output[1:0]state;reg[1:0]state;Always@(counter)beginIf(counter<2)state=0;Elseif(counter<5)state=1;endendmodule第34页/共133页2023/5/135第35页/共133页2023/5/136描述完整的if分支语句Modulelatch(counter,state);input[3:0]counter;output[1:0]state;reg[1:0]state;Always@(counter)beginIf(counter<2)state=0;Elseif(counter<5)state=1;Elsestate=2;endendmodule第36页/共133页2023/5/137第37页/共133页2023/5/138Case语句的综合全等比较控制表达式与分支表达式位宽必须相同必须显式表示,否则编译器认为与机器字长相同可以多个不同取值对应同一操作第38页/共133页2023/5/139Modulecasestate(a,b,state,q);inputa,b;input[1:0]state;outputq;regq;Always@(stateoraorb)Case(state)2’b00:q=a&b;2’b01:q=a|b;2’b10:q=a^b;2’b11:q=0;endcaseendmodule第39页/共133页2023/5/140第40页/共133页2023/5/141不完整的case分支语句Modulecasestate(a,b,state,q);inputa,b;input[1:0]state;outputq;regq;Always@(stateoraorb)Case(state)2’b00:q=a&b;2’b01:q=a|b;2’b10:q=a^b;endcaseendmodule第41页/共133页2023/5/142第42页/共133页2023/5/143避免从case语句中综合出锁存器措施1.在case语句之前对要赋值的变量赋初始值Modulecasestate(a,b,state,q);inputa,b;input[1:0]state;outputq;regq;Always@(stateoraorb)beginq=0;Case(state)2’b00:q=a&b;2’b01:q=a|b;2’b10:q=a^b;endendcaseendmodule第43页/共133页2023/5/144第44页/共133页2023/5/1452.使用default分支语句Modulecasestate(a,b,state,q);inputa,b;input[1:0]state;outputq;regq;Always@(stateoraorb)beginCase(state)2’b00:q=a&b;2’b01:q=a|b;2’b10:q=a^b;Default:q=0;endendcaseendmodule第45页/共133页2023/5/146第46页/共133页2023/5/1473.使用full_case综合指令Modulecasestate(a,b,state,q);inputa,b;input[1:0]state;outputq;regq;Always@(stateoraorb)beginCase(state)/*synthesisfull_case*/2’b00:q=a&b;2’b01:q=a|b;2’b10:q=a^b;endendcaseendmodule综合工具认为所有可能都已经列出第47页/共133页2023/5/148第48页/共133页2023/5/149Casez综合Modulecasezstate(opa,opb,ir,dout);inputopa,opb;input[2:0]ir;outputdout;regdout;Always@(opaoropborir)Casez(ir)3’bzz1:dout=opa&opb;3’bz10:dout=a|b;3’b100:dout=a^b;endcaseendmodule第49页/共133页2023/5/150Z为无关紧要条件,可用“?”代替
Z可出现在条件表达式或选择表达式的任意位第50页/共133页2023/5/151Casex综合Modulecasexstate(opa,opb,ir,dout);Parametermask=3‘bx11;inputopa,opb;input[2:0]ir;outputdout;regdout;Always@(opaoropborir)Casex(ir)3’bxx1:dout=opa&opb;3’bx10:dout=a|b;3’b100:dout=a^b;endcaseendmodule第51页/共133页2023/5/152并行case语句moduleprioritycase(key,decoder);input[3:0]key;output[1:0]decoder;reg[1:0]decoder;always@(key)casex(key)//等价的if语句如下4’bxxx1:decoder=0;//if(key[0])decoder=0;4’bxx1x:decoder=1;//elseif(key[1])decoder=1;4’bx1xx:decoder=2;//elseif(key[2])decoder=2;4’b1xxx:decoder=3;//elseif(key[3])decoder=3;endcaseendmodule综合出优先级译码器第52页/共133页2023/5/153第53页/共133页2023/5/154使用并行综合指令moduleparallelcase(key,decoder);input[3:0]key;output[1:0]decoder;reg[1:0]decoder;always@(key)casex(key)//synthesisparallel_case4’bxxx1:decoder=0;4’bxx1x:decoder=1;4’bx1xx:decoder=2;4’b1xxx:decoder=3;endcaseendmodule第54页/共133页2023/5/155条件表达式使用常量的case语句moduleconstantcase(key,decoder);input[3:0]key;output[1:0]decoder;reg[1:0]decoder;always@(key)case(1)key[0]:decoder=0;key[1]:decoder=1;key[2]:decoder=2;key[3]:decoder=3;endcaseendmodule:条件表达式用常量,综合工具不确认到底有多少分支,只能当不完备的case语句处理,综合出锁存器第55页/共133页2023/5/156第56页/共133页2023/5/157modulefullconstantcase(key,decoder);input[3:0]key;output[1:0]decoder;reg[1:0]decoder;always@(key)case(1)//synthesisfull_casekey[0]:decoder=0;key[1]:decoder=1;key[2]:decoder=2;key[3]:decoder=3;endcaseendmodule第57页/共133页2023/5/158第58页/共133页2023/5/159综合出锁存器的情况有意识和无意识无意识:
case和if语句对变量赋值不完整条件操作符?:以反馈的形式实现Always内部定义的局部变量,如果也是不完全赋值(if或case)一样会综合出锁存器,如果在同一个条件分支,先赋值马上引用则不会全局变量,如果先应用再赋值,就会综合出锁存器第59页/共133页2023/5/160条件操作符moduleconditionallatch(din,latch,dout);inputlatch,din;outputdout;assigndout=(latch)?Din:dout;endmodule第60页/共133页2023/5/161局部变量综合出锁存器modulelocalvariablelatch(din,latch,dout);inputlatch;input[3:0]din;output[3:0]dout;reg[3:0]dout;always@(latchordin)beginreg[3:0]temp;if(latch)temp=din;dout=temp;endendmodule第61页/共133页2023/5/162第62页/共133页2023/5/163同一条件分支modulelocaltempvariable(din,latch,dout);inputlatch;inputdin;outputdout;regdout;always@(latchordin)begin:l1;regtemp;if(latch)begintemp=din;dout=temp;endendendmodule第63页/共133页2023/5/164全局变量先引用情况moduleusebeforeassign(din,latch,dout);inputlatch;inputdin;outputdout;regdout;regtemp;always@(latchordinortemp);if(latch)begindout=temp;temp=din;endendmodule第64页/共133页2023/5/165第65页/共133页2023/5/166循环语句的综合迭代次数在仿真前由编译器确定,也就是循环次数为常数,叫做静态循环,反之叫非静态循环不是每个综合工具都支持while,for,repeat,forever循环,for一般都能支持第66页/共133页2023/5/167For实现静态循环’definedata_width4Modulestaticloop(A,B,C);input[’data_width-1:0]A,B;output[’data_width-1:0]C;reg[’data_width-1:0]C;always@(AorB)begin:lableintegerk;for(k=0;k<’data_width;k=k+1)C[k]=A[k]^B[k];endendmodule第67页/共133页2023/5/168第68页/共133页2023/5/169综合出触发器moduleflipflop(clk,a,b);inputclk;inputa;outputb;
regb,temp;always@(posedgeclk)begin:blocktemp=a;b=temp;endendmodule第69页/共133页2023/5/170反向时钟的使用moduleinvertedclock(clk,a,b,c,d);inputclk;inputa,b;outputc,d;regc,d;always@(posedgeclk)c=a&b;always@(negedgeclk)d=a|b;endmodule第70页/共133页2023/5/171第71页/共133页2023/5/172注意一个周期同时使用上下降沿,相当于时钟倍频,时序约束要求变紧在FPGA中PLL或DLL都能很好保证某个时钟沿指标,而另一个沿要求不一定严格如果使用反向时钟,最好不要使用反向器生成,时钟的延时和倾斜加大如果是使用FPGA,直接可以生成反向时钟第72页/共133页2023/5/173第73页/共133页2023/5/174异步复位和置位在always语句中异步描述的语句必须和敏感表中的事件沿一致在在always语句中异步描述的语句最后必须要有一个else,该语句为隐含时钟操作第74页/共133页2023/5/175异步复位、置位计数器moduleasynccounter(clk,preset,reset,predata,counter);inputclk,preset,reset;input[1:0]predata;output[1:0]counter;reg[1:0]counter;always@(posedgepresetorposedgeresetorposedgeclk)if(preset)//异步置数counter<=predata;elseif(reset)//异步复位counter<=0;else//隐含时钟counter<=counter+1;//同步计数endmodule第75页/共133页2023/5/176第76页/共133页2023/5/177异步置数,非0叫置位,0叫复位moduleasnycset(clk;preset,din,dout);inputclk,preset;input[2:0]din;output[2:0]dout;reg[2:0]dout;always@(posedgepresetorposedgeclk)if(preset)dout<=5;elsedout<=din;endmodule第77页/共133页2023/5/178第78页/共133页2023/5/179同步置位和复位modulesyncset(clk;preset,reset,din,dout);inputclk,preset,reset;input[2:0]din;output[2:0]dout;reg[2:0]dout;always@(posedgeclk)if(reset)dout<=3’h0;elseif(preset)dout<=3’h5;elsedout<=din;endmodule同步置位第79页/共133页2023/5/180第80页/共133页2023/5/181函数的综合:例奇偶校验modulefunctionapp(datain,odd_even);input[3:0]datain;outputodd_even;functionparity;input[3:0]din;integerI;beginparity=0;for(i=0;i<4;i=i+1)if(din[i])parity=parity+1;endendfunctionassignodd_even=parityb(datain);endmodule在verilog语言中,函数代表的是纯组合逻辑电路第81页/共133页2023/5/182第82页/共133页2023/5/183任务的综合:moduletaskapp(a,b,clk,dataout);inputclk;input[3:0]a,b;output[3:0]dataout;taskbitxor;input[3:0]din1,din2;output[3:0]dout;integerI;beginfor(i=0,i<=3,i=i+1)dout[i]=din1[i]^din2[i];endendtaskreg[3:0]dataout;always@(posedgeclk)bitxor(a,b,dataout);endmodule任务可以表示组合逻辑电路,也可以表示时序电路第83页/共133页2023/5/184第84页/共133页2023/5/185值x、z的综合moduleimpropervaluex(a,b,op,dataout);input[1:0]op;inputa,b;outputdataout;regdataout;always@(aorborop)case(op)2’b00:dataout=a|b;2’b01:dataout=a&b;2’bxx:dataout=a+b;default:dataout=0;endcaseendmodule第85页/共133页2023/5/186第86页/共133页2023/5/187说明:2’bxx分支被省掉X被认为无关紧要,综合工具根据优化原则选“0”或者“1”一般综合工具会报警第87页/共133页2023/5/188Z值的综合用来对三态门建模必须在条件赋值语句中赋值(if,casez,casex)与x一样,在case语句(不是casez或casex))选项表达式中使用Z值,该分支不会被执行第88页/共133页2023/5/189三态门的综合moduletristate(a,b,oe,dataout);inputoe;input[1:0]a,b;output[1:0]dataout;assigndataout=(oe)?a+b:2’bzzendmodule第89页/共133页2023/5/190第90页/共133页2023/5/191同步电路中的三态moduletristateflipflop1(a,b,clk,oe,dataout);inputclk,oe;inputa,b;outputdataout;regdataout;always@(posedgeclk)if(oe)dataout=a^b;elsedataout=1’bzz;endmodule第91页/共133页2023/5/192第92页/共133页2023/5/193异步三态门moduletristateflipflop2(a,b,clk,oe,dataout);inputclk,oe;inputa,b;outputdataout;regdataout,temp;always@(posedgeclk)temp=a^b;always@(oeortemp)if(oe)dataout=temp;elsedataout=1’bz;endmodule第93页/共133页2023/5/194第94页/共133页2023/5/195代码优化一、模块划分合理的模块划分能够很大的提高综合的结果,减少综合编译的时间,简化约束的设置。代码大小适中,使综合和编译效率提高;模块的复用性(模块接口的标准化、内部参数化);功能上相关的组合逻辑电路尽可能放入同一个模块,便于时序优化;采用寄存器方式输出,便于时延估计,子模块更容易综合出更好的结果。第95页/共133页2023/5/196模块划分优化第96页/共133页2023/5/197针对较大时延的信号设计if和case语句多if设计:二选一多路选择器构成的链状结构,较大时延的信号应该放在最后一个。见例程mult_if_improved.v第97页/共133页2023/5/198单if语句:见single_if.v,single_if_improved.v第98页/共133页2023/5/199If语句嵌套case:见case_in_if.v,case_in_if_improved.v第99页/共133页2023/5/1100第100页/共133页2023/5/1101Case中嵌套if语句:见if_in_case.v,if_in_case_improved.v第101页/共133页2023/5/1102数据路径复制关键路径复制,提高效率第102页/共133页2023/5/1103包含运算符的条件判断第103页/共133页2023/5/1104第104页/共133页2023/5/1105共享资源运算符如果出现在ifelse的判断语句中,并且参与运算的信号不互相冲突,就可以实现运算符逻辑资源的共享,而使用关键字虽然可以实现同样的功能,但不能实现资源共享第105页/共133页2023/5/1106减少级数f=a+b+c+df=(a+b)+(c+d)第106页/共133页2023/5/1107Verilog语言的可综合描述设计者使用的verilog编码风格会影响逻辑的可综合性和最终产生的门级网表。根据描述风格的不同,逻辑综合可能产生高效率或者低效率的门级网表第107页/共133页2023/5/1108一、通用的编码技巧1.条件表达式最好使用1bit的值2.不要给信号赋予x值3.函数中要避免锁存器的综合函数只能综合成组合逻辑4.匹配操作数的大小Wire[63:0]bus_signal;Bus_signal=1;5.在复杂表达式中使用括号第108页/共133页2023/5/1109二、面向综合的编程风格1.使用完整的always敏感事件列表综合工具根据always引用的信号生产硬件,不完整的敏感表造成功能仿真和最后的电路功能不一致2.每个always语句只能有一个时钟3.不能使用wait语句和#delay语句4.完备的条件表达式第109页/共133页2023/5/11105.避免锁存器的综合6.避免组合逻辑环路产生原因:在代码中,算术表达式左边变量同时出现在右边直接反馈寄存器的输出给同一个寄存器的异步清零输入第110页/共133页2023/5/1111第111页/共133页2023/5/1112这种情况存在的高风险:该电路的功能完全依赖门延时和布线延时,一旦延时有变,逻辑功能会发生混乱组合逻辑电路的时序分析是无穷循环,EDA工具处理方法不同,结果也不同解决办法:必须保证任何反馈环路包含寄存器检查综合报告,一旦发现组合环路应进行修改第112页/共133页2023/5/11137.不要在循环中使用disable语句8.不要使用initial语句9.阻塞与非阻塞赋值第113页/共133页2023/5/1114当为时序逻辑建模,使用“非阻塞赋值”。当用always块为组合逻辑建模,使用“阻塞赋值”当在同一个always块里面既为组合逻辑又为时序逻辑建模,使用“非阻塞赋值”。不要在同一个always块里面混合使用“阻塞赋值”和“非阻塞赋值”。不要在两个或两个以上always块里面对同一个变量进行赋值。第114页/共133页2023/5/111510.内部wire的定义:可隐式,可显式,最好显式表示11.模块例化采用显式方式,增加代码的可读性和减少错误12.不使用casex语句,只用case和casez,casex把z,x都看成无关值,造成综合前后仿真结果不一致第115页/共133页2023/5/111613.在veriog语法中,if...elseif...else语句是有优先级的,一般说来第一个if的优先级最高,最后一个else的优先级最低。而case语句是“平行”的结构,所有的case的条件和执行都没有“优先级”。而建立优先级结构会消耗大量的组合逻辑,所以如果能够使用case语句的地方,尽量使用case替换if...else结构。14、复位使初始状态可预测,信号的初始化要用复位来实现,不要使用默认值。第116页/共133页2023/5/111715.不要用时钟或复位信号作数据或使能信号,也不能用数据信号作为时钟或复位信号,否则HDL综合时会出现时序验证问题。16.不要混合使用时钟的上升沿和下降沿17.不要使用门时钟(don‘tusegatedclock)。时钟信号必须连接到全局时钟管脚上第117页/共133页2023/5/111818.只使用同步设计,不要使用延时单元。遵循以上原则,一般编写出的RTL代码都是可综合的,要注意不同的综合软件可能对代码的要求有所不同。第118页/共133页2023/5/1119完整实例及工具软件的使用一、Synplifypro的使用1.InvokeSynplify
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 粉扑收纳架市场发展前景分析及供需格局研究预测报告
- 口琴产业链招商引资的调研报告
- 天然气输送结构的建造行业相关项目经营管理报告
- 剪贴集产品供应链分析
- 大学或学院教育行业市场调研分析报告
- 宝石分级行业营销策略方案
- 厕所除臭剂产品供应链分析
- 石油专用泥浆泵项目运营指导方案
- 缝纫用剪刀项目运营指导方案
- 电动轨道照明设备项目运营指导方案
- 单位消防安全评估
- 医生职业素养的提升与培训
- 作业设计案例研讨活动方案
- 员工拒绝购买社保的全文协议
- 电气自动化职业生涯规划报告书
- GB/T 43476-2023水生态健康评价技术指南
- 地形地貌对分布式光伏效率影响分析
- 团员干部培训课件
- 寺院义工培训课件
- 小学健康体育知识讲座
- 财务用发票分割单原始凭证 发票分割单范本
评论
0/150
提交评论