北大数字集成电路课件1011verilog行为级建模

上传人:gp****x 文档编号:243042049 上传时间:2024-09-14 格式:PPT 页数:54 大小:235KB
返回 下载 相关 举报
北大数字集成电路课件1011verilog行为级建模_第1页
第1页 / 共54页
北大数字集成电路课件1011verilog行为级建模_第2页
第2页 / 共54页
北大数字集成电路课件1011verilog行为级建模_第3页
第3页 / 共54页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,数字集成电路设计入门,-从HDL到版图,北大微电子学系,1,第10章,Verilog操作符,学习内容:,熟悉Verilog语言的操作符,2,操作符类型,下表以优先级顺序列出了Verilog操作符。注意“与”操作符的优先级总是比相同类型的“或”操作符高。本章将对每个操作符用一个例子作出解释。,操作符类型,符号,连接及复制操作符,一元操作符,算术操作符,逻辑移位操作符,关系操作符,相等操作符,按位操作符,逻辑操作符,条件操作符, ,! ,& | ,* / %,+ -, = =,= = = = = != != =,&, ,|,&,|,?:,最高,最低,优先级,3,Verilog中的大小(size)与符号,Verilog根据表达式中变量的长度对表达式的值自动地进行调整。,Verilog自动截断或扩展赋值语句中右边的值以适应左边变量的长度。,当一个负数赋值给无符号变量如reg时,Verilog自动完成二进制补码计算,module sign_size;,reg 3:0 a, b;,reg 15:0 c;,initial begin,a = -1; / a是无符号数,因此其值为1111,b = 8; c= 8; / b = c = 1000,#10 b = b + a; / 结果10111截断, b = 0111,#10 c = c + a; / c = 10111,end,endmodule,4,算术操作符,module arithops ();,parameter five = 5;,integer ans, int;,reg 3: 0 rega, regb;,reg 3: 0 num;,initial begin,rega = 3;,regb = 4b1010;,int = -3; /int = 11111111_1101,end,initial fork,#10 ans = five * int; / ans = -15,#20 ans = (int + 5)/ 2; / ans = 1,#30 ans = five/ int; / ans = -1,#40 num = rega + regb; / num = 1101,#50 num = rega + 1; / num = 0100,#60 num = int; / num = 1101,#70 num = regb % rega; / num = 1,#80 $finish;,join,endmodule,+加,-减,*乘,/除,%模,将负数赋值给,reg,或其它无符号变量使用,2,的补码算术。,如果操作数的某一位是,x,或,z,,则结果为,x,在整数除法中,余数舍弃,模运算中使用第一个操作数的符号,注意integer和reg类型在算术运算时的差别。integer是有符号数,而reg是无符号数。,5,按位操作符,module bitwise ();,reg 3: 0 rega, regb, regc;,reg 3: 0 num;,initial begin,rega = 4b1001;,regb = 4b1010;,regc = 4b11x0;,end,initial fork,#10 num = rega / num = 0000,#20 num = rega / num = 1000,#30 num = rega | regb; / num = 1011,#40 num = regb / num = 10x0,#50 num = regb | regc; / num = 1110,#60 $finish;,join,endmodule,not,&and,|or,xor, xnor, xnor,按位操作符对矢量中相对应位运算。,regb,= 4b1 0 1 0,regc,= 4b1 x 1 0,num =,regb,&,regc,= 1 0 1 0 ;,位值为,x,时不一定产生,x,结果。如,#50,时的,or,计算。,当两个操作数位数不同时,位数少的操作数零扩展到相同位数。,a = 4b1011;,b = 8b01010011;,c = a | b; / a零扩展为 8b00001011,6,逻辑操作符,module logical ();,parameter five = 5;,reg ans;,reg 3: 0 rega, regb, regc;,initial,begin,rega = 4b0011; /逻辑值为“,1,”,regb = 4b10xz; /逻辑值为“,1,”,regc = 4b0z0x; /逻辑值为“,x,”,end,initial fork,#10 ans = rega / ans = 0,#20 ans = rega | 0; / ans = 1,#30 ans = rega / ans = 1,#40 ans = regb / ans = 1,#50 ans = regc | 0; / ans = x,#60 $finish;,join,endmodule,!not,&and,|or,逻辑操作符的结果为一位,1,,,0,或,x,。,逻辑操作符只对逻辑值运算。,如操作数为全,0,,则其逻辑值为,false,如操作数有一位为,1,,则其逻辑值为,true,若操作数,只,包含,0,、,x,、,z,,则逻辑值为,x,逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。,7,逻辑反与位反的对比,module negation();,reg 3: 0 rega, regb;,reg 3: 0 bit;,reg log;,initial begin,rega = 4b1011;,regb = 4b0000;,end,initial fork,#10 bit = rega; / num = 0100,#20 bit = regb; / num = 1111,#30 log = !rega; / num = 0,#40 log = !regb; / num = 1,#50 $finish;,join,endmodule,! logical not,逻辑反, bit-wise not,位反,逻辑反的结果为一位,1,,,0,或,x,。,位反的结果与操作数的位数相同,逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。,8,一元归约操作符,module reduction();,reg val;,reg 3: 0 rega, regb;,initial begin,rega = 4b0100;,regb = 4b1111;,end,initial fork,#10 val =,&,rega ; / val = 0,#20 val =,|,rega ; / val = 1,#30 val =,&,regb ; / val = 1,#40 val =,|,regb ; / val = 1,#50 val =,rega ; / val = 1,#60 val =,regb ; / val = 0,#70 val =,|,rega; / (nor) val = 0,#80 val =,&,rega; / (nand) val = 1,#90 val =,rega / val = 1,$finish;,join,endmodule,&and,|or,xor, xnor, xnor,归约操作符的操作数只有一个。,对操作数的所有位进行位操作。,结果只有一位,可以是,0, 1, X,。,9,移位操作符,module shift ();,reg 9: 0 num, num1;,reg 7: 0 rega, regb;,initial rega = 8b00001100;,initial fork,#10 num = rega 5 ; / num = 01_1000_0000,#10 regb = rega 3; / num = 00_0000_0001,#20 regb 3 ; / regb = 0000_0001,#30 num = 10b11_1111_0000;,#40 rega = num 2; /rega = 1100_0000,#40 num1 = num 2; /rega = 1111_1100,#50 num1 2;/num1=00_1111_1100,#60 $finish;,join,endmodule,逻辑右移,逻辑左移,移位操作符对其左边的操作数进行向左或向右的位移位操作。,第二个操作数(移位位数)是无符号数,若第二个操作数是,x,或,z,则结果为,x,在赋值语句中,如果右边(RHS)的结果:,位宽大于左边,则把最高位截去,位宽小于左边,则零扩展, 将左边的操作数右移右边操作数指定的位数,左移先补后移,右移先移后补,建议:表达式左右位数一致,10,关系操作符,module relationals ();,reg 3: 0 rega, regb, regc;,reg val;,initial begin,rega = 4b0011;,regb = 4b1010;,regc = 4b0x10;,end,initial fork,#10 val = regc rega ; / val = x,#20 val = regb = rega ; / val = 1,#40 val = regb regc ; / val = 1,#50 $finish;,join,endmodule,大于,=,大于等于,regc,rega和regc的关系取决于x,11,相等操作符,赋值操作符,将等式右边表达式的值拷贝到左边。,注意逻辑等与,case等的差别,=,逻辑等,= =,= =,0,1,x,z,0,1,0,x,x,1,0,1,x,x,x,x,x,x,x,z,x,x,x,x,case等,= = =,= =,0,1,x,z,0,1,0,0,0,1,0,1,0,0,x,0,0,1,0,z,0,0,0,1,2b1x=2b0x,值为0,因为不相等,2b1x=2b1x,值为x,因为可能不相等,也可能相等,2b1x=2b0x,值为0,因为不相同,2b1x=2b1x,值为1,因为相同,a = 2b1x;,b = 2b1x;,if (a = b),$display( a is equal to b);,else,$display( a is not equal to b);,a = 2b1x;,b = 2b1x;,if (a = b),$display( a is identical to b);,else,$display( a is not identical to b);,Case等只能用于行为描述,不能用于RTL描述。,12,相等操作符,逻辑等,逻辑不等,=,!,=,module equalities1();,reg 3: 0 rega, regb, regc;,reg val;,initial begin,rega = 4b0011;,regb = 4b1010;,regc = 4b1x10;,end,initial fork,#10 val = rega = regb ; / val = 0,#20 val = rega != regc; / val = 1,#30 val = regb != regc; / val = x,#40 val = regc = regc; / val = x,#50 $finish;,join,endmodule,其结果是,1b1,、,1b0,或,1bx,。,如果左边及右边为确定值并且相等,则结果为,1,。,如果左边及右边为确定值并且不相等,则结果为,0,。,如果左边及右边有值不能确定的位,但值确定的位相等,则结果为,x,。,!=,的结果与,= =,相反,值确定是指所有的位为0或1。不确定值是有值为x或z的位。,13,相等操作符,相同(case等),不相同(case不等),=,!,=,module equalities2();,reg 3: 0 rega, regb, regc;,reg val;,initial begin,rega = 4b0011;,regb = 4b1010;,regc = 4b1x10;,end,initial fork,#10 val = rega = regb ; / val = 0,#20 val = rega != regc; / val = 1,#30 val = regb = regc; / val = 0,#40 val = regc = regc; / val = 1,#50 $finish;,join,endmodule,其结果是,1b1,、,1b0,或,1bx,。,如果左边及右边的值相同(包括,x,、,z),,则结果为,1,。,如果左边及右边的值不相同,则结果为,0,。,!=,的结果与,=,相反,综合工具不支持,14,条件操作符,条件,?:,module likebufif( in, en, out);,input in;,input en;,output out;,assign out = (en = 1) ? in : bz;,endmodule,module like4to1( a, b, c, d, sel, out);,input a, b, c, d;,input 1: 0 sel;,output out;,assign out = sel = 2b00 ? a :,sel = 2b01 ? b :,sel = 2b10 ? c : d;,endmodule,如果条件值为x或z,则结果可能为x或z,15,条件操作符,条件操作符的语法为:, = ? :,registger = condition ? true_value:false_value;,其意思是:if condition is TRUE, then LHS=true_expression, else LHS = false_expression,每个条件操作符必须有三个参数,缺少任何一个都会产生错误。,最后一个操作数作为缺省值。,上式中,若condition为真则register等于true_value;若condition为假则register等于false_value。一个很有意思的地方是,如果条件值不确定,且true_value和false_value不相等,则输出不确定值。,例如:assign out = (sel = 0) ? a : b;,若sel为0则out =a;若sel为1则out = b。如果sel为x或z,若a = b =0,则out = 0;若ab,则out值不确定。,16,级联操作符,级联, ,可以从不同的矢量中选择位并用它们组成一个新的矢量。,用于位的重组和矢量构造,module concatenation;,reg 7: 0 rega, regb, regc, regd;,reg 7: 0 new;,initial begin,rega = 8b0000_0011;,regb = 8b0000_0100;,regc = 8b0001_1000;,regd = 8b1110_0000;,end,initial fork,#10 new = regc 4: 3, regd 7: 5,regb 2, rega 1: 0;,/ new =,8b11111111,#20 $finish;,join,endmodule,在级联和复制时,必须指定位数,否则将产生错误。,下面是类似错误的例子:,a7:0 = 4 b10;,b7:0 = 2 5;,c3:0 = 3b011, b0;,级联时不限定操作数的数目。在操作符符号 中,用逗号将操作数分开。例如:,A, B, C, D,17,复制,复制, ,复制一个变量或在 中的值,module replicate ();,reg 3: 0 rega;,reg 1: 0 regb, regc;,reg 7: 0 bus;,initial begin,rega = 4b1001;,regb = 2b11;,regc = 2b00;,end,initial fork,#10 bus = 4 regb; / bus = 11111111,/ regb is replicated 4 times.,#20 bus = 2 regb, 2 regc ;,/ bus = 11110000. regc and regb are each,/ replicated, and the resulting vectors,/ are concatenated together,#30 bus b),-,add,; / * trigger event *,else,-,mult,; / * trigger event *,/ * respond to an event trigger *,always (,add,),out = a + b;,/ * respond to an event trigger *,always (,mult,),out = a * b;,endmodule,在例子中,事件add和mult不是端口,但定义为事件,它们没有对应的硬件实现。,是一种数据类型,能在过程块中触发一个使能。,在引用前必须声明,没有持续时间,也不具有任何值,只能在过程块中触发一个事件。,-,操作符用来触发命名事件。,a,大于,b,,事件,add,被触发,控制传递到等待,add,的,always,块。,如果,a,小于或等于,b,,事件,mult,被触发,控制被传送到等待,mult,的,always,块。,28,行为描述举例,在上面的例子中发生下面顺序的事件:,等待,set=1,,忽略时刻,10,的,clk,的,posedge,。,等待下一个,clk,的,posedge,,它将在时刻,30,发生。,等待,3,个时间单位,在时刻,33,(,30+3,)置,q=1,。,等待,10,个时间单位,在时刻,43,(,33+10,)置,q=0,。,等待在时刻,48,发生的,set=0,。,等待在时刻,70,发生且与,clk,的上升沿同时发生的,set=1,。,等待下一个上升沿。时刻,70,的边沿被忽略,因为到达该语句时时间已经过去了,如例子所示,,clk,=1,。,重要内容,:在实际硬件设计中,事件,6,应该被视为一个竞争(,race condition,)。在仿真过程中,值的确定倚赖于顺序,所以是不可预测的。这是不推荐的建模类型。,always wait (set),begin,( posedge clk) #3 q = 1;,#10 q = 0;,wait (! set);,end,竞争,29,RTL描述举例,module dff (q, qb, d, clk);,output q, qb;,input d, clk;,reg q, qb;,always ( posedge clk),begin,q = d;,qb = d;,end,endmodule,下面的RTL例子中只使用单个边沿敏感时序控制。,30,块语句,块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句。,块语句分为两类:,顺序块:语句置于关键字begin和end之间,块中的语句以顺序方式执行。,并行块:关键字fork和join之间的是并行块语句,块中的语句并行执行。,Fork,和,join,语句常用于,test bench,描述。这是因为可以一起给出矢量及其绝对时间,而不必描述所有先前事件的时间。,31,块语句(续),在顺序块中,语句一条接一条地计算执行。,在并行块中,所有语句在各自的延迟之后立即计算执行。,begin,#5 a = 3;,#5 a = 5;,#5 a = 4;,end,fork,#5 a = 3;,#15 a = 4;,#10 a = 5;,join,上面的两个例子在功能上是等价的。Fork-join例子里的赋值故意打乱顺序是为了强调顺序是没有关系的。,注意fork-join块是典型的不可综合语句,并且在一些仿真器时效率较差。,32,延迟赋值语句,begin,temp= b;,(posedge clk) a = temp;,end,a = ( posedge clk) b;,语法:,LHS = RHS;,时序控制延迟的是赋值而不是右边表达式的计算。,在延迟赋值语句中RHS表达式的值都有一个隐含的临时存储。,可以用来简单精确地模拟寄存器交换和移位。,等价语句,LHS: Left-hand-side,RHS: Right-hand-side,33,延迟赋值语句,begin,a = #5 b;,b = #5 a;,#10 $diplay(a, b);,end,fork,a = #5 b;,b = #5 a;,#10 $diplay(a, b);,join,在左边的例子中,b的值被立即采样(时刻0),这个值在时刻5赋给a。a的值在时刻5被采样,这个值在时刻10赋给b。,注意,另一个过程块可能在时刻0到时刻5之间影响b的值,或在时刻5到时刻10之间影响a的值。,在右边的例子中,b和a的值被立即采样(时刻0),保存的值在时刻5被赋值给他们各自的目标。这是一个安全传输。,注意,另一个过程块可以在时刻0到时刻5之间影响a和b的值。,并行语句在同一时间步发生,但由仿真器在另外一个时间执行。,在下面的每个例子中,a和b的值什么时候被采样?,在下面的每个例子中,什么时候给a和b赋值?,b值拷贝到a然后回传,a和b值安全交换,34,非阻塞过程赋值,module s;,reg a, b, clk;,initial begin,a = 0; b = 1; clk = 0;,end,always #5 clk = clk;,always ( posedge clk),begin,a,=,b; / 非阻塞过程赋值,b,=,a; / 交换a和b值,end,endmodule,阻塞过程赋值执行完成后再执行在顺序块内下一条语句。,非阻塞赋值不阻塞过程流,仿真器读入一条赋值语句并对它进行调度之后,就可以处理下一条赋值语句。,若过程块中的所有赋值都是非阻塞的,赋值按两步进行:,仿真器计算所有,RHS,表达式的值,保存结果,并进行调度在时序控制指定时间的赋值。,在经过相应的延迟后,仿真器通过将保存的值赋给,LHS,表达式完成赋值。,阻塞过程赋值,非阻塞过程赋值,过程赋值有两类,35,非阻塞过程赋值(续),module non_block1;,reg a, b, c, d, e, f;,initial begin / blocking assignments,a = #10 1; / time 10,b = #2 0; / time 12,c = #4 1; / time 16,end,initial begin / non- blocking assignments,d = #10 1; / time 10,e = #2 0; / time 2,f = #4 1; / time 4,end,initial begin,$monitor($ time, a= %b b= %b c= %b d= %b e= %b f= %b, a, b, c, d, e, f);,#100 $finish;,end,endmodule,输出结果:,0 a= x b= x c= x d= x e= x f = x,2 a= x b= x c= x d= x,e= 0,f = x,4 a= x b= x c= x d= x e= 0,f = 1,10,a= 1,b= x c= x d= 1 e= 0 f = 1,12 a= 1,b= 0,c= x d= 1 e= 0 f = 1,16 a= 1 b= 0 c= 1 d= 1 e= 0 f = 1,阻塞与非阻塞赋值语句行为差别举例1,36,非阻塞过程赋值(续),阻塞与非阻塞赋值语句行为差别举例2,module pipeMult(product, mPlier, mCand, go, clock);,input go, clock;,input 7:0 mPlier, mCand;,output 15:0 product;,reg 15:0 product;,always (posedge go),product = repeat (4) (posedge clock) mPlier * mCand;,endmodule,module pipeMult(product, mPlier, mCand, go, clock);,input go, clock;,input 7:0 mPlier, mCand;,output 15:0 product;,reg 15:0 product;,always (posedge go),product = repeat (4) (posedge clock) mPlier * mCand;,endmodule,37,非阻塞过程赋值(续),阻塞与非阻塞赋值语句行为差别举例2波形,非阻塞,阻塞,38,非阻塞过程赋值(续),阻塞与非阻塞赋值语句行为差别举例3,module fsm(cS1, cS0, in, clock);,input in , clock;,output cS1, cS0;,reg cS1, cS0;,always (posedge clock) begin,cS1 = in /同步复位,cS0 = in | cS1;,/cS0 = in,end,endmodule,module fsm(cS1, cS0, in, clock);,input in , clock;,output cS1, cS0;,reg cS1, cS0;,always (posedge clock) begin,cS1 = in /同步复位,cS0 = in | cS1; /同步置位,end,endmodule,DFF,同步复位DFF,同步置位DFF,39,非阻塞过程赋值(续),举例4:非阻塞赋值语句中延时在左边和右边的差别,module exchange;,reg3:0 a, b;,initial begin,a=1; b=4;,#2 a=3; b=2;,#20 $finish;,end,initial,$monitor($time, t%ht%h, a, b);,initial begin,#5 a = b;,#5 b = a;,end,endmodule,module exchange;,reg3:0 a, b;,initial begin,a=1; b=4;,#2 a=3; b=2;,#20 $finish;,end,initial,$monitor($time, t%ht%h, a, b);,initial begin,a = #5 b;,b 0) / 开始外层 if,if,(rega regb) / 开始内层第一层 if,result = rega;,else,result = 0; / 结束内层第一层 if,else,if,(index = 0),begin,$display( Note : Index is zero);,result = regb;,end,else,$display( Note : Index is negative);,if,和,if-else,语句:,描述方式:,if (表达式),begin,end,else,begin,end,41,条件语句(case分支语句),module compute (result, rega, regb, opcode);,input 7: 0 rega, regb;,input 2: 0 opcode;,output 7: 0 result;,reg 7: 0 result;,always ( rega or regb or opcode),case (opcode),3b000 : result = rega + regb;,3b001 : result = rega - regb;,3b010 , / specify multiple cases witht he same result,3b100 : result = rega / regb;,default : begin,result = bx;,$display ( no match);,end,endcase,endmodule,case,语句:,在Verilog中重复说明case项是合法的,因为Verilog的case语句只执行第一个符合项。,42,条件语句-case语句,case语句是测试表达式与另外一系列表达式分支是否匹配的一个多路条件语句。,Case语句进行逐位比较以求完全匹配(包括x和z)。,Default语句可选,在没有任何条件成立时执行。此时如果未说明default,Verilog不执行任何动作。,多个default语句是非法的。,重要内容:,使用default语句是一个很好的编程习惯,特别是用于检测x和z。,Casez和casex为case语句的变体,允许比较无关(dont-care)值。,case,表达式或,case,项中的任何位为无关值时,在比较过程中该位不予考虑。,在,casez,语句中,,?,和,z,被当作无关值。,在,casex,语句中,,?,,,z,和,x,被当作无关值。,case , :赋值语句或空语句;, :赋值语句或空语句;,default:赋值语句或空语句;,case语法:,43,循环(looping)语句,有四种循环语句,:,repeat,:将一块语句循环执行确定次数。,repeat (次数表达式) ,while:在条件表达式为真时一直循环执行,while (条件表达式) ,forever:重复执行直到仿真结束,forever ,for:在执行过程中对变量进行计算和判断,在条件满足时执行,for(赋初值;条件表达式;计算) ,综合工具还不支持,44,循环(looping)语句-repeat,repeat,:将一块语句循环执行确定次数。,repeat (次数表达式) 语句,/ Parameterizable shift and add multiplier,module multiplier( result, op_a, op_b);,parameter size = 8;,input size:1 op_a, op_b;,output 2* size:1 result;,reg 2* size:1 shift_opa, result;,reg size:1 shift_opb;,always ( op_a or op_b) begin,result = 0;,shift_opa = op_a; / 零扩展至16位,shift_opb = op_b;,repeat (size) begin,#10 if (shift_opb1) result = result + shift_opa;,shift_opa = shift_opa 1; / Shift right,end,end,endmodule,为什么要说明一个shift_opb变量?,45,. . .,reg 7: 0 tempreg;,reg 3: 0 count;,. . .,count = 0;,while (tempreg) / 统计tempreg中 1 的个数,begin,if (tempreg 0) count = count + 1;,tempreg = tempreg 1; / Shift right,end,end,. . .,循环(looping)语句,while,:只要表达式为真(不为0),则重复执行一条语句(或语句块),46,.,reg clk;,initial,begin,clk = 0;,forever,begin,#10 clk = 1;,#10 clk = 0;,end,end,.,循环(looping)语句,forever,:一直执行到仿真结束,forever应该是过程块中最后一条语句。其后的语句将永远不会执行。,forever语句不可综合,通常用于test bench描述。,这种行为描述方式可以非常灵活的描述时钟,可以控制时钟的开始时间及周期占空比。仿真效率也高。,47,/ X检测,for (index = 0; index in2),out = 2b01;,else,out = 2b10;,initial,#10 $finish;,endmodule,49,持续赋值(continuous assignment),可以用持续赋值语句描述组合逻辑,代替用门及其连接描述方式。,持续赋值在,过程块外部使用,。,持续赋值用于net驱动。,持续赋值只能在等式左边有一个简单延时说明。,只限于在表达式左边用#delay形式,持续赋值可以是显式或隐含的。,语法:, #delay strength = ;,wire out;,assign out = a / 显式,wire inv = in; / 隐含,50,持续赋值(continuous assignment)(续),module assigns (o1, o2, eq, AND, OR, even, odd, one, SUM, COUT,a, b, in, sel, A, B, CIN);,output 7:0 o1, o2;,output 31:0 SUM;,output eq, AND, OR, even, odd, one, COUT;,input a, b, CIN;,input 1:0 sel;,input 7:0 in;,input 31:0 A, B;,wire 7:0 #3 o2; / 没有说明,但设置了延时,tri AND = a / 两个隐含赋值,wire #10 eq = (a = b); / 隐含赋值,并说明了延时,wire 7:0 (strong1, weak0) #( 3,5,2) o1 = in; / 强度及延时,assign o27:4 = in3:0, o23:0 = in7:4; / 部分选择,tri
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!