FPGA设计时序收敛_第1页
FPGA设计时序收敛_第2页
FPGA设计时序收敛_第3页
FPGA设计时序收敛_第4页
FPGA设计时序收敛_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

FPGA设计时序收敛天津工业大学-Xilinx

王巍

wangweibit@163.com2007年Xilinx联合实验室主任会议主要内容时序约束的概念时序收敛流程时序收敛流程-代码风格时序收敛流程-综合技术时序收敛流程-管脚约束时序收敛流程-时序约束时序收敛流程-静态时序分析时序收敛流程-实现技术时序收敛流程-FloorPlanner和PACE2/2/20232提高设计的工作频率通过附加约束可以控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时,从而提高工作频率。获得正确的时序分析报告FPGA设计平台包含静态时序分析工具,可以获得映射或布局布线后的时序分析报告,从而对设计的性能做出评估。静态时序分析工具以约束作为判断时序是否满足设计要求的标准。指定FPGA引脚位置与电气标准FPGA的可编程特性使电路板设计加工和FPGA设计可以同时进行,而不必等FPGA引脚位置完全确定,从而节省了系统开发时间。通过约束还可以指定I/O引脚所支持的接口标准和其他电气特性。附加约束的基本作用2/2/20233周期(PERIOD)指参考网络为时钟的同步元件间的路径,包括:flip-flop、latch、synchronousRAM等。 周期约束不会优化以下路径:从输入管脚到输出管脚之间的路径纯组合逻辑从输入管脚到同步元件之间的路径从同步元件到输出管脚的路径周期约束路径示意图周期约束2/2/20234周期约束是一个基本时序和综合约束,它附加在时钟网线上,时序分析工具根据周期约束检查与同步时序约束端口(指有建立、保持时间要求的端口)相连接的所有路径延迟是否满足要求(不包括PAD到寄存器的路径)。周期是时序中最简单也是最重要的含义,其它很多时序概念会因为软件商不同略有差异,而周期的概念却是最通用的,周期的概念是FPGA/ASIC时序定义的基础概念。后面要讲到的其它时序约束都是建立在周期约束的基础上的,很多其它时序公式,可以用周期公式推导。在附加周期约束之前,首先要对电路的时钟周期有一定的估计,不能盲目上。约束过松,性能达不到要求,约束过紧,会大大增加布局布线时间,甚至效果相反。周期约束2/2/20235周期约束的计算设计内部电路所能达到的最高运行频率取决于同步元件本身的建立保持时间,以及同步元件之间的逻辑和布线延迟。时钟的最小周期为:

Tperiod=Tcko+Tlogic+Tnet+Tsetup-Tclk_skewTclk_skew=Tcd1-Tcd2其中Tcko为时钟输出时间,Tlogic为同步元件之间的组合逻辑延迟,Tnet为网线延迟,Tsetup为同步元件的建立时间,Tclk_skew为时钟信号偏斜。周期约束2/2/20236附加周期约束的一个例子:

NETSYS_CLKPERIOD=10nsHIGH4ns这个约束将被附加到SYS_CLK所驱动的所有同步元件上。PERIOD约束自动处理寄存器时钟端的反相问题,如果相邻同步元件时钟相位相反,那么它们之间的延迟将被默认限制为PERIOD约束值的一半。反相时钟周期约束问题的例子周期约束2/2/20237偏移约束指数据和时钟之间的约束,偏移约束规定了外部时钟和数据输入输出引脚之间的时序关系,只用于与PAD相连的信号,不能用于内部信号。偏移约束示意图偏移约束2/2/20238偏移约束优化以下时延路径从输入管脚到同步元件偏置输入(OFFSETIN)从同步元件到输出管脚偏置输出(OFFSETOUT)为了确保芯片数据采样可靠和下级芯片之间正确的交换数据,需要约束外部时钟和数据输入输出引脚之间的时序关系。偏移约束的内容的时刻,从而保证与下一级电路的时序关系。告诉综合器、布线器输入数据到达的时刻,或者输出数据稳定。偏移约束2/2/20239OFFSET_IN_BEFORE说明了输入数据比有效时钟沿提前多长时间准备好,于是芯片内部与输入引脚的组合逻辑延迟就不能大于该时间(上限,最大值),否则将发生采样错误。OFFSET_IN_AFTER指出输入数据在有效时钟沿之后多长时间到达芯片的输入引脚,也可以得到芯片内部延迟的上限。

偏移约束2/2/202310输入到达时间计算时序描述

OFFSET_IN_AFTER定义的含义是输入数据在有效时钟沿之后的Tarrival时刻到达。即:

Tarrival=Tcko+Toutput+Tlogic

综合实现工具将努力使输入端延迟Tinput满足以下关系:Tarrival+Tinput+Tsetup<Tperiod其中Tinput为输入端的组合逻辑、网线和PAD的延迟之和,Tsetup为输入同步元件的建立时间,Tcko为同步元件时钟输出时间。偏移约束2/2/202311例子:假设Tperiod=20ns,Tcko=1ns,Toutput=3ns,Tlogic=8ns,请给出偏移约束。偏移约束Tarrival=Tcko+Toutput+Tlogic=12ns,使用OFFSET_IN_AFTER进行偏移约束为:

NETDATA_INOFFSET=IN12nsAFTERCLK

也可以使用OFFSET_IN_BEFORE进行偏移约束,它们是等价的:

NETDATA_INOFFSET=IN8nsBEFORECLK

2/2/202312OFFSET_OUT_BEFORE指出下一级芯片的输入数据应该在有效时钟沿之前多长时间准备好。从下一级的输入端的延迟可以计算出当前设计输出的数据必须在何时稳定下来,根据这个数据对设计输出端的逻辑布线进行约束,以满足下一级的建立时间要求,保证下一级采样数据稳定。OFFSET_OUT_AFTER规定了输出数据在有效时钟沿之后多长时间(上限,最大值)稳定下来,芯片内部的输出延迟必须小于这个值。偏移约束2/2/202313计算要求的输出稳定时间定义:Tstable=Tlogic+Tinput+Tsetup只要当前设计输出端的数据比时钟上升沿提前Tstable时间稳定下来,下一级就可以正确采样数据。实现工具将会努力使输出端的延迟满足以下关系:

Tcko+Toutput+Tstable<Tperiod这个公式就是Tstable必须要满足的基本时序关系,即本级的输出应该保持怎么样的稳定状态,才能保证下级芯片的采样稳定。偏移约束2/2/202314例子:设时钟周期为20ns,后级输入逻辑延时Tinput为4ns、建立时间Tsetup为1ns,中间逻辑Tlogic的延时为8ns,请给出设计的输出偏移约束。答案:OFFSET_OUT_BEFORE偏移约束为:

NETDATA_OUTOFFSET=OUT13ns

BEFORECLKOFFSET_OUT_AFTER约束:

NETDATA_OUTFFSET=OUT

7ns

AFTERCLK偏移约束2/2/202315Giventhesystemdiagrambelow,whatvalueswouldyouputintheConstraintsEditorsothatthesystemwillrunat100MHz?(Assumenoclockskewbetweendevices)4ns5nsUpstreamDeviceDownstreamDevice偏移约束2/2/202316Path-SpecificTimingConstraintsUsingglobaltimingconstraints(PERIOD,OFFSET,andPAD-TO-PAD)willconstrainyourentiredesignUsingonlyglobalconstraintsoftenleadstoover-constraineddesignsConstraintsaretootightIncreasescompiletimeandcanpreventtimingobjectivesfrombeingmetReviewperformanceestimatesprovidedbyyoursynthesistoolorthePost-MapStaticTimingReportPath-specificconstraintsoverridetheglobalconstraintsonspecifiedpathsThisallowsyoutoloosenthetimingrequirementsonspecificpaths2/2/202317Areasofyourdesignthatcanbenefitfrompath-specificconstraintsMulti-cyclepathsPathsthatcrossbetweenclockdomainsBidirectionalbusesI/OtimingPath-specifictimingconstraintsshouldbeusedtodefineyourperformanceobjectivesandshouldnotbeindiscriminatelyplacedPath-SpecificTimingConstraints2/2/202318Path-SpecificTimingConstraints2/2/202319Path-SpecificTimingConstraints2/2/202320假设要做一个32位的高速计数器,由于计数器的速度取决于最低位到最高位的进位延迟,为了提高速度采用了预定标计数器的结构,也就是把计数器分成一个小计数器和一个大计数器,如图所示。其中小计数器是两位的,大计数器是30位,它们由同一时钟驱动。大计数器使能端EN受小计数器进位驱动,小计数器每4个CLK进位一次,使EN持续有效一个CLK的时间,此时有效时钟沿到来大计数器加1。可见,小计数器的寄存器可能每个CLK翻转1次,低位寄存器输出的数据必须在1个CLK内到达高位寄存器的输入端,即寄存器之间的最大延时为1个CLK。而大计数器内部的寄存器每4个时钟周期才可能翻转一次,低位寄存器输出的数据在4个CLK内到达高位寄存器的输入端即可,即寄存器之间的最大延迟为4个CLK,因此降低了计数器的时序要求,可以实现规模较大的高速计数器。预定标计数器Path-SpecificTimingConstraints2/2/202321约束文件Path-SpecificTimingConstraints2/2/202322UsethePadtoSetupandClocktoPadcolumnstospecifyOFFSETsforallI/Opathsoneachclockdomain.EasiestwaytoconstrainmostI/OpathsHowever,thiscanleadtoanover-constraineddesignUsethePadtoSetupandClocktoPadcolumnstospecifyOFFSETsforeachI/OpinUsethistypeofconstraintwhenonlyafewI/OpinsneeddifferenttimingPath-pinoffsetTimingConstraints2/2/202323FalsepathsConstraintsIfaPERIODconstraintwereplacedonthisdesign,whatdelaypathswouldbeconstrained?Ifthegoalistooptimizetheinputandoutputtimeswithoutconstrainingthepathsbetweenregisters,whatconstraintsareneeded?AssumethataglobalPERIODconstraintisalreadydefined2/2/202324TimingConstraintPriorityFalsepathsMustbeallowedtooverrideanytimingconstraintFROMTHRUTOFROMTOPin-specificOFFSETsGroupOFFSETsGroupsofpadsorregistersGlobalPERIODandOFFSETsLowestpriorityconstraints2/2/202325主要内容时序约束的概念时序收敛流程时序收敛流程-代码风格时序收敛流程-综合技术时序收敛流程-管脚约束时序收敛流程-时序约束时序收敛流程-静态时序分析时序收敛流程-实现技术时序收敛流程-FloorPlanner和PACE2/2/202326

设计完成后,如何判断一个成功的设计?设计是否满足面积要求---是否能在选定的器件中实现。设计是否满足性能要求---能否达到要求的工作频率。管脚定义是否满足要求---信号名、位置、电平标准及数据流方向等。时序收敛流程2/2/202327如何判断设计适合所选芯片?所选芯片是否有足够的资源容纳更多的逻辑?如果有,有多少?如果适合所选芯片,能否完全成功布通?

手段:查看MapReport

或者Place&RouteReport时序收敛流程2/2/202328ProjectNavigator产生两种时序报告:Post-MapStaticTimingReportPost-Place&RouteStaticTimingReport时序报告包含没有满足时序要求的详细路径的描述,用于分析判断时序要求没有得到满足的原因。TimingAnalyzer用于建立和阅读时序报告。时序收敛流程2/2/202329合理的性能约束的依据Post-MapStaticTimingReport包括:实际的逻辑延迟和(blockdelays)和0.1ns网络延迟(netdelays)合理的时序性能约束的原则:60/40原则Iflessthan60percentofthetimingbudgetisusedforlogicdelays,thePlace&Routetoolsshouldbeabletomeettheconstrainteasily.Between60to80percent,thesoftwareruntimewillincrease.Greaterthan80percent,thetoolsmayhavetroublemeetingyourgoals.时序收敛流程2/2/202330时序收敛流程2/2/202331性能突破只要三步:1.充分利用嵌入式(专用)资源DSP48,PowerPCprocessor,EMAC,MGT,FIFO,blockRAM,ISERDES,andOSERDES,等等。2.追求优秀的代码风格UsesynchronousdesignmethodologyEnsurethecodeiswrittenoptimallyforcriticalpathsPipeline(XilinxFPGAshaveabundantRegisters)3.充分利用synthesis工具和Place&Route工具参数选择TrydifferentoptimizationtechniquesAddcriticaltimingconstraintsinsynthesisPreservehierarchyApplyfullandcorrectconstraintsUseHigheffort时序收敛流程2/2/202332时序收敛流程Useembeddedblocks2/2/202333SimpleCodingStepsYield3xPerformanceUsepipelinestages-morebandwidthUsesynchronousreset-bettersystemcontrolUseFiniteStateMachineoptimizationsUseinferableresourcesMultiplexerShiftRegisterLUT(SRL)BlockRAM,LUTRAMCascadeDSPAvoidhigh-levelconstructs(loops,forexample)incodeManysynthesistoolproduceslowimplementations时序收敛流程2/2/202334SynthesisguidelinesUsetimingconstraintsDefinetightbutrealisticindividualclockconstraintsPutunrelatedclocksintodifferentclockgroupsUseproperoptionsandattributesTurnoffresourcesharingMoveflip-flopsfromIOBsclosertologicTurnonFSMoptimizationUsetheretimingoption时序收敛流程2/2/202335时序收敛流程ImpactofConstraints2/2/202336Place&RouteGuidelinesTimingconstraintsUsetight,realisticconstraintsRecommendedoptionsHigh-effortPlace&RouteBydefault,effortissettoStandardTiming-drivenMAPMulti-PassPlace&Route(MPPR)ToolstohelpmeettimingFloorplanning(UsethePACEandPlanAheadsoftwaretools)PhysicalsynthesistoolsOtheravailableoptions:IncrementaldesignModulardesignflows时序收敛流程2/2/202337时序收敛流程ImpactofConstraintsinTools2/2/202338主要内容时序约束的概念时序收敛流程时序收敛流程-代码风格时序收敛流程-综合技术时序收敛流程-管脚约束时序收敛流程-时序约束时序收敛流程-静态时序分析时序收敛流程-实现技术时序收敛流程-FloorPlanner和PACE2/2/202339代码风格使用同步设计技术使用Xilinx-Specific代码使用Xilinx提供的核使用层次化设计使用ISE产生的静态时序分析报告,找出时序关键路径,并进行优化2/2/202340主要内容时序约束的概念时序收敛流程时序收敛流程-代码风格时序收敛流程-综合技术时序收敛流程-管脚约束时序收敛流程-时序约束时序收敛流程-静态时序分析时序收敛流程-实现技术时序收敛流程-FloorPlanner和PACE2/2/202341使用综合工具提供的参数选项,尤其是constraint-driven技术,可以优化设计网表,提高系统性能为综合工具指定关键路径,综合工具可以提高工作级别,使用更深入的算法,减少关键路径延迟综合技术2/2/202342综合工具提供许多优化选择,以获得期望的系统性能和面积要求参考F1帮助信息或XSTUserguideRegisterDuplicationTiming-DrivenSynthesisTimingConstraintEditorFSMExtractionRetimingHierarchyManagementSchematicViewerErrorNavigationCross-ProbingPhysicalOptimization综合技术2/2/202343DQfn1DQfn1DQfn1High-fanoutnetscanbeslowandhardtorouteDuplicatingflip-flopscanfixbothproblemsReducedfanoutshortensnetdelaysEachflip-flopcanfanouttoadifferentphysicalregionofthechiptoreduceroutingcongestionDesigntrade-offsGainroutabilityandperformanceIncreasedesignareaIncreasefanoutofothernetsDuplicatingFlip-Flops综合技术2/2/202344Timing-DrivenSynthesisSynplify,Precision,andXSTsoftwareTiming-drivensynthesisusesperformanceobjectivestodrivetheoptimizationofthedesignBasedonyourperformanceobjectives,thetoolswilltryseveralalgorithmstoattempttomeetperformancewhilekeepingtheamountofresourcesinmindPerformanceobjectivesareprovidedtothesynthesistoolviatimingconstraints综合技术2/2/202345实施period约束和input/output约束(.xcf文件)通常,根据期望的性能目标进行1.5X-2X的过约束,综合工具会提高工作级别,有利于在实现中更容易满足时序目标切记:如果使用过约束,不要把这些约束传递给实现工具使用Multi-cycle和falsepaths约束使用Criticalpath约束,对Criticalpath进行优化综合技术Timing-DrivenSynthesis2/2/202346RetimingSynplify,Precision,andXSTsoftwareRetiming:ThesynthesistoolautomaticallytriestomoveregisterstagestobalancecombinatorialdelayoneachsideoftheregistersDQDQDQBeforeRetimingAfterRetimingDQDQDQ综合技术2/2/202347HierarchyManagementSynplify,Precision,andXSTsoftwareThebasicsettingsare:Flattenthedesign:AllowstotalcombinatorialoptimizationacrossallboundariesMaintainhierarchy:PreserveshierarchywithoutallowingoptimizationofcombinatoriallogicacrossboundariesIfyouhavefollowedthesynchronousdesignguidelines,usethesetting-maintainhierarchyIfyouhavenotfollowedthesynchronousdesignguidelines,usethesetting-flattenthedesignYoursynthesistoolmayhaveadditionalsettingsRefertoyoursynthesisdocumentationfordetailsonthesesettings综合技术2/2/202348HierarchyPreservationBenefitsEasilylocateproblemsinthecodebasedonthehierarchicalinstancenamescontainedwithinstatictiminganalysisreportsEnablesfloorplanningandincrementaldesignflowTheprimaryadvantageofflatteningistooptimizecombinatoriallogicacrosshierarchicalboundariesIftheoutputsofleaf-levelblocksareregistered,thereisnoneedtoflatten综合技术2/2/202349主要内容时序约束的概念时序收敛流程时序收敛流程-代码风格时序收敛流程-综合技术时序收敛流程-管脚约束时序收敛流程-时序约束时序收敛流程-静态时序分析时序收敛流程-实现技术时序收敛流程-FloorPlanner和PACE2/2/202350管脚约束管脚约束通常在设计早期就要确定下来,以保证电路板的设计同步进行对高速设计、复杂设计和具有大量I/O管脚的设计,Xilinx推荐手工进行管脚约束实现工具可以自动布局逻辑和管脚,但是一般来说不会是最优的管脚约束可以指导内部数据流向,不合理的管脚布局很容易降低系统性能合理的管脚布局需要对所设计系统和Xilinx器件结构的详细了解,如要考虑I/Obank、I/O电气标准等时钟(单端或差分)必须约束在专用时钟管脚注意:时钟资源数量的限制最后使用dual-purpose管脚(如配置和DCI管脚)2/2/202351根据数据流指导管脚约束用于控制信号的I/O置于器件的顶部或底部控制信号垂直布置用于数据总线的I/O置于器件的左部和右部数据流水平布置。以上布局方法可以充分利用Xilinx器件的资源布局方式进位链排列方式块RAM,乘法器位置管脚约束2/2/202352使用PACE进行管脚约束管脚约束2/2/202353主要内容时序约束的概念时序收敛流程时序收敛流程-代码风格时序收敛流程-综合技术时序收敛流程-管脚约束时序收敛流程-时序约束时序收敛流程-静态时序分析时序收敛流程-实现技术时序收敛流程-FloorPlanner和PACE2/2/202354时序约束如果实现后性能目标得到满足,则设计完成否则,施加特定路径时序约束施加multi-cycle,falsepath和关键路径约束,实现工具会优先考虑这些特定路径约束2/2/202355时序约束的概念时序收敛流程时序收敛流程-代码风格时序收敛流程-综合技术时序收敛流程-管脚约束时序收敛流程-时序约束时序收敛流程-静态时序分析时序收敛流程-实现技术时序收敛流程-FloorPlanner和PACE主要内容2/2/202356静态时序分析Post-map:Map后,使用Post-maptimingreport确定关键路径的逻辑延迟Post-PAR:PAR后,使用Post-PARstatictimingreport确定时序约束是否满足LogicdelayVs.Routingdelay:60%/40%原则TimingAnalyzer可以读取时序报告,查找关键路径,并与Floorplanner协同解决时序问题2/2/202357ReportExample静态时序分析2/2/202358AnalyzingPost-Place&RouteTimingTherearemanyfactorsthatcontributetotimingerrors,includingNeglectingsynchronousdesignrulesorusingincorrectHDLcodingstylePoorsynthesisresults(toomanylogiclevelsinthepath)InaccurateorincompletetimingconstraintsPoorlogicmappingorplacementEachrootcausehasadifferentsolutionRewriteHDLcodeAddtimingconstraintsResynthesizeorre-implementwithdifferentsoftwareoptionsCorrectinterpretationoftimingreportscanrevealthemostlikelycauseTherefore,themostlikelysolution静态时序分析2/2/202359静态时序分析Case12/2/202360PoorPlacement:SolutionsIncreasePlacementeffortlevel(orOveralleffortlevel)Timing-drivenpacking,iftheplacementiscausedbypackingunrelatedlogictogetherCross-probetotheFloorplannertoseewhathasbeenpackedtogetherThisoptioniscoveredinthe.AdvancedImplementationOptions.modulePARextraeffortorMPPRoptionsCoveredinthe.AdvancedImplementationOptions.moduleFloorplanningorRelativeLocationConstraints(RLOCs)ifyouhavetheskill静态时序分析2/2/202361静态时序分析Case22/2/202362HighFanout:SolutionsMostlikelysolutionistoduplicatethesourceofthehigh-fanoutnetthenetistheoutputofaflip-flop,thesolutionistoduplicatetheflip-flopUsemanualduplication(recommended)orsynthesisoptionsIfthenetisdrivenbycombinatoriallogic,locatingthesourceofthenetintheHDLcodemaybemoredifficultUsesynthesisoptionstoduplicatethesource静态时序分析2/2/202363静态时序分析Case32/2/202364TooManyLogicLevels:SolutionsTheimplementationtoolscannotdomuchtoimproveperformanceThenetlistmustbealteredtoreducetheamountoflogicbetweenflip-flopsPossiblesolutionsCheckwhetherthepathisamulticyclepathIfyes,addamulticyclepathconstraintUsetheretimingoptionduringsynthesistodistributelogicmoreevenlybetweenflip-flopsConfirmthatgoodcodingtechniqueswereusedtobuildthislogic(nonestediforcasestatements)Addapipelinestage静态时序分析2/2/202365时序约束的概念时序收敛流程时序收敛流程-代码风格时序收敛流程-综合技术时序收敛流程-管脚约束时序收敛流程-时序约束时序收敛流程-静态时序分析时序收敛流程-实现技术时序收敛流程-FloorPlanner和PACE主要内容2/2/202366使用更高级别的EffortLevel:可以提高时序性能,而不必采取其它措施(如施加更高级的时序约束,使用高级工具或者更改代码等)Xilinx推荐:第一遍实现时,使用全局时序约束和缺省的实现参数选项。如果不能满足时序要求:尝试修改代码,如使用合适的代码风格,增加流水线等修改综合参数选项,如OptimizationEffort,UseSynthesisConstraintsFile,KeepHierarchy,RegisterDuplication,RegisterBalancing等增加PAREffortLevelApplypath-specifictimingconstraintsforsynthesisandimplementationR&R参数选项:EffortLevel实现技术2/2/202367和PAR一样,可以使用Map-timing参数选项针对关键路径进行约束。如参数“Timing-DrivenPackingandPlacement”给关键路径以优先时序约束的权利。用户约束通过Translate过程从UserConstraintsFile(UCF)中传递到设计中。实现技术2/2/202368Timing-DrivenPackingTimingconstraintsareusedtooptimizewhichpiecesoflogicarepackedintoeachsliceNormal(standard)packingisperformedPARisrunthroughtheplacementphaseTiminganalysisanalyzestheamountofslackinconstrainedpathsIfnecessary,packingchangesaremadetoallowbetterplacementTheoutputofMAPcontainsbothmappingandplacementinformationThePost-MapStaticTimingReportcontainsm

温馨提示

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

评论

0/150

提交评论