FPGA设计与应用案例教程 课件 第5章 逻辑电路设计_第1页
FPGA设计与应用案例教程 课件 第5章 逻辑电路设计_第2页
FPGA设计与应用案例教程 课件 第5章 逻辑电路设计_第3页
FPGA设计与应用案例教程 课件 第5章 逻辑电路设计_第4页
FPGA设计与应用案例教程 课件 第5章 逻辑电路设计_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

第5章逻辑电路设计本章概要本章聚焦于使用VerilogHDL进行基本数字逻辑电路设计的思路,并提供VerilogHDL代码示例。基本逻辑电路包括基本组合逻辑电路和基本时序逻辑电路,这些基础电路是构建复杂系统的基石,在数字系统设计中发挥着关键作用。通过实际案例讲解,帮助理解数字电路理论,掌握VerilogHDL在逻辑电路设计中的应用技巧。将本章的基础逻辑电路进行参数化设计,可以用作复杂系统的子模块。基本组合逻辑电路01Part1基本组合逻辑电路1.1比较器例5.1使用VerilogHDL设计一个1位二进制比较器,输出“大于”、“小于”、“等于”三种结果。xygtlteq000000101010100110011基本组合逻辑电路1.1比较器modulecomp_1bit(x,y,gt,eq,lt);inputx,y;outputreggt,eq,lt;always@*begingt=0;eq=0;lt=0;if(x>y) gt=1;if(x==y) eq=1;if(x<y) lt=1;endendmodule例5.1使用VerilogHDL设计一个1位二进制比较器,输出“大于”、“小于”、“等于”三种结果。1基本组合逻辑电路1.1比较器例5.2使用VerilogHDL设计一个4位二进制比较器,输出“大于”、“小于”、“等于”三种结果。输入gtlteqA>B100A<B010A=B001modulecomp_4bit(A,B,gt,eq,lt);input[3:0]A,B;outputreggt,eq,lt;always@*begingt=0;eq=0;lt=0;if(A>B) gt=1;if(A==B) eq=1;if(A<B) lt=1;endendmodule1基本组合逻辑电路1.1比较器比较例5.1和例5.2的程序可以看出,无论是1位比较器还是4位比较器,它们的模块结构在电路描述上几乎没有差异,主要的区别在于端口声明。基于这种抽象能力,Verilog支持参数化的位宽描述,使用参数(parameter)可以进一步抽象化模块端口的位宽,使得同一个模块可以适用于不同位宽的设计。参数化设计可以使模块通用化,让代码可以轻松扩展和重用。1基本组合逻辑电路1.2选择器例5.3使用VerilogHDL描述74HC153双4选1数据选择器,其中,1E和2E是低电平有效的输出使能端。S1和S0是数据选择端。1I1~1I3是1号选择器的输入端口,1Y是1号选择器的输出端口。2I1~2I3是2号选择器的输入端口,1Y是2选择器的输出端口。1基本组合逻辑电路1.2选择器S1S0nI0nI1nI2nI3nY1XXXXXX00000XXX00001XXX1001X0XX0001X1XX1010XX0X0010XX1X1011XXX00011XXX111基本组合逻辑电路1.2选择器顶层模块://双四选一选择器module

chip74hc153(Y1,Y2,I0_1,I1_1,I2_1,I3_1,I0_2,I1_2,I2_2,I3_2,S1,S0,E1n,E2n);outputY1,Y2;inputI0_1,I1_1,I2_1,I3_1,I0_2,I1_2,I2_2,I3_2;inputS1,S0;inputE1_n,E2_n;mux4mux1(Y1,I0_1,I1_1,I2_1,I3_1,S1,S0,E1_n);//例化第一个选择器mux4mux2(Y2,I0_2,I1_2,I2_2,I3_2,S1,S0,E2_n);//例化第二个选择器endmodule底层模块:4选1数据选择器modulemux4(Y,in0,in1,in2,in3,S1,S0,E_n);outputY;inputin0,in1,in2,in3;inputS1,S0,E_n;regY;always@(*)begin if(!En) Y=1'b0; elsecase({S1,S0}) 2'b00:Y=in0; 2'b01:Y=in1; 2'b10:Y=in2; 2'b11:Y=in3; default:Y=1'b0; endcaseendendmodule1基本组合逻辑电路1.3译码器例5.4使用VerilogHDL设计4线-16线译码器,当A3~A0为0000时,只有Y0输出等于1;当A3~A0为0001时,只有Y1输出等于1;……其余依此类推。1基本组合逻辑电路1.3译码器程序如下:moduledecoder4to16(Y,A,E1,E0);outputreg[15:0]Y;input[3:0]A;//对应A3、A2、A1、A0inputE1,E0;wireE;//定义一个变量作为总使能信号assignE=~E1&~E0;always@(A,E)begin if(!E) Y=16'bz; elsebegin//这个语句块实现了每次只有一个输出有效 Y=16'b0; Y[A]=1'b1; endendendmodule1基本组合逻辑电路1.4编码器例5.5完成8线-3线编码器的VerilogHDL程序。in7in6in5in4in3in2in1in0out2out1out000000001000000000100010000010001000001000011000100001000010000010101000000110100000001111基本组合逻辑电路1.4编码器程序代码如下:moduleencoder8_3(code_out,in);output[2:0]code_out;input[7:0]in;reg[2:0]code_out; always@(in)begin case(in) 8'b00000001:code_out=3'b000; 8'b00000010:code_out=3'b001; 8'b00000100:code_out=3'b010; 8'b00001000:code_out=3'b011; 8'b00010000:code_out=3'b100; 8'b00100000:code_out=3'b101; 8'b01000000:code_out=3'b110; 8'b10000000:code_out=3'b111; default:code_out=3'bz; endcase endendmodule1基本组合逻辑电路1.5七段译码显示电路例5.6写出十六进制数使用七段LED译码器显示的VerilogHDL程序。(a)共阴极

(b)共阳极1基本组合逻辑电路1.5七段译码显示电路程序代码如下:modulehex_7seg(sev_seg,hex);outputreg[6:0]sev_seg;input[3:0]hex;always@(hex)begin case(hex)//sev_seg的显示顺序为abcdefg 4'h0:sev_seg=7'b0000001; 4'h1:sev_seg=7'b1001111; 4'h2:sev_seg=7'b0010010; 4'h3:sev_seg=7'b0000110; 4'h4:sev_seg=7'b1001100; 4'h5:sev_seg=7'b0100100; 4'h6:sev_seg=7'b0100000; 4'h7:sev_seg=7'b0001111; 4'h8:sev_seg=7'b0000000; 4'h9:sev_seg=7'b0000100; 4'ha:sev_seg=7'b0001000; 4'hb:sev_seg=7'b1100000; 4'hc:sev_seg=7'b0110001; 4'hd:sev_seg=7'b0000010; 4'he:sev_seg=7'b0110000; 4'hf:sev_seg=7'b0111001; endcaseendendmodule1基本组合逻辑电路1.6码制转换电路例5.7使用VerilogHDL设计一个四位二进制转换BCD码的电路。Bit[3:0]Dout[4:0]0000000000001000010010000100011000110100001000101001010110001100111001111000010001001010011010100001011100011100100101101100111110101001111101011基本组合逻辑电路1.6码制转换电路程序代码如下:modulebits4_to_BCD(Dout4,Dout3,Dout2,Dout1,Dout0,Bit3,Bit2,Bit1,Bit0);outputDout4,Dout3,Dout2,Dout1,Dout0;inputBit3,Bit2,Bit1,Bit0;reg[4:0]Dout;always@(Bit3,Bit2,Bit1,Bit0)begin case({Bit3,Bit2,Bit1,Bit0}) 4'h0:Dout=5'b00000; 4'h1:Dout=5'b00001; 4'h2:Dout=5'b00010; 4'h3:Dout=5'b00011; 4'h4:Dout=5'b00100; 4'h5:Dout=5'b00101; 4'h6:Dout=5'b00110; 4'h7:Dout=5'b00111; 4'h8:Dout=5'b01000; 4'h9:Dout=5'b01001; 4'ha:Dout=5'b10000; 4'hb:Dout=5'b10001; 4'hc:Dout=5'b10010; 4'hd:Dout=5'b10011; 4'he:Dout=5'b10100; 4'hf:Dout=5'b10101; endcaseendassign{Dout4,Dout3,Dout2,Dout1,Dout0}=Dout;endmodule1基本组合逻辑电路1.7加法器例5.8使用VerilogHDL设计一位全加器,逻辑电路图如图5-6所示。1基本组合逻辑电路1.7加法器程序如下:modulefulladd(sum,c_out,a,b,c_in);outputsum,c_out;inputa,b,c_in;wires1,c1,c2;xor(s1,a,b);and(c1,a,b);xor(sum,s1,c_in);and(c2,s1,c_in);or(c_out,c2,c1);endmodule1基本组合逻辑电路1.7加法器例5-9设计一个4位全加器行为描述modulefull_adder4_beh(sum,c_out,a,b,c_in);outputreg[3:0]sum;outputregc_out;input[3:0]a,b;inputc_in; always@(*) {c_out,sum}=a+b+c_in;endmodule1基本组合逻辑电路1.7加法器数据流描述modulefull_adder4_beh(sum,c_out,a,b,c_in);output[3:0]sum;outputc_out;input[3:0]a,b;inputc_in; assign{c_out,sum}=a+b+c_in;endmodule1基本组合逻辑电路行为描述结构化描述(模块例化)modulefull_adder4_ins(sum,c_out,a,b,c_in);output[3:0]sum;outputc_out;input[3:0]a,b;inputc_in;wirec1,c2,c3; fulladdfa0(sum[0],c1,a[0],b[0],c_in); fulladdfa1(sum[1],c2,a[1],b[1],c1); fulladdfa2(sum[2],c3,a[2],b[2],c2); fulladdfa3(sum[3],c_out,a[3],b[3],c3);endmodule第5章逻辑电路设计基本时序逻辑电路02Part2基本时序逻辑电路2.1寄存器例5.10使用VerilogHDL设计一个带有异步复位和同步使能的寄存器。2基本时序逻辑电路2.1寄存器程序如下:modulereg_1(q_data,clk,reset,load,data);outputregq_data;inputclk,reset,load;inputdata;always@(posedgeclk,posedgereset)begin

if(reset)

q_data<=1’b0;

else(load)q_data<=data;endendmodule2基本时序逻辑电路2.1寄存器例5.11使用VerilogHDL设计一个N位寄存器。程序如下:moduleN_reg(q_data,clk,reset,load,data);outputreg[N-1:0]q_data;//声明寄存器位宽inputclk,reset,load;input[N-1:0]data;//声明数据位宽

parameterN=8;//定义寄存器位宽为8always@(posedgeclk,posedgereset)if(reset)q_data<=0;elseif(load)q_data<=data;endmodule2基本时序逻辑电路2.2移位寄存器移位寄存器通常由多个触发器级联而成,在同步时钟信号的作用下存储并移位数据使得数据能够在每个时钟周期内向左或向右移动一位。不仅可以用于简单的数据存储,还广泛应用于数据的串并转换、分频、序列码生成和检测以及数值运算等。2基本时序逻辑电路2.2移位寄存器移位寄存器的工作方式按照移动方向可以分为左移和右移从数据转换方式来看,移位寄存器有四种工作模式‌:‌串行输入并行输出(SIPO,SerialInParallelOut,)‌:多位数据以串行方式逐位输入寄存器,最终以并行方式一次性输出。‌串行输入串行输出(SISO,SerialInSerialOut,)‌:多位数据以串行方式逐位输入,且以串行方式逐位输出,每次时钟脉冲只移动一位。‌并行输入串行输出(PISO,ParallelInSerialOut)‌:多位数据以并行方式一次性输入寄存器,然后以串行方式逐位输出。‌并行输入并行输出(PIPO,ParallelInParallelOut)‌:多位数据以并行方式输入寄存器,以并行方式输出,通常在同一个时钟脉冲下完成‌。2基本时序逻辑电路2.2移位寄存器例5.12使用VerilogHDL设计一个具有同步置数功能的8位移位寄存器,实现并行输入串行输出。使用移位运算符的程序如下:moduleshift8(q,din,clk,load);outputregq;input[7:0]din;inputclk,load;reg[7:0]reg8;always@(posedgeclk)begin if(load) reg8<=din; elsebegin reg8<=reg8>>1;//采用移位运算符实现右移 q<=reg8[0];//把寄存器数据的最低位输出 endendendmodule2基本时序逻辑电路2.2移位寄存器使用错位赋值的程序如下:moduleshift8(q,din,clk,load);outputregq;input[7:0]din;inputclk,load;reg[7:0]reg8;always@(posedgeclk)begin if(load) reg8<=din; elsebegin reg8[6:0]<=reg8[7:1];//采用错位赋值的方法实现右移 q<=reg8[0]; endendendmodule2基本时序逻辑电路2.2移位寄存器例5.13设计一个4位双向移位寄存器输入输出CLRCLKD3D2D1D0LRS1S0Q3Q2Q1Q00xxxxxx00001↑D3D2D1D0LR00Q3Q2Q1Q01↑D3D2D1D0LR01Q2Q1Q0R1↑D3D2D1D0LR10LQ3Q2Q11↑D3D2D1D0LR11D3D2D1D02基本时序逻辑电路2.2移位寄存器程序如下:moduleshift4_dual(Q,D,S1,S0,DSR,DSL,CLR,CLK);output[3:0] Q;input[3:0] D;inputS1,S0,DSR,DSL,CLR,CLK;reg [3:0]Q; always@(posedgeCLKornegedgeCLR)begin if(!CLR)

Q=4'b0000; elsecase({S1,S0}) 2'b00:beginQ<=Q;end 2'b01:beginQ<=Q<<1;Q[0]<=R;end 2'b10:beginQ<=Q>>1;Q[3]<=L;end 2'b11:beginQ<=D;end default:beginQ<=4'bx;end endcase endendmodule2基本时序逻辑电路2.3计数器例5.14设计一个异步复位的四位二进制加减计数器,resetclkloaddirD3D2D1D0Q3Q2Q1Q00xxxD3D2D1D000001↑1xD3D2D1D0D3D2D1D01↑00D3D2D1D0减计数1↑01D3D2D1D0加计数2基本时序逻辑电路2.3计数器程序如下:modulecount4bit(Q,clk,reset,load,D,dir);output[3:0]Q;inputclk,reset,load;input[3:0]D;inputdir;reg[3:0]Q;always@(posedgeclkornegedgereset)begin if(!reset) Q<=4'b0; elseif(load) Q<=D; elsecase(dir) 1'b1:Q<=Q+1; 1'b0:Q<=Q-1; default:Q<=Q; endcaseendendmodule2基本时序逻辑电路2.3计数器例5.15用VerilogHDl语言设计一个异步复位的三进制计数器。modulecounter3(Q1,Q0,CO,CLK,CR);outputCLK,CR;inputQ1,Q0,CO;

reg[1:0]Q;always@(posedgeCLKorposedgeCR)beginif(CR)begin Q=2’b00;CO=1’b0;endelseif(Q==2)begin Q=2’b00;CO=1’b1;endelsebegin Q=Q+1;CO=1’b0;endendassignQ1<=Q[1];assignQ0<=Q[0];

endmodule2基本时序逻辑电路2.4分频电路分频电路通常是通过计数器实现的,计数器是构建分频电路的核心组件。计数器通过对时钟信号的脉冲进行计数,当计数值达到设定值时,输出信号状态发生翻转,从高电平变为低电平或者从低电平变为高电平,从而实现将输入时钟信号的频率降低的功能。2基本时序逻辑电路2.4分频电路例5.16设计一个二分频电路,将输入信号的频率降为原来的1/2。程序如下:modulediv_fre_2(q_out,reset,data_in);outputregq_out;inputdata_in,reset;always@(posedgedata_in) if(reset) q_out<=1'b0; else q_out<=~q_out;endmodule 2基本时序逻辑电路2.4分频电路例5.17外部时钟信号的频率为20KHz,而模块所需时钟为500Hz,编写程序生成合适的信号。2基本时序逻辑电路2.4分频电路方法一:modulediv_fre_20Kto500(clk_500,clk_20K,reset);outputregclk_500;inputclk_20K;inputreset;integeri;always@(posedgeclk_20K)begin

if(reset) clk_500=1'b0;

elseif(i==39)begin//计数变量取临界值 i<=0; clk_500<=1'b1; end elsebegin i<=i+1; clk_500<=1’b0; endendendmodule2基本时序逻辑电路2.4分频电路方法二:modulediv_fre_20Kto500(clk_500,clk_20K,reset);outputregclk_500;inputclk_20K;inputreset;integeri;always@(posedgeclk_20K)begin if(reset)begin i<=0; clk_500=1'b0; end elseif(i==19)begin//计数变量取临界值 i<=0; clk_500<=~clk_500; end else i<=i+1;endendmodule2基本时序逻辑电路2.4分频电路(a)方法一(b)方法二第5章逻辑电路设计二十四进制BCD码计数器03Part3综合逻辑电路3.1二十四进制BCD码计数器例5.18设计一个二十四进制的BCD码计数器。按照计数器的编程方法,只需要判断计数寄存器是否计到最后一个状态23。如果是,则输出全部归零。否则,计数器加1。但是在使用BCD码时,十位和个位两组BCD码有各自的计数规律,要分别判断。3综合逻辑电路设计分析当表示个位的BCD0等于9时,等到下一个时钟触发,将带来十位和个位的同时变化,即BCD0转为0,同时表示十位的BCD1应该加1。Verilog语句为if(BCD0==4‘b1001)begin//个位数为9BCD0<=4’b0;BCD1<=BCD1+1;end在BCD0不等于9时,在时钟触发时,仅有BCD0需要加1变化,BCD1保持不变。3综合逻辑电路程序代码modulecnt24_BCD(clk,rst,cnt24);inputclk,rst;output[5:0]cnt24;

reg[1:0]BCD1;//十位数BCD码值reg[3:0]BCD0;//个位数BCD码值always@(posedgeclk)beginif(rst)begin BCD1<=2'b0; BCD0<=4'b0; endelse if(BCD1==2'b10&&BCD0==4'b0011)//计数到23 begin BCD1<=2'b0; BCD0<=4'b0;end elseif(BCD0==4'b1001)begin//个位数为9 BCD0<=4'b0; BCD1<=BCD1+1;end else BCD0<=BCD0+1;endassigncnt24={BCD1,BCD0};//输出6位数(包含两组BCD码)结果endmodule第5章逻辑电路设计呼吸灯电路04Part3综合逻辑电路3.2呼吸灯电路例5.19使用VerilogHDL设计一个呼吸灯电路。呼吸灯电路核心是使用PWM(脉宽调制)技术控制LED的发光强度。PWM技术通过改变信号的占空比来调节LED的亮度。占空比是指在一个脉冲信号的持续时间内,高电平所占的比例。占空比越高,LED的亮度就越强;占空比越低,LED的亮度就越弱。PWM调光利用了人眼的“视觉暂留”效应,当LED的亮度变化频率足够快时,人眼会感觉到平均亮度,而不是瞬间的亮灭。为了避免人眼能够看到LED的闪烁,在设计时PWM调光的频率应在100Hz以上‌。3综合逻辑电路设计分析呼吸灯的完整显示过程包括“呼”和“吸”两个阶段。“呼”的阶段,在连续的时钟脉冲周期内,占空比越来越高,直至达到最高占空比。“吸”的阶段,在连续的时钟脉冲周期内,占空比从最高值开始逐步下降3综合逻辑电路相关概念设计之前厘清几个概念:时钟周期Tc:时钟信号clk从低电平到高电平再回到低电平的时间,是时钟频率的倒数。PWM周期TP:一个完整的PWM波形占用的时间,是PWM频率的倒数。脉冲周期T:PWM信号每一次从低电平到高电平再回到低电平的时间。脉冲宽幅:一个脉冲周期中脉冲(高电平)的时间。占空比:在一个脉冲周期内,脉冲(高电平)占整个周期的时间比例。一个PWM周期内包含多个脉冲周期,实现占空比的连续变化,经过若干次达到占空比的最大值,这里经过的次数称为步数。3综合逻辑电路脉冲周期计算比如设定时钟周期为10ms,步数为8。也就是说经过8个脉冲周期从最低占空比提升到最高占空比,再经过8个脉冲周期从最高占空比降低至最低占空比。相邻的两个脉冲周期内占空比会增加或减少固定值。相应地,如果最高占空比为50%,那么脉冲周期内需要一个2倍于步数的时钟周期,即:T=Tc×步数÷最大占空比这里的时钟周期为10ms,那么脉冲周期是0.16s。3综合逻辑电路PWM周期计算整个PWM周期是脉冲周期的16倍。即:TP=T×步数×2如果脉冲周期是0.16s,有PWM周期为2.56s,基本符合人体呼吸节奏。3综合逻辑电路程序代码modulebreathing_LED(LED,clk,rst);inputclk,rst;outputregLED;

reg[3:0]cnt;//每个脉宽周期的计数reg[2:0]PWM_width;//脉宽数值regdir;//脉宽调制方向,高电平增加,低电平减少always@(posedgeclkornegedgerst)begin

if(!rst)begin cnt<=4'b0; PWM_width<=3'b0; end

elsebegin cnt<=cnt+1;//在脉冲周期内cnt从0计数到15 if(cnt==4'hF)//每次cnt计满,改变PWM_width的值 if(dir) if(PWM_width<3'b111) PWM_width<=PWM_width+1; else dir<=1'b0; else if(PWM_width>3'b0) PWM_width<=PWM_width-1; else dir<=1'b1; if(cnt<=PWM_width)//比较脉宽数值和计数值 LED<=1'b1;//灯亮 else LED<=1'b0;//灯灭 endend3综合逻辑电路程序代码3综合逻辑电路程序代码真正实现2.56s呼吸过程的前提是,时钟clk的周期为10ms。如果开发板上的晶振频率为50MHz,要经过一个分频器得到100Hz的时钟。3综合逻辑电路程序代码分频器程序如下:modulediv_fre_50Mto100(clk_100,clk_50M,reset);outputregclk_100;inputclk_50 M;inputreset;

integeri;always@(posedgeclk_50M)begin if(reset)begin i<=0; clk_100=1’b0; end elseif(i==24999)begin i<=0; clk_100<=~clk_100;end else i<=i+1;end

endmodule第5章逻辑电路设计十字路口交通控制系统05Part3综合逻辑电路3.3十字路口交通控制系统例5.20使用VerilogHDL设计一个具有基本信号功能的十字路口交通控制系统。有一个包含南北方向和东西方向马路的十字路口,东西方向车流量较大,绿灯时间较长,南北方向的车流量较小,绿灯时间较短。如图5-15所示。十字路口交通控制系统包括路口交通信号灯控制和信号灯的监控与报警两个主功能。3综合逻辑电路3.3十字路口交通控制系统以1分钟为一个周期,两个方向的信号灯时长分布为:南北方向:红灯40秒,黄灯5秒,绿灯15秒东西方向:红灯15秒,黄灯5秒,绿灯40秒3综合逻辑电路信号灯表示十字路口的机动车信号灯统一按照“红-黄-绿”的顺序排列,每个方向的信号灯需要使用三个位表示。 SN:南北方向的三个信号灯EW:东西方向的三个信号灯分别用100、010、001三个值表示仅红灯亮、仅黄灯亮和仅绿灯亮。3综合逻辑电路计数变量选择按输入时钟的频率是1Hz计算,整个信号灯变化周期是1分钟,需要计60个数,因此,定义8位数的内部变量i进行计数。reg[7:0]i;3综合逻辑电路信号灯状态根据信号灯时长分布,这个十字路口交通灯东西方向和南北方向信号灯的持续状态分为四种,3综合逻辑电路熄灯信号为了与信号灯的监控与报警电路配合工作,需要声明一个熄灯信号,当信号有效时,信号灯熄灭。即if(OFF==1’b1)beginSN<=3'b000;

EW<=3'b000;end如果单纯考虑信号灯的点亮时长,不需要这个信号。3综合逻辑电路程序代码/*十字路口交通信号灯时序控制模块*/moduletraffic_control(SN,

温馨提示

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

评论

0/150

提交评论