书签 分享 收藏 举报 版权申诉 / 50
上传文档赚钱

类型《CPLD FPGA设计与应用基础教程》课件第九章.ppt

  • 上传人(卖家):momomo
  • 文档编号:5716102
  • 上传时间:2023-05-05
  • 格式:PPT
  • 页数:50
  • 大小:2.38MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《CPLD FPGA设计与应用基础教程》课件第九章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    CPLD FPGA设计与应用基础教程 CPLD FPGA设计与应用基础教程课件第九章 CPLD FPGA 设计 应用 基础教程 课件 第九
    资源描述:

    1、第九章第九章 硬件线程硬件线程与接口与接口LOREM IPSUM DOLOR目 录CONCENT9.1 硬件线程的基本概念9.2 硬件线程的连接9.3 硬件线程的同步9.4 实例9.5 异步硬件线程的连接9.6 接口9.7 实例9.1 硬件线程的基本概念GRADUATION THESIS9.1硬件线程的基本概念基本概念基本概念:硬件线程中,变量一般都存储在寄存器和内存中,数据路径只负责数据计算。当数据路径的组合逻辑进行计算时,如移位操作、算术操作等,寄存器和存储器内的变量值将会被取出、更新,然后重新存储。该过程称之为寄存器传输。寄存器传输的顺序由有限状态机控制,因此硬件线程也被称之为具有数据路

    2、径的有限状态机。与软件线程的区别:与软件线程的区别:(1)SystemVerilog语言作为一种硬件设计语言,它的每一个always语句块和assign语句都会对应一个具体的硬件线路或者门电路,即硬件线程在整个系统中一直处于活动状态中。(2)在SystemVerilog语言,硬件线程是硬件线程是一类可用于综合的线程,而软件线程只能用于仿真与验证。9.1硬件线程的基本概念9.1.1 数据路径数据路径假设要实现一个64位并行数据在时钟信号的作用下转为串行信号进行传输。系统首先进行复位,串行信号输出高阻态,一旦侦测到一个一位时钟周期的ld_l低脉冲,系统开启数据传输,当传送完毕后,系统返回IDLE状

    3、态,并继续等待下一次的ld_l的有效信号的到来。分析该波形图,可以看出,整个波形可以分为两个状态:等待状态和数据传输状态。状态切换通过侦测ld_l的低脉冲时钟和数据传输数量两个事件。9.1硬件线程的基本概念采用两段式状态机进行设计。其状态跳转代码如下:enum logic IDLE=1b0,TRANS=1b1 cs,ns;always_ff(posedge clk,negedge rst_)if(!rst_)cs=IDLE;else cs=ns;always_comb begin unique case(cs)IDLE:ns=!ld_l?TRANS:IDLE;TRANS:ns=(count_t

    4、o|!ld_l)?IDLE:TRANS;endcase end9.1硬件线程的基本概念从图可以看出,本例中的数据路径是串并转换的移位逻辑。具体的SystemVerilog代码如下。在时钟有效边沿下,把data_reg的最高位输出,同时把data_reg向右移动一位,最低位补1bz。ser_data=data_reg63;data_reg=data_reg62:0,1bz;9.1硬件线程的基本概念数据路径的功能:数据路径的功能:在有限状态机和外部信号的控制之下,系统会在TRANS状态下,进行计数和数据传输,并会输出响应的状态反馈给有限状态机,从而使得有限状态机能够根据内部状态而采取相应的动作。a

    5、ssign shift_en=(cs=TRANS)&ld_l;always_ff(posedge clk,negedge rst_)if(!rst_)begin ser_data=1bz;data_reg=data_in;end else if(shift_en)begin ser_data=data_reg63;data_reg=data_reg62:0,1bz;end else if(count_to|!ld_l)begin ser_data=1bz;data_reg=data_in;end在该代码中,ld_l是外部信号,用来控制数据路径的工作,因此称这些信号为控制信号控制信号。9.1硬件

    6、线程的基本概念 当数据路径的组合逻辑计算到某个程度时,会使某些信号有效,从而通知有效状态机判断是否进行状态跳转。这些信号称为状态信号。always_ff(posedge clk,negedge rst_)if(!rst_)begin count=6b0;end else if(shift_en)count+;assign count_to=(count=63);当数据路径进行数据移位时,计数器进行计数,当计数到63时,整个传输完毕,count_to有效,从而通知有限状态机进行状态跳转至IDLE状态。因此状态信号是数据路径中的组合逻辑信号进行运算后得出的结果。数据路径既可以是时序逻辑,如上述示例

    7、的移位操作,也可以是组合逻辑,如对数据进行加减乘除等组合运算,或者对收集到的数据进行CRC运算。always_comb unique case(op)AND:result=a&b;OR:result=a|b;BAND:result=&a;BOR:result=|b;endcase9.1硬件线程的基本概念module mem#(DWIDTH=8,DEPTH=256,AWIDTH=$clog2(DEPTH)(input logic AWIDTH-1:0 addr,input logic re,we,clk,inout tri DWIDTH-1:0 data);logic AWIDTH-1:0 mD

    8、EPTH;assign data=re?maddr:bz;always(posedge clk)if(we)maddr DEPTH2N-1。9.1硬件线程的基本概念 和有限状态机相似,硬件线程的算法描述不仅包含有限状态机的各种变量,还包含数据路径的变量集合。因此,整个算法描述如下:,;FSMDfX Z SV O P C R 其中,X表示系统的输入数据和控制变量,在上例中,X=ld_l,data_in;Z表示系统的输出数据和状态变量,在上例中,Z=ser_data;S表示有限状态机的状态,在上例中,S=IDLE,TRANS,其中初始状态为IDLE。表示有限状态机的跳变函数:X x S-S。它是输

    9、入信号和现态的函数。表示有限状态机的输出函数。它分为Mearly型状态机和Moore型状态。Mearly:X x S-Z;Moore:S-Z;V表示对数据路径进行计算时所使用的数据矢量和数组的变量,如data_reg。O表示数据路径采用的操作符集合,如+,-,,等 P表示采用的协议,通常采用文本描述或者波形描述 C表示驱动时钟 R表示全局复位信号9.1.2硬件线程的算法描述硬件线程的算法描述9.2 硬件线程的连接GRADUATION THESIS9.2 硬件线程的连接 CPLD/FPGA内会存在各种不同的硬件线程。硬件线程之间可以通过某种协议进行连接通信。如图所示。硬件线程1和硬件线程2和3都

    10、有连接,硬件线程3和硬件线程4相互连接。硬件线程1产生各种信息,并发给硬件线程2和硬件线程3,因此硬件线程1被称为生产者,而硬件线程2和硬件线程3被称为消费者。同样,对于硬件线程3和4来说,硬件线程3提供信息给硬件线程4,因此硬件线程3是生产者,硬件线程4是消费者。因此,在一个系统中,某个硬件线程既可以是生成者,也可以是消费者。硬件线程连接示意图9.2 硬件线程的连接 以FIFO为例,FIFO是一个先进先出队列,当FIFO为空时,它会发出请求信号给FIFO控制器,FIFO控制器确认该FIFO为空时,就会把写入使能信号WrEn有效,同时驱动data数据线有效。一旦FIFO快满的时候,FIFO将发

    11、出快满的状态信号通知FIFO控制器,FIFO控制器不再写入数据。因此,FIFO是一个硬件线程,FIFO控制器为一个硬件线程。其示意图如下。FIFO写数据示意图9.2 硬件线程的连接 具体分析此连接,但Empty有效时,FIFO请求FIFO控制器发送数据,FIFO控制器输出写使能有效,同时传送数据给FIFO,在这一过程中,FIFO控制器产生数据,因此是生产者,而FIFO是请求数据,并接收数据,因此是消费者。同时,FIFO控制器在传送数据的同时,一直在侦测Almost Full状态信号是否有效,也就是说,FIFO接收数据的同时,也会根据自身的容量是否饱和而发出Almost Full信号,因此在这一

    12、过程中,FIFO控制器处于被动接收数据的状态,而FIFO处于主动发送信号状态,因此FIFO是生产者,而FIFO控制器为消费者。在CPLD/FPGA中,硬件线程之间通过控制信号进行握手并传递数据和状态的动作,称为协议。协议包括数据传输以及各种控制信号,如本例中的Emtiy和Almost Full等信号。9.3 硬件线程的同步GRADUATION THESIS9.3 硬件线程的同步 当硬件线程进行通信时,线程之间需要知道各自对方的状态信息,并根据对方的状态接收、发送控制命令或者状态信息,传送数据等,因此进程之间需要进行状态同步。通常采用wait状态进行同步。所谓的wait状态,就是当外部输入信号无

    13、效时,硬件线程会一直停留在该状态,一旦有效,则跳出该状态,进入下一个状态。在状态跳转图中,一般采用弧形箭头表示。如下图所示。Wait状态示意图9.3 硬件线程的同步 改写状态跳转图改写状态跳转图 线程A在运行过程中,当跳转至状态START时,会把ld_l拉低,同时跳转至REV_DATA状态,等待接收数据。线程B一开始就处于等待状态,如果ld_l没有拉低,则一直等待,当ld_l有效时,线程B跳出等待状态,进入TRANS状态。因此,线程A和B会在ld_l有效的下一个时钟的有效边沿的作用下,同时跳出START和IDLE状态,并同时进入REV_DATA和TRANS状态。这样,线程A和B到达START状

    14、态和IDLE状态可能时间不同,但通过ld_l信号可以让线程A和B同时跳出,因此这就叫做状态同步。同步后的两个线程无需外部控制信号进行协助,可以各自独立工作,并且知道对方的工作态度。如线程B在TRANS状态时,会把并行64位数据转换成串行数据,在64个时钟的有限边沿作用下,一一传送出去。而线程A同时处于REV_DATA状态,因此会在同一个时钟边沿接收到来自线程A的数据,并进行处理。A和B之间无需额外的通信。9.3 硬件线程的同步 当两个硬件线程进行连接通信时,可以上图一样单个硬件线程中存在等待,当多个硬件线程同时进行通信时,如在高密度服务器中,节点服务器和RCM中的控制器之间的通信。硬件线程之间

    15、的同步示意图9.3 硬件线程的同步 节点服务器需要发送请求信号给RCM控制器并等待来自RCM控制器的应答信号,只有应答信号有效,节点服务器和MCU之间才可以进行通信。整个通信模型如下图所示。当进程A运行到REQ_SEND状态时,发出REQ_N请求信号并等待GNT_N信号的到来,一旦GNT_N信号有效,则跳出该状态,同时进程B运行到GNT_SEND状态时,将等待有效的REQ_N信号,一旦有效,就发出GNT_N的有效信号,同时跳出该状态。硬件进程双边等待状态示意图9.3 硬件线程的同步 尽管进程A和B进入REQ_SEND和GNT_SEND的状态的时间不同,但通过REQ_N和GNT_N两个信号进行同

    16、步,它们跳出该状态的时间相同,从而实现了状态同步。如下图所示 一旦两个状态同步,在特定的条件下,后续的状态可以持续同步,这种同步称之为lock-step同步。状态同步示意图9.3 硬件线程的同步 如下图所示,当线程A和线程B从REQ_SEND和GNT_SEND同时跳出时,会同时进入A1和B1状态,因此,当线程A在状态A1时,线程B将处于B1状态,当处于A2状态时,线程B处于B2状态,当处于A3状态时,线程B处于B3状态。线程A和B无需控制信号的交互,就可以知道对方的状态,直到遇到如下情形:线程的某个状态为数据驱动型的循环 线程的某个状态为条件分支语句 或者该线程的某个状态还需要等待其他状态跳转

    17、条件 Lock-step同步示意图9.3 硬件线程的同步 修改Lock-step同步示意图如下,在线程B1和B3之间增加了一个条件状态B4,如果在B1状态出现B的条件,则跳转至B2状态,如果出现C的条件,则跳转至B4状态。则线程A和线程B在REQ_SEND和GNT_SEND状态同步后,进入A1和B1状态。单方向锁定的硬件线程同步示意图9.4 实例:基于串并转换的硬件线程连接实现GRADUATION THESIS9.4基于串并转换的硬件线程连接实现 基于应答响应串并转换的通信时序波形图如下并串转换波形示意图9.4基于串并转换的硬件线程连接实现线程连接示意图根据该波形示意图,硬件线程连接如下9.4

    18、基于串并转换的硬件线程连接实现 Master_Interface硬件线程主要的工作包括:侦测来自Slave的请求和ID信号并发送给Master,侦测来自Master的应答信号,并接收来自Master的数据并提示Slave接收到的数据类型,发送应答信号给Slave,串并转换发送数据给Slave,结束应答并等待来自Slave的请求信号失效。整个设计分为五个状态:MAME,其中MA为系统初始状态,一旦异步复位,系统就进入MA状态。MA、MB、MD和ME为Wait状态,其中MA、MD和ME用于和Slave_Interface同步,MB用于和Master线程之间的状态同步 硬件线程主要通过外部的REQ_

    19、N,Grant信号进行控制,并输出ld_dataUp、ld_datalo、shift_en、count_to、RequestM、short_data和 GNT_N等状态信号。9.4.1Master_Interface硬件线程介绍硬件线程介绍9.4基于串并转换的硬件线程连接实现Master_Interface硬件线程状态跳转图9.4基于串并转换的硬件线程连接实现 在MB到MD状态中,Master_Interface硬件线程采集来自Master线程的数据,并串行输出给Slave端,整个数据路径设计如下Master_Interface数据路径9.4基于串并转换的硬件线程连接实现 Slave_Inte

    20、rface硬件线程主要的工作与Master_Interface硬件线程一一对应,包括:侦测来自Slave线程的请求信号,并取反后连同Slave ID信号发送给Master_Interface线程,侦测来自Master端的应答信号,一旦侦测到,启动串并转换逻辑接收数据,数据接收完毕,对数据进行分组发给Slave,传输完毕后,等待来自Slave的请求信号失效,并通知Master端。硬件线程主要通过外部的RequestS,GNT_N和short_data信号进行控制,并输出REQ_N、data_latch_en、shift_en、par_data_en等状态信号。整个设计分为五个状态:SASE,其中

    21、SA为系统初始状态吗,一旦异步复位,系统就进入SA状态。9.4.2Slave_Interface硬件线程介绍硬件线程介绍9.4基于串并转换的硬件线程连接实现Slave_Interface状态跳转示意图9.4基于串并转换的硬件线程连接实现 Slave_Interface数据路径 和Master_Interface线程的数据路径不同,Slave_Interface线程的数据路径需要采集数据并进行数组切分,对应的是SC和SD状态,在SC状态,串行数据ser_data在控制信号shift_en的作用下,由低到高传入64位并行寄存器。9.4基于串并转换的硬件线程连接实现9.4.3代码代码实现实现 1.顶

    22、层模块为行为级描述,对master_interface和slave_interface直接例化,同时生成全局时钟和全局异步复位信号。2.master_interface硬件线程的描述,采用SystemVerilog语言进行硬件线程的设计。3.Slave_Interface硬件线程的介绍,采用SystemVerilog语言对该硬件线程进行设计。4.整体程序设计如上。为验证此设计是否准确,在顶层模块中加入仿真程序,采用task设计,写入数据32haa_bb_cc_dd,验证slave_interface线程在4个时钟节拍下是否会依次输出aa,bb,cc和dd。9.4基于串并转换的硬件线程连接实现

    23、采用Modelsim进行仿真,仿真结果如下,从波形中可以看出整个设计的逻辑和功能满足设计要求。基于串并转换的硬件线程仿真波形图9.5异步硬件线程的连接GRADUATION THESIS9.5异步硬件线程的连接 异步硬件线程可以采用多种连接方式进行连接。一种方式是采用两个缓冲器进行连接。乒乓操作示意图 采用两个缓冲器,硬件线程生产者把数据送至A缓冲器的同时,消费者读取B缓冲器,当数据存储到A缓冲器完毕后,生产者切换数据线至B缓冲器,同时消费者从A缓冲器中读取数据,如此循环反复。这样不仅可以解决异步连接问题,而且可以提高数据传输效率。这也称之为“乒乓操作”。9.5异步硬件线程的连接 这种方式仅适合

    24、数据量比较少的情况,如果数据量比较大,特别是在某一时刻突然爆发,这种方式不太适合。替代的方式是采用队列来进行。常见的队列是FIFO。FIFO是先进先出队列。现有的FPGA/CPLD平台,一般可以通过直接调用IP的形式直接调用FIFO IP,简单、直接、方便。也可以采用SystemVerilog语言直接描述一个任意数据宽度和数据深度的FIFO。参考代码基于RAM来实现FIFO,其最关键在于读写地址互相与写读时钟域进行同步,并通过格雷码的特性进行空和满的判断。除了以上两个方式,还可以通过CPLD/FPGA内嵌的RAM等方式实现异步硬件线程的连接。读者可以自行参考各自平台的CPLD/FPGA进行具体

    25、设计。9.6 接口GRADUATION THESIS9.6 接口 随着IC设计复杂度的提高,模块间、硬件线程之间的互连变得更为复杂,SystemVerilog新增了一个新的数据类型接口来确保硬件线程能够准确和其他硬件线程之间的正确连接和通信。接口采用关键字interface表示,并以endinterface结束。表示硬件线程之间的连线的结构。但接口不仅仅是连线组合,它还可以定义通信协议,以及协议校验和其他检验程序,同时也支持initial和always等语句块,并且支持各种task和function。接口为硬件模块的端口提供了一个标准化的封装方式,和模块的定义很相似,可以包含类型声明、任务、函

    26、数、过程语句、语句块和断言等。但接口独立于模块,不可以有设计层次,接口不可以包含模块或原语的实例,接口可以用于模块端口,模块端口内不可以使用模块。接口中可以包含modport表示连接到接口的模块的访问接口的方向,但模块没有此关键字。接口还为模块间连接提供了紧凑型的连接结构。接口简介接口简介9.6 接口 接口可以拥有端口,并且这些端口是接口所描述的一组信号的一部分,这些端口通常是时钟、复位以及测试信号等,接口可以包含Verilog和SystemVerilog中任何类型的声明。如定义一个简单的存储接口:interface membus(input logic clk);logic WrEn;log

    27、ic RdEn;logic mrdy;logic 31:0 addr;logic 63:0 comi_data;logic 63:0 cimo_data;endinterface 简单的存储接口示例 在该接口定义中,首先声明了接口名称为membus,接着定义了专门的输入时钟端口,并且声明了存储总线通信的信号,包括写使能、读使能、数据准备好信号、地址信号以及数据信号等。整个接口以interface开始,并且以endinterface结束。9.6.1接口声明和例化接口声明和例化9.6 接口 接口可以例化,其例化的方式和模块一样。可以使用简化的端口连接.name和.*来实现。如该存储接口进行例化如下

    28、:module top;logic clk;logic WrEn,RdEn;logic mrdy;logic 31:0 addr;logic 63:0 comi_data,cimo_data;membus mb(.*);endmodule简单的存储接口例化示例9.6 接口9.6.2modportinterface membus(input logic clk);logic WrEn;logic RdEn;logic mrdy;logic 31:0 addr;logic 63:0 comi_data;logic 63:0 cimo_data;modport CPU(input clk,mrdy,

    29、cimo_data,output WrEn,RdEn,addr,comi_data);m o d p o r t M E M(i n p u t c l k,WrEn,RdEn,addr,comi_data,output mrdy,cimo_data);endinterface 采用modport实现的接口示例 接口内定义了两个modport,分别是CPU和MEM,其中CPU作为主设备往MEM读写数据。Modport声明只是使互相连接的模块将信号看成是input、output、inout还是ref等。9.7 采用接口实现SGPIO的数据传送GRADUATION THESIS9.7 采用借口实现

    30、SGPIO的数据传送9.7.1SGPIO简介简介 SGPIO总线是一类为布线资源紧张而采用的一类总线,通常会由总线发起者master和接收者slave组成,master和slave一一对应。整体结构图如下。其中黑色方框表示接口。接口的输入信号为clk和rst_。SGPIO总线接口示意图9.7 采用借口实现SGPIO的数据传送 SGPIO总线能够通过较少的走线在时钟的作用下把大量的并行数据串行传送给接收端,从而实现数据通信。其基本的接口信号如下信号名称信号名称功能描述功能描述clk全局时钟信号,上升沿有效rst_全局复位信号,低电平有效ld_SGPIO帧开始信号,低脉冲有效data串行传输信号,

    31、从master串行传输信号给slave SGPIO接口信号及功能介绍9.7 采用借口实现SGPIO的数据传送 在时钟上升沿的作用下,系统不断的侦测ld_信号是否有效,如果有效,则启动数据传输,否则一直等待。当ld_有效时,data数据线的数据就开始传输,接着ld_无效,但master内部的并行数据将会在时钟上升沿的作用下一直传输下去,直到数据传输完毕完整。Slave一旦侦测到ld_有效,就可以接收数据,并按照和master约定的数量(本例采用32位数据进行传输)进行时钟计数,当接收到约定数量的数据时,把接收的数据转为并行数据传输给上层。整个总线由rst_全局复位信号进行复位。其基本协议时序图如

    32、下:SGPIO总线时序图9.7 采用借口实现SGPIO的数据传送 9.7.2SGPIO程序设计程序设计 通过分析SGPIO总线协议,整个SGPIO总线采用四层结构,分别为三个接口和三个模块。其中底层为master和slave之间的物理信号接口sgpio_if,第二层分别为master和slave接口master_if和slave_if,第三层为master的数据驱动层master模块和slave的数据接收器slave模块,最后以顶层模块top模块进行封装。整体程序结构如下。SGPIO程序结构图9.7 采用借口实现SGPIO的数据传送SGPIO程序仿真结果波形图 采用Modelsim软件对SGP

    33、IO程序进行仿真。若整个设计功能正常,满足设计要求,则仿真结果如下图本章小结 本章主要讲述了硬件线程的基本概念以及如何实本章主要讲述了硬件线程的基本概念以及如何实现硬件线程的连接和同步。同时重点介绍了现硬件线程的连接和同步。同时重点介绍了SystemVerilog的一个新的接口类型的一个新的接口类型interface以及在以及在interface接口内的新结构体接口内的新结构体modport。并采用各种不。并采用各种不同的实例分别阐述硬件线程的设计以及接口的设计。同的实例分别阐述硬件线程的设计以及接口的设计。从从9.7中可以看出,采用接口和硬件线程的中可以看出,采用接口和硬件线程的SystemVerilog程序设计,整个设计将呈现严谨的结程序设计,整个设计将呈现严谨的结构分层,并且可以有继承的特性,因此,构分层,并且可以有继承的特性,因此,SystemVerilog也继承了面向对象程序设计的优点。也继承了面向对象程序设计的优点。后续章节,将针对该特性进行重点阐述。后续章节,将针对该特性进行重点阐述。谢谢THANK YOU

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《CPLD FPGA设计与应用基础教程》课件第九章.ppt
    链接地址:https://www.163wenku.com/p-5716102.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库