第6章VHDL描述语句第十二十三十四周_第1页
第6章VHDL描述语句第十二十三十四周_第2页
第6章VHDL描述语句第十二十三十四周_第3页
第6章VHDL描述语句第十二十三十四周_第4页
第6章VHDL描述语句第十二十三十四周_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

FPGA原理及应用电子信息工程学院主讲教师:陈斌第6章VHDL描述语句6.1VHDL描述语句概述6.2VHDL的顺序描述语句6.3VHDL的并行描述语句6.4元件现有的软件编程语言(如机器语言、汇编语言)和结构化语言(如C语言、面向对象语言)至形式化语言——本质上都是依据冯.诺依曼模型,由CPU以指令方式串行执行,语句都是逐行顺序执行的,称之为程序。VHDL代码(模拟硬件电路的实际执行方式),所有的逻辑门在任何时刻都处于执行状态,称之为代码。按执行顺序可分为两大类:并发(Concurrent)代码顺序(Sequential)代码

6.1VHDL描述语句VHDL描述语句指的是VHDL结构体内部的各种描述语句。6.1VHDL描述语句结构体的一般表达如下:ARCHITECTURE结构体名称OF实体名称IS[说明语句]BEGIN

(功能描述语句)ENDARCHITECTURE结构体名称;组合逻辑VS并发执行代码时序逻辑VS顺序执行代码6.1VHDL描述语句VHDL代码本质上是并发执行的。(硬件电路本质)并发代码又称“数据流代码”。为了实现某些功能兼具顺序执行特点的功能。如:时序逻辑功能的VHDL代码能够实现顺序执行;如:process/function/procedure语句或结构。6.1VHDL描述语句process/function/procedure内部的代码才是顺序执行的(往往在设计时序电路时),但这些语句或结构之间仍然是并发执行的。6.1VHDL描述语句例:一段包含3个并发描述语句的代码并发代码要点:

1、除卫氏块(guardedblock)外,仅使用并发描述语句无法实现同步时序电路(异步时序电路是可以的);2、通常只使用并发描述语句实现组合逻辑电路;顺序代码要点:1、要实现时序逻辑电路,必须使用顺序描述语句;2、顺序代码可同时实现组合逻辑电路与时序逻辑电路。数字电路的代码实现6.2顺序描述语句VHDL本质上是一种并发执行的代码,但是出于设计的需要,需要使用一些能够顺序执行的语句块,包括:PROCESS、FUNCTION、PROCEDURE。这些语句块之间仍然是并发执行的,但内部是顺序执行的,称为顺序代码,又称行为描述代码。几种常见的顺序描述语句:信号赋值语句、变量赋值语句、if语句、case语句、wait语句和null语句。使用顺序代码不但可以实现时序逻辑,还可以实现组合逻辑。

进程(process)内部的语句是一种顺序描述语句,其内部经常包括if,wait,case或loop语句。特点:

1、进程与进程,或其它并发语句之间的并发性;

2、进程内部的顺序性;

3、要么使用敏感信号列表(sensitivitylist),要么使用wait语句,二者不可同时使用。

4、进程必须包含在主代码段中,当敏感信号列表中的某个信号发生变化,或者wait语句的条件满足时,process内部的代码就顺序执行一次;1.进程(process)[标记:]process[(敏感信号表)]

[variablename:type[range][:=初始值]]begin{顺序描述语句}

endprocess[标记];语法结构:对临时连线的赋值,不可综合可选,增强代码可读性,命名规则:非关键字1.进程(process)敏感信号表:进程内要读取的所有敏感信号(包括端口)的列表。每一个敏感信号的变化,都将启动进程。

注意:若电路模块对某输入信号不“敏感”,则该输入信号不必放入敏感信号列表中;如同步时序电路中只对clk和rst这两个输入信号敏感,而对data,addr等输入信号不敏感,则敏感信号列表中只需放入clk和rst即可;1.进程(process)在纯组合逻辑电路中,电路模块对任意一个输入信号都是敏感的,所以如果要使用process来实现一段组合逻辑电路,则必须将所有的输入信号都放入敏感信号列表。在使用顺序代码实现一个同步时序电路时,必须对某些信号边沿的跳变进行监视(典型的是时钟信号clock的上升沿或下降沿);通常使用EVENT来监视一个信号是否发生了边沿跳变;通常在process中使用敏感信号clk来实现同步时序电路。注意:1.进程(process)例:带有异步复位端的D触发器data_inqrstclk功能描述:时序逻辑电路的基本单元当输入的时钟信号为上升沿时,输出信号q等于当前输入值;异步复位端rst(reset):rst=‘1’时q=‘0’;优先级高于当前输入值、时钟信号;实现代码----------------------------------------LIBRARYieee;USEieee.std_logic_1164.all;----------------------------------------entitydffisport(d,clk,rst:INstd_logic;q:OUTstd_logic);enddff;-----------------------------------------任意一个信号发生变化时,process中的所有语句就执行一次-----------------------------------------architecturebehaviorofdffisbeginprocess(clk,rst)begin

if(rst=‘1’)thenq<=0;else(clk’eventANDclk=‘1’)thenq<=d;endif;endprocess;endbehavior;-----------------------------------------16敏感信号表的特点:(1)同步进程的敏感信号表中只有时钟信号。

process(clk)beginif(clk’eventandclk=‘1’)then

ifreset=‘1’thendata<=“00”;else

data<=in_data;endif;endif;endprocess;1.进程(process)17(2)异步进程敏感信号表中除时钟信号外,还有其它信号。例:

process(clk,reset)begin

ifreset=‘1’thendata<=“00”;elsif(clk’eventandclk=‘1’)thendata<=in_data;endif;endprocess;1.进程(process)(3)如果有wait语句,则不允许有敏感信号表。

PROCESS(a,b)BEGIN--sequentialstatementsENDPROCESS;

PROCESSBEGIN

WAITON/Untilsignalx/signal_expr;//先

--sequentialstatements

//后

ENDPROCESS;1.进程(process)信号名<=表达式;说明:信号赋值采用“<=”符号。如:a<=b;信号量表达式中可以有延时,如q<=aafter2ns;信号赋值语句即可以作为并行语句出现在结构体中,也可以作为顺序语句出现在进程中。例如:signala:bit;signalb:std_logic_vector(3downto0);a<=‘1’after2ns;b<=“1100”2.信号赋值语句变量名:=表达式;说明:变量赋值采用“:=”符号。如:a:=b;变量表达式无延时;变量赋值语句只能作为顺序语句出现在进程中。例如:variablea:bit;variableb:std_logic_vector(3downto0);a:=‘1’;b:=“1100”;3.变量赋值语句(1)if语句的门闩控制举例ifa>b

theny<=‘1’endif;不完全语句产生时序电路。

3.if语句

只能用于顺序代码,只能在process、function和procedure中出现。没有else描述!综合后生成锁存器(latch)!

(2)if语句的二选择控制用条件来选择两条不同程序执行的路径。举例ifa>b

theny<=‘1’;elsey<=‘0’;endif;完全语句产生组合电路。(3)if语句的多选择控制举例ifa>b

theny<=‘1’;elsifa=b

then

y<=‘0’;elsey<=‘0’;endif;(4)if条件表达式1

thenif条件表达式1

then………………………………endif;endif;这是一种多重IF语句嵌套式条件句。即可产生组合也可产生时序电路。----------------------------------------ENTITYmux41aISPORT(a,b,c,d:INBIT;s1,s2:INBIT;y:OUTBIT);ENDENTITYmux41a;----------------------------------------------------------------------------------------------ARCHITECTUREoneOFmux41aISSIGANALS:BIT_vector(1downto0);BEGINs<=s1&s2;process(a,b,c,d,s)beginIF(s=“00”)THENy<=a;ELSIF(s=“01”)THENy<=b;ELSIF(s=“10”)THENy<=c;ELSEy<=d;ENDIF;ENDPROCESS;ENDARCHITECTUREone;-----------------------------------------例:用IF-THEN-ELSE语句描述4选1数据选择器case表达式iswhen选择值1=>顺序语句;when选择值2=>顺序语句;…………..

whenothers=>顺序语句;endcase;

4.case语句------------------------------------ENTITYmux41aISPORT(a,b,c,d:INBIT;s1,s2:INBIT;y:OUTBIT);ENDENTITYmux41a;--------------------------------------------------------------------------ARCHITECTUREoneOFmux41aISSIGANALS:BIT_vector(1downto0);BEGINs<=s1&s2;process(a,b,c,d,s)begincasesiswhen“00”=>y<=a;when“01”=>y<=b;when“10”=>y<=c;whenothers=>y<=d;endcase;endprocess

;ENDARCHITECTUREone;-------------------------------------------------例:用case语句描述4选1数据选择器进程中的case注意事项:

*Case只能在进程内使用;*Case选择值必须在选择表达式的合法取值范围内;*Case选择值必须是互斥;不能由两个相同的选择值出现;*Case选择值必须覆盖全面,否则需要用OTHERS来代替其他

可能取值;*Case各个选择值之间的关系是并列的,没有优先权之分;IF语句由优先权casesiswhen“00”=>y<=a;when“01”=>y<=b;when“10”=>y<=c;whenothers=>y<=d;endcase;用法与IF语句类似,且形式更加多样。如果在process内部使用了wait语句,则process就不能再使用敏感信号列表,并且wait语句是process内部的第一条语句。wait条件满足时,process内部代码就执行一次。常用的三种语法:

waiton单个或多个信号;--敏感信号量变化

waituntil单个信号条件;--条件满足(可综合)

waitfortime;--时间到(只能仿真,不可综合)

5.WAIT语句---------------------------------------------------------architecturecounterofcounterisbegin

process---没有敏感信号列表

variabletemp:integerrange0to10;begin

waituntil(clk’eventANDclk=‘1’);temp:=temp+1;if(temp=10)thentemp:=0;endif;digit<=temp;endprocess;endcounter;-------------------------------------------------------例:使用waituntil语句设计模10计数器----------------------------------------------LIBRARYieee;USEieee.std_logic_1164.all;--------------------------------------------entitycounterisport(clk:INstd_logic;digit:OUTintegerrange0to9);endcounter;----------------------------------------------第二条当一段代码需要多次重复、顺序地执行时,loop语句非常有效。只能在process、function和procedure中使用;与generate语句的最大不同:

generate语句复制建立某项操作的0个或多个备份,这些备份并行地执行某项操作,与先后顺序无关;loop语句则按顺序、循环地执行某项操作。

6.LOOP语句LOOP语句的语法结构:FOR/LOOP:循环固定次数[label:]FOR循环变量

IN范围

LOOP

(顺序描述语句)

ENDLOOP[label];WHILE/LOOP:循环执行直到某个条件不再满足[label:]WHILE条件表达式

LOOP

(顺序描述语句)

ENDLOOP[label];上/下界必须是静态值,有一个计数比较模块来加以控制EXIT:结束整个循环操作[label:]EXIT[label][WHEN条件表达式];NEXT:跳出本次循环操作[label:]NEXT[loop_label][WHEN条件表达式];例:FORiIN0TOdata’rangeLOOPcasedata(i)iswhen‘0’=>count:=count+1;

whenothers=>EXIT;endcase;ENDloop;6.3并行描述语句ARCHITECTURE结构体名称OF实体名称IS[说明语句]BEGIN

(并行语句)ENDARCHITECTURE结构体名称;常用的并发描述语句,通常位于process、function和procedure之外,包括:

运算操作符:逻辑运算、算术运算等WHEN语句(when/else或with/select/when)

块(block)语句

生成(GENERATE)语句。1.并行信号赋值语句并行信号赋值语句的特点:赋值目标必须为信号或端口;在结构体内是并行执行的;在结构体的进程之外使用(1)简单信号赋值语句

赋值目标=表达式ARCHITECTUREcurtOFbc1ISSIGNALs1,e,f,g,h:STD_LOGIC;BEGINoutput1<=aandb;output2<=c+d;g<=eorf;h<=exorf;s1<=g;ENDARCHITECTUREcurt;以下结构体中的五条信号赋值语句的执行是并行发生的并行语句(2)条件信号赋值语句(数字逻辑具有优先级)

条件信号赋值语句即为WHEN_ELSE条件信号赋值语句条件信号赋值语句的一般形式为:

目的信号量<=表达式1WHEN条件1ELSE

表达式2WHEN条件2ELSE………表达式n-1WHEN条件n-1ELSE

表达式n;应该注意,由于条件测试的顺序性,第一子句具有最高赋值优先级,第二句其次,第三句最后。

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41aISPORT(a,b,c,d:INBIT;s:INBIT

_vector(0TO1);y:OUTBIT);ENDENTITYmux41a;ARCHITECTUREoneOFmux41aISBEGIN

y<=aWHENs=“00”ELSEbWHENs=“01”ELSEcWHENs=“10”ELSEd;ENDARCHITECTUREone;例:4选1数据选择器的VHDL语言(1)

实体

结构体

------------------------------------------------库

-----------------程序包(3)选择信号赋值语句(数字逻辑不具有优先级)WITH选择表达式SELECT赋值目标信号<=表达式1WHEN选择值1,

表达式2

WHEN选择值2,

..........................

表达式nWHEN选择值n;应该注意,选择信号赋值语句对选择值的对比测试是同时发生的,不具有优先级;选择信号赋值语句的选择值不允许交叉重叠;也要避免出现选择值覆盖不全的现象。例:

4选1数据选择器的VHDL语言(3)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41aISPORT(a,b,c,d:INBIT;s:INBIT

_vector(0TO1);y:OUTBIT);ENDENTITYmux41a;ARCHITECTUREoneOFmux41aISBEGIN

WITHsSELECT

y<=aWHEN“00”,bWHEN“01”,cWHEN“10”,

UNAFFECTEDWHENOTHERS;ENDARCHITECTUREone;注意:必须考虑所有可能出现的条件(condition),需经常使用关键字OTHERS。若某些条件下不需要进行任何操作,需使用UNAFFECTED。WHENvalue的三种描述方式:

whenvalue---对单个值进行判断

whenvalue1

to

value2---对取值范围进行判断,

---多用于枚举类型;

whenvalue1|value2|...---对多个值进行判断2.生成语句(GENERATE)—可用于并发描述生成语句的作用:复制建立某项操作的0个或多个备份,这些备份并行地执行某项操作。并行结构,与先后顺序无关;而顺序描述语句中循环执行某项操作的LOOP语句则必须顺序的执行这些操作。

分为两类:

for┅generate:采用一个离散的范围决定

备份的数目。

If┅generate:有条件地生成0个或1个

备份。(1)for┅generate语句语法:range:整数表达式to

整数表达式

整数表达式downto

整数表达式

for---loop语句与for┅generate的比较:标号:for循环变量inrange

generate{并行语句}

endgenerate[标号];例:4位移位寄存器例:4位移位寄存器--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------元件的使用(实例化)元件的声明4位移位寄存器的等效描述:(2)If┅generate语句语法:

if语句与If┅generate的区别:

1、If┅generate没有类似于if语句的

else或

elsif分支语句。

2、if语句是顺序语句,If┅generate为并行语句。标号:if条件表达式generate{并行语句}endgenerate[标号];注意1:GENERATE中循环操作的上界和下界必须是静态的。如为非静态参数,则往往不可综合。例:

signalchoice:integerrange0to3;

NotOK:FORiIN0TOchoiceGENERATE(并发描述语句)ENDGENERATE;注意2:GENERATE语句使用过程中的多值驱动问题。正确的用法:

OK:FORiIN0TO7GENERATE

output(i)<=‘1’when(a(i)ANDb(i))=‘1’ELSE‘0’;ENDGENERATE;错误的用法:

NotOK:FORiIN0TO7GENERATE

accum<=“1111”when(a(i)=‘1’)else“0000”;ENDGENERATE;在顺序描述语句LOOP中则不存在多值驱动问题。

一个元件是一段结构完整的代码(包括库声明、实体和结构体这些基本的组成部分),可以以一个独立的.vhd文件存在。如果将这些代码声明为component,就可以被其它电路或主代码调用,从而使代码具有层次化的结构。

(函数和过程则只能存放在包集或主代码中,不能以独立的.vhd文件存在并被调用。)6.4元件(component)元件是一种进行代码分割、代码共享和代码重用的方法。例如,可以将常用的触发器、乘法器、加法器和基本门电路存放为多个.vhd文件,然后将这些代码声明为元件并存放到一个库中,从而可以供所有的设计者方便地调用。在使用(实例化)一个元件之前,必须先对该元件进行声明。元件的声明:component元件名

ISport(端口声明);endcomponent;6.4元件(component)可在以下部分声明元件:

结构体(Architecture)包集(Package)块(Block)被声明元件的来源:

VHDL设计实体;其它HDL设计实体;另外一种标准格式的文件,如EDIF或XNF;厂商提供的工艺库中的元件、IP核。6.4元件(component)元件的实例化(componentinstantiation)

定义:把低层元件安装(调用)到当前层次设计实体内部的过程。label:元件名称

portmap(端口列表);

端口列表将元件预定义的端口和实例化时的实际端口关联起来。6.4元件(component)例:以一个反相器为例,该反相器已经完成设计(文件inverter.vhd)并编译到了库work中。调用过程:----------元件声明-----------componentinverterisport(a:INstd_logic;b:outstd_logic);endcomponent;----------------元件实例化---------u1:inverterportmap(x,y);位置映射,端口的排列顺序必须一一对应6.4元件(component)元件声明的两种位置(或两种方法):a.在主代码段中声明b.在包集package中声明例:

在主代码中声明元件abcd设计步骤:1、编写几个基本组成模块(inverter/nand_2/nand_3)的.vhd文件;2、在主代码中将这几个基本组成模块声明为元件;3、在主代码中实例化这些元件。----------------文件inverter.vhd-------------libraryieee;useieee.std_logic_1164.all;entityinverterisport(a:instd_logic;b:outstd_logic);endinverter;architectureinverterofinverterisbeginb<=NOTa;endinverter;------------------------------------------------具体实现(1):三个待声明的.vhd文件----------------文件nand_2.vhd-------------libraryieee;useieee.std_logic_1164.all;entitynand_2isport(a,b:instd_logic;c:outstd_logic);endnand_2;architecturenand_2ofnand_2isbeginc<=NOT(aANDb);endnand_2;----------------------------------------------------------------文件nand_3.vhd-------------libraryieee;useieee.std_logic_1164.all;entitynand_3isport(a,b,c:instd_logic;d:outstd_logic);endnand_3;architecturenand_3ofnand_3isbegind<=NOT(aANDbANDc);endnand_3;------------------------------------------------注意:文件名、实体名必须一致!具体实现(2):主.vhd文件,将前三个文件的代码作为元件加以实例化,用以实现新的功能。----------------主文件project.vhd-------------libraryieee;useieee.std_logic_1164.all;entityprojectisport(a,b,c,d:instd_logic;x,y:outstd_logic);endproject;architecturestructuralofprojectis-------------元件在主代码中的声明-------componentinverterisport(a:instd_logic;b:outstd_logic);endcomponent;--对应文件inverter.vhd--------------------------------------------componentnand_2isport(a,b:instd_logic;c:outstd_logic);endcomponent;--对应文件nand_2.vhd

---------------------------------------------componentnand_3isport(a,b,c:instd_logic;d:outstd_logic);endcomponent;--对应文件nand_3.vhd------------------------------------------------注意:主文件名与其实体名必须一致,元件名称必须与元件所在文件的文件名及文件中的实体名一致!----------------------------signalw:std_logic;begin

u1:inverterportmap(b,w);

u2:nand_2portmap(a,b,x);

u3:nand_3portmap(w,c,d,y);endstructural;------------------------------------------------设计步骤:1、编写几个基本组成模块(inverter/nand_2/nand_3)的.vhd文件;2、创建一个包集文件,在该包集中将这几个基本组成模块声明为元件;3、在主代码中use该包集;4、在主代码中实例化这些元件。例:在包集中声明元件abcd虽多了一个包集文件,但可避免在主代码中每实例化一个元件就声明一次,在有多个project时很方便!具体实现:省略前三个.vhd文件----------------主文件project.vhd-------------libraryieee;useieee.std_logic_1164.all;usework.my_components.all;entityprojectisport(a,b,c,d:instd_logic;x,y:outstd_logic);endproject;architecturestructuralofprojectis----------------------------signalw:std_logic;beginu1:inverterportmap(b,w);u2:nand_2portmap(a,b,x);u3:nand_3portmap(w,x,c,d,y);endstructural;------------------------------------------------------包集文件my_components.vhd----------libraryieee;useieee.std_logic_1164.all;packagemy_componentsis-------------元件在包集中的声明-------componentinverterisport(a:instd_logic;b:outstd_logic);endcomponent;--对应文件inverter.vhd--------------------------------------------componentnand_2isport(a,b:instd_logic;c:outstd_logic);endcomponent;--对应文件nand_2.vhd---------------------------------------------componentnand_3isport(a,b,c:instd_logic;d:outstd_logic);endcomponent;--对应文件nand_3.vhd------------------------------------------------endmy_components;------------------------------------------------注意:主文件中包集名称必须与包集文件名及包集文件中包集定义名一致!例:1位二进制全加器的VHDL设计(p75-76)通过该图可以看见,要实现全加器,需要调用半加器和或元件,因此需要先写出半加器的程序和或的程序。

LIBRARYIEEE;--或门逻辑描述

USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2aISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYor2a;ARCHITECTUREfulOFor2aISBEGIN

c<=aORb;ENDARCHITECTUREfu1;(1)或门逻辑描述------------------------------------------------------------------------------------------------加数输入和输出进位输出absoco0000011010101101半加器:即只有两个加数相加,而无进位标志一起相加的加法运算。半加器真值表(2)半加器设计描述LIBRARYIEEE;--半加器描述(1)USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderIS

PORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderisBEGIN

so<=aXORb;co<=aANDb;ENDARCHITECTUREfh1;结构体(2)半加器设计描述------------------------------------------------------------------------------------------------------------------------------ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderis

SIGNALabc:STD_LOGIC_VECTOR(1DOWNTO0);BEGIN

abc<=a&b;PROCESS(abc)BEGIN

CASEabcISWHEN"00"=>so<='0';co<='0';WHEN"01"=>so<='1';co<='0';WHEN"10"=>so<='1';co<='0';WHEN"11"=>so<='0';co<='1';WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;ENDARCHITECTUREfh1;2.进程语句1.信号语句---(2)半加器设计描述-------------------------------------------------------------------------------------------------半加器采用case语句的RTL图全加器即两个加数和一个进位一起做加法,共三个输入信号。加数输入和输出进位输出ainbinsumcout00110011010101010110100100010111进位输入cin00001111(3)全加器设计描述异或全加器的描述(方法1)1位二进制全加器顶层设计描述,采用元件例化及层次化设计。LIBRARYIEEE;--1位二进制全加器顶层设计描述USEIEEE.STD_LOGIC_1164.ALL;ENTITYf_adderIS

PORT(ain,bin,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);ENDENTITYf_adder;1位二进制全加器的实体---------------------------------------------------------------------------------------ARCHITECTUREfd1OFf_adderISCOMPONENTor2aPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTh_adderPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;BEGINu1:h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);u2:h_adderPORTMAP(a=>e,b=>cin,co=>f,so=>sum);u3:or2aPORTMAP(a=>d,b=>f,c=>cout);ENDARCHITECTUREfd1;调用半加器声明语句调用或

温馨提示

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

评论

0/150

提交评论