第5章VHDL设计初步

上传人:仙*** 文档编号:52192142 上传时间:2022-02-07 格式:PPT 页数:58 大小:1.35MB
返回 下载 相关 举报
第5章VHDL设计初步_第1页
第1页 / 共58页
第5章VHDL设计初步_第2页
第2页 / 共58页
第5章VHDL设计初步_第3页
第3页 / 共58页
点击查看更多>>
资源描述
是什么是VHDL? Very high speed integrated Hardware Description Language (VHDL)超高速集成电超高速集成电路硬件描述语言路硬件描述语言是IEEE、工业标准硬件描述语言用语言的方式而非图形等方式描述硬件电路n容易修改n容易保存特别适合于设计的电路有:n复杂组合逻辑电路,如: 译码器、编码器、加减法器、多路选择器、地址译码器.n状态机n等等.VHDL的功能和标准的功能和标准n VHDL 描述输入端口输出端口电路的行为和功能nVHDL有过两个标准:IEEE Std 1076-1987 (called VHDL 1987)IEEE Std 1076-1993 (called VHDL 1993)【例5-1】ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ;END ENTITY mux21a ;ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ;实体结构体5.1 多路选择器多路选择器VHDL描述描述图图4-1 mux21a实体实体图图5-2 mux21a结构体结构体5.1.1 2选选1多路选择器的多路选择器的VHDL描述描述5.1.1 2选选1多路选择器的多路选择器的VHDL描述描述【例例5-2】 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGINd = a AND (NOT S) ;e = b AND s ;y = d OR e ; END ARCHITECTURE one ;【例【例5-3】 . . . ARCHITECTURE one OF mux21a IS BEGIN y = (a AND (NOT s) OR (b AND s) ; END ARCHITECTURE one;5.1.1 2选选1多路选择器的多路选择器的VHDL描述描述【例【例5-4】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ;END IF; END PROCESS;END ARCHITECTURE one ;5.1.1 2选选1多路选择器的多路选择器的VHDL描述描述图图5-3 mux21a功能时序波形功能时序波形5.1.2 VHDL相关语句说明相关语句说明1. 1. 实体表达实体表达【例【例5-5】ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END ENTITY e_name;或:或:ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END e_name;5.1.2 VHDL相关语句说明相关语句说明2. 2. 实体名实体名: :不能以数字开头,尽可能表达功能上的含义不能以数字开头,尽可能表达功能上的含义.3. 3. PORTPORT语句和端口信号名语句和端口信号名4. 4. 端口模式端口模式IN IN 输入:信号进入实体输入:信号进入实体OUT OUT 输出:信号离开实体,且不会在内部反馈使用输出:信号离开实体,且不会在内部反馈使用INOUT INOUT 双向:信号可离开或进入实体双向:信号可离开或进入实体BUFFER BUFFER 输出缓冲:信号离开实体,但在内部有反馈输出缓冲:信号离开实体,但在内部有反馈5. 5. 数据类型数据类型BITBITBit Bit 位类型:(位类型:(0 0,1 1)bit_vector bit_vector 位向量类型:位向量类型:bitbit的组合的组合Integer Integer 整数类型整数类型Boolean Boolean 布尔类型:(布尔类型:(true, falsetrue, false)std_logic std_logic 位类型位类型, , 工业标准:(工业标准:(0 0,1 1,X X,Z Z)std_logic_vector std_logic_vector 位向量类型,工业标准位向量类型,工业标准5.1.2 VHDL相关语句说明相关语句说明6. 6. 结构体表达结构体表达【例【例5-6】ARCHITECTURE arch_name OF e_name IS (说明语句说明语句)BEGIN (功能描述语句功能描述语句)END ARCHITECTURE arch_name ;或:或:ARCHITECTURE arch_name OF e_name IS (说明语句说明语句)BEGIN (功能描述语句功能描述语句)END arch_name ;7. 7. 信号传输信号传输( (赋值赋值) )符号和数据比较符号符号和数据比较符号信号传输(赋值)符号:例4-1中的表达式y=aVHDL要求赋值符“=”两边的信号的数据类型必须一致。数据比较符号:例4-1中的s=0中的“=”没有赋值的含义,只是一种数据比较符号。8. 8. 逻辑操作符逻辑操作符ANDAND、OROR、NOTNOTVHDL的基本逻辑操作符:AND(与)、OR(或)、NAND(与非)、NOR(或非)、XOR(异或)、XNOR(同或)、和NOT(取反)。5.1.2 VHDL相关语句说明相关语句说明9. 9. IF_THENIF_THEN条件语句条件语句IF_THEN_ELSEIF_THEN_ELSE表达的是顺序语句,以语句表达的是顺序语句,以语句“END IF”END IF”结束结束。10. 10. WHEN_ELSEWHEN_ELSE条件信号赋值语句条件信号赋值语句并行语句并行语句赋值目标赋值目标 = 表达式表达式 WHEN 赋值条件赋值条件 ELSE 表达式表达式 WHEN 赋值条件赋值条件 ELSE . 表达式表达式 ;11. 11. PROCESSPROCESS进程语句和顺序语句进程语句和顺序语句由由“ProcessProcessend Process”end Process”引导的语句称为进程语句引导的语句称为进程语句,所有合法的顺序描述的语句都必须放在进程语句中。所有合法的顺序描述的语句都必须放在进程语句中。ProcessProcess旁的(旁的(a,b,sa,b,s)称为进程的敏感信号表。)称为进程的敏感信号表。12. 12. 文件取名和存盘文件取名和存盘注意:程序的文件名应该与该程序的实体名一致。注意:程序的文件名应该与该程序的实体名一致。5.1.3 VHDL设计的基本概念和语句小节设计的基本概念和语句小节数据类型信号赋值符条件比较符 延时实体结构体端口定义端口模式逻辑操作符IF条件语句并行条件语句进程语句顺序语句并行语句文件取名文件存盘5.2 寄存器描述及其寄存器描述及其VHDL语言现象语言现象5.2.1 D触发器的触发器的VHDL描述描述【例5-7】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; Q = Q1 ; -将内部的暂存数据向端口输出 END PROCESS ; END bhv;D触发器触发器比较用5种不同语句的D触发器VHDL程序LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture bhv of test1 issignal q1 : bit ;beginprocess (clk)begin if clk=1 AND clklast_value=0 then q1 = d; end if; q = q1 ;end process;end bhv;LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture bhv of test1 isbeginprocess (clk,d)begin if rising_edge(clk) then q = d; end if;end process;end bhv;LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture bhv of test1 issignal q1 : bit ;beginprocess (clk,d)begin if (clk = 1) then q1 = d; end if; q = q1 ;end process;end bhv;LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture bhv Of test1 issignal q1 : bit ;beginprocess (clk)begin if (clk = 1) then q1 = d; end if; q = q1 ;end process;End bhv;5.2.2 D触发器触发器VHDL描述的语言现象说明描述的语言现象说明1. 1. 标准逻辑位数据类型标准逻辑位数据类型STD_LOGICSTD_LOGICBIT数据类型定义: TYPE BIT IS(0,1);TYPE BIT IS(0,1);STD_LOGIC数据类型定义:TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-);TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-);STD_LOGIC所定义的9种数据的含义是:UU表示未初始化的;表示未初始化的; XX表示强未知的;表示强未知的; 0 0表示强表示强逻辑逻辑0 0; 1 1表示强逻辑表示强逻辑1 1; ZZ表示高阻态;表示高阻态; W W 表示弱未知的;表示弱未知的; LL表示弱逻辑表示弱逻辑0 0; HH表示弱表示弱逻辑逻辑1 1; - -表示忽略。表示忽略。5.2.2 D触发器触发器VHDL描述的语言现象说明描述的语言现象说明2. 2. 设计库和标准程序包设计库和标准程序包使用库和程序包的一般定义表式是: LIBRARY LIBRARY ; USE USE .ALL ; ALL ; 使用标准库STD和标准程序包STANDARDLIBRARY STD;USE STD.STANDARD.ALL;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;3. 3. SIGNALSIGNAL信号定义和数据对象信号定义和数据对象例4-6中的语句“SIGNAL Q1:STD_LOGIC;”定义Q1为DFF1的内部节点信号,STD_LOGIC为Q1的数据类型。5.2.2 D触发器触发器VHDL描述的语言现象说明描述的语言现象说明4. 4. 上升沿检测表式和信号属性函数上升沿检测表式和信号属性函数EVENTEVENT 关键词EVENT是信号属性,VHDL通过以下表式来测定某信号的跳变边沿: EVENTEVENT检测时钟信号CLK的上升沿:CLKEVENT AND CLK=1有多少个寄存器?ENTITY reg1 ISPORT ( d: in BIT;clk : in BIT;q: out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : BIT;BEGINPROCESS (clk)BEGINIF clk=1 AND clkevent THENa = d;b = a;q = b;END IF;END PROCESS;END reg1;ENTITY reg1 ISPORT ( d: in BIT;clk : in BIT;q: out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISBEGINPROCESS (clk)VARIABLE a, b : BIT;BEGINIF clk=1 AND clkevent THENa := d;b := a;q b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; END PROCESS ; END 图图4-6 例例4-10的电路图的电路图5.2.3 实现时序电路的实现时序电路的VHDL不同表达方式不同表达方式【例【例5-11】.PROCESS (CLK) BEGINIF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -确保确保CLK的变化是一次上升沿的跳变的变化是一次上升沿的跳变 END IF; END PROCESS ;【例【例5-12】.PROCESS (CLK) BEGINIF CLK=1 AND CLKLAST_VALUE=0 同例同例5-11 THEN Q = D ; END IF; END PROCESS ;5.2.3 实现时序电路的实现时序电路的VHDL不同表达方式不同表达方式【例【例5-13】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY DFF3 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL Q1 : STD_LOGIC; BEGIN PROCESS (CLK) BEGIN IF rising_edge(CLK) - CLK的数据类型必须是的数据类型必须是STD_LOGIC THEN Q1 = D ; END IF; Q = Q1 ; END PROCESS ; END ;5.2.3 实现时序电路的实现时序电路的VHDL不同表达方式不同表达方式【例5-14】 . PROCESS BEGIN wait until CLK = 1 ; -利用利用wait语句语句 Q = D ; END PROCESS;【例5-15】. PROCESS (CLK) BEGIN IF CLK = 1 THEN Q = D ; -利用进程的启动特性产生对利用进程的启动特性产生对CLK的边沿检测的边沿检测 END IF; END PROCESS ;【例5-16】. PROCESS (CLK,D) BEGIN IF CLK = 1 -电平触发型寄存器电平触发型寄存器 THEN Q = D ; END IF; END PROCESS ;5.2.3 实现时序电路的实现时序电路的VHDL不同表达方式不同表达方式图图4-7 边沿型触发器时序波形边沿型触发器时序波形图图4-8 电平触发型寄存器的时序波形电平触发型寄存器的时序波形5.2.4 异步时序电路设计异步时序电路设计 【例例5-17】. ARCHITECTURE bhv OF MULTI_DFF IS SIGNAL Q1,Q2 : STD_LOGIC; BEGINPRO1: PROCESS (CLK) BEGIN IF CLKEVENT AND CLK=1 THEN Q1 = NOT (Q2 OR A); END IF; END PROCESS ;PRO2:PROCESS (Q1) BEGIN IF Q1EVENT AND Q1=1 THEN Q2 = D; END IF; QQ = Q2 ; END PROCESS ; 图图5-9 例例4-17综合的电路综合的电路5.2.5 VHDL设计基本概念和语言现象小节设计基本概念和语言现象小节数据类型数据对象信号属性时钟检测VHDL库程序包时序电路异步时序5.3 1位二进制全加器的位二进制全加器的VHDL设计设计图图4-10半加器半加器h_adder电路图电路图图图4-11 全加器全加器f_adder电路图电路图5.3.1 半加器描述和半加器描述和CASE语句语句absoco0000011010101101表表4-1 半加器半加器h_adder逻辑功能真值表逻辑功能真值表1. 1. CASECASE语句语句CASE语句的一般表式是:语句的一般表式是:CASE ISWhen = ; . ; ;When = ; . ; ;.END CASE ;2. 2. 标准逻辑矢量数据类型标准逻辑矢量数据类型STD_LOGIC_VECTORSTD_LOGIC_VECTOR3. 3. 并置操作符并置操作符 以下是一些并置操作示例:以下是一些并置操作示例:SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ;SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; .a = 1 0 d(1) 1 ; - 元素与元素并置,并置后的数组长度为元素与元素并置,并置后的数组长度为4 .IF a d = 101011 THEN . - 在在IF条件句中可以使用并置符条件句中可以使用并置符 5.3.1 半加器描述和半加器描述和CASE语句语句在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽,如: B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; 或或 SIGNAL A :STD_LOGIC_VECTOR(1 TO 4)5.3.1 半加器描述和半加器描述和CASE语句语句【例5-18】 LIBRARY IEEE ;-或门逻辑描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGIN c = a OR b ; END ARCHITECTURE fu1;【例5-19】LIBRARY IEEE; -半加器描述(1)USE IEEE.STD_LOGIC_1164.ALL; ENTITY adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY adder; ARCHITECTURE fh1 OF adder is BEGIN so = NOT(a XOR (NOT b) ; co = a AND b ; END ARCHITECTURE fh1; 【例5-20】LIBRARY IEEE; -半加器描述(2)USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ;BEGIN abc so=0; co so=1; co so=1; co so=0; co NULL ; END CASE; END PROCESS;END ARCHITECTURE fh1 ;【例5-21】 . -半加器描述(3) SIGNAL abc,cso : STD_LOGIC_VECTOR(1 DOWNTO 0 ); BEGIN abc = a & b ; co = cso(1) ; so cso cso cso csoain,b=bin,co=d,so=e); u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum); u3 : or2a PORT MAP(a=d, b=f, c=cout); END ARCHITECTURE fd1;5.3.2 全加器描述和例化语句全加器描述和例化语句 元件例化语句由两部分组成,第一部分是对一个现成的设计实体定元件例化语句由两部分组成,第一部分是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示:简表达式如下所示: COMPONENT 元件名元件名 IS PORT (端口名表端口名表) ; END COMPONENT 文件名文件名 ; 元件例化语句的第二部分则是此元件与当前设计实体元件例化语句的第二部分则是此元件与当前设计实体(顶层文件顶层文件)中中元件间及端口的连接说明。语句的表达式如下:元件间及端口的连接说明。语句的表达式如下: 例化名例化名 : 元件名元件名 PORT MAP( 端口名端口名 = 连接端口名连接端口名,.);4.4 计数器设计计数器设计 【例例4-20】ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1 ; END IF; END PROCESS ;END bhv; 4.4 计数器设计计数器设计 4.4.1 4位二进制加法计数器设计位二进制加法计数器设计 表式Q = Q + 1的右项与左项并非处于相同的时刻内,对于时序电路,除了传输延时外,前者的结果出现于当前时钟周期;后者,即左项要获得当前的Q + 1,需等待下一个时钟周期。 表面上,BUFFER具有双向端口INOUT的功能,但实际上其输入功能是不完整的,它只能将自己输出的信号再反馈回来,并不含有IN的功能。 4.4 计数器设计计数器设计 4.4.2 整数类型整数类型 Q : BUFFER INTEGER RANGE 15 DOWNTO 0; Q : BUFFER NATURAL RANGE 15 DOWNTO 0; X康芯科技康芯科技4.4.3 计数器设计的其他表述方法计数器设计的其他表述方法 【例例4-21】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END ; ARCHITECTURE bhv OF CNT4 ISSIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = Q1 + 1 ; END IF; END PROCESS ; Q 0) ; -计数计数 器异步复位器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿检测时钟上升沿 接下页接下页 4.5 一般加法计数器设计一般加法计数器设计 IF EN = 1 THEN -检测是否允许计数(同步使能)检测是否允许计数(同步使能) IF CQI 0); -大于大于9, 计数值清零计数值清零 END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1; -计数大于计数大于9,输出进位信号,输出进位信号 ELSE COUT = 0; END IF; CQ X) SIGNAL d1 : STD_LOGIC_VECTOR(4 DOWNTO 0); VARIABLE a1 : STD_LOGIC_VECTOR(15 DOWNTO 0); . d1 0); a1 := (OTHERS=0) ; d1 e(3),3=e(5), OTHERS=e(1) ); f = e(1) & e(5) & e(1) & e(3) & e(1) ; 4.5 一般加法计数器设计一般加法计数器设计 4.5.2 程序分析程序分析 图图4-14 例例4-22的的RTL电路(电路(Synplify综合)综合) 4.5 一般加法计数器设计一般加法计数器设计 4.5.2 程序分析程序分析 图图4-15 例例4-22的工作时序的工作时序 1.0s 1.5s 2.0s 2.5s 3.0s 3.5s 4.5.3 含并行置位的移位寄存器设计含并行置位的移位寄存器设计 【例例4-23】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHFRT IS - 8位右移寄存器位右移寄存器 PORT ( CLK,LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC );END SHFRT;ARCHITECTURE behav OF SHFRT IS BEGIN PROCESS (CLK, LOAD) VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 THEN IF LOAD = 1 THEN REG8 := DIN; -由(由(LOAD=1)装装载新数据载新数据 ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); END IF; END IF; QB = REG8(0); - 输出最低位输出最低位 END PROCESS; END behav; 44.5 一般加法计数器设计一般加法计数器设计 4.5.3 含并行置位的移位寄存器设计含并行置位的移位寄存器设计 图图4-16 例例4-23的工作时序的工作时序 1.0s 1.5s 2.0s 2.5s 3.0s 3.5s 4.0s 4.5s VHDL 设计流程 : V-S-F-PHDLEntryUse any Text Editor to input your designynthesisUse any VHDL Compiler to convertyour language designto Gate level withoptimization in termof Speed / AreaittingArchitecture SynthesisTo map the logicto Altera Device Architecturee.g. LUT, Carry/Cascade Chain, EAB.(further logic optimization)erogr. Down LoadConfigure/Programming the Altera Deviceand do on board debugging,prototyping or productionSTEP1:建立 工作库文件夹STEP2:输入设计项目原理图/VHDL文本代码STEP3:存盘,注意 原理图/文本取名STEP4:将设计项目设置成ProjectSTEP5:选择目标器件 STEP11: 硬件测试STEP9:引脚锁定并编译STEP8:仿真测 试和波形分析STEP7:建立仿真波形文件STEP6:启动编译STEP10:编程 下载/配置VHDL文本输入设计流程 5.4 VHDL文本输入设计方法初步文本输入设计方法初步为设计全加器新建一个文件夹作工作库文件夹名取为My_prjct注意,不可用中文!作业作业1 1:P93P93 4-2. 图图4-17所示的是所示的是4选选1多路选择多路选择器,试分别用器,试分别用IF_THEN语句写出语句写出此电路的此电路的VHDL程序。程序。选择控制的信号选择控制的信号s1和和s0的数据类型的数据类型为为STD_LOGIC_VECTOR;当当s1=0,s0=0;s1=0,s0=1;s1=1,s0=0和和s1=1,s0=1分别分别执行执行y=a、y=b、y=c、y=d。 图图4-17 4选选1多路选择器多路选择器 作业:4-3
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


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

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


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