DC经典入门问题_第1页
DC经典入门问题_第2页
DC经典入门问题_第3页
DC经典入门问题_第4页
DC经典入门问题_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~在综合中,ungroup命令可以去除系统的层次,有利于减小面积。我对比了在使用ungroup-all-flatten命令前后的Totalcellarea。在使用该命令之前Totalcellarea是102396,使用之后49663,减小了一半左右。时序部分也没有变差。那是不是综合脚本一般都要使用ungroup呢?请指教,谢谢。ungroup-all当然是能达到最大的优化力度啊,整体timing最好,

但是有时候会导致功能的变化,仿真没法过,比如某个hierboundary没了,

因此只是有限度的ungroup,比如-level3,全部ungroup打散后,没有boundary,一般功能是不会影响的,LEC来保证。但是function层次就没有了,比如对网表做一些verification,如STA时一些重要的点可能找不到了,如果还要debug的话几乎做不下去。

后端fix后某些点发现需要做functionECO,那么很可能也没法做了。另外ungroup也分具体情况也不是所有情况下就一定明显减小面积,我们一般是有选择地对个别一些联系紧密的module会ungroup,不过目的是为了打掉boundary得到更好的timing不是面积。

纯属个人理解LEC是logicalequivalentcheck,主要比较RTL和NETLIST,NETLIST和NETLIST的逻辑功能一致性。通常来说,synthesis以后,会把RTL和综合得到的netlist比较,以保证综合没有造成逻辑的错误。PR以后,也会做同样的check。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~如果你仿真都能通过,当然flat的网表也行啊,就是后面的debug和升级没法做,LEC和formality一样的,是cadence的形式验证工具,最近在做Lowpower的flow,使用UPF文件描述多电压域设计。在做综合的时候,把隔离单元的LEVELSHIFTER单元的库还有0.9v和1.08v的标准单元库都设置在target_library中,这个时候的operating_condition应该怎么设置呢?不同电压域是不是要设置不同的operating_condition?但是默认UPF模式的DC_SHELL又不支持set_poerating_condition中-object_list选项的设置,有哪位大侠跑通过用UPF的flow能不能帮忙指导一下?我觉得可能是环境没有搭好,但是又不知道从哪下手~非常感谢!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~请问DC综合后做STA时,需不需要把DC产生的SDF读入到PT中,读入和不读入对于PT,有什么区别,哪一种比较准确呢?

谢谢主要看你的SDF有没有延时信息,延时信息来自于哪里的,严格的说反标SDF是有用的,主要是看你的SDF的来源是否靠谱了。如果仅仅是dc出来的,那么是没有延时的,反标进去也就没有意义了.你所说的延时应该是PR之后的真正的版图延迟吗,DC后的延迟是有的,不过是基于线载模型预估的而已。是不是说没有真正的版图延迟就不用反标SDF到PT中,让PT基于线载模型进行计算分析,同样是基于线载模型分析,PT要比DC中的DesignTime分析时序更为精确?工程上我们一般不会用DC出来的sdf,PT分析所采用的也都是PR工具所提供的延迟信息,当然如果0.5u以上pr的结果和前端差异也就不会太大,所以设计迭代一般一遍也就OK。但0.18u不会这样理想,物理设计上的信息显得至关重要,所以PR的SOCENC也会基于连续收敛的时序引擎。还会有一种硅虚拟原型的设计方法,sdf的反标,PT分析,一般工程中也不会只signoff时才会做,在重要节点都会做。前提是你承认PT的结果是signoff的而用PT进行工程signoff个人理解,不知道全面不全面在做STA时,一般可是直接使用STARRC抽出的SPEF进行时序分析,使用PTreporttiming。有时候,为了得到更准确点的timing信息,需要用SDF反标到PT中,再reporttiming。当然反标是需要时间的解决了。DC后的PT不需要反标DC产生的SDF,DC后没有真实的布线,是基于线载模型。此时PT单独分析的时序和DC中的DesignTime分析的结果是一致的。有哪位大侠能详细讲一下set_max_transition的作用吗?在STA中有个很重要,要FIXSLEW方面的VIOLATION。

这个set_max_transition就是设定SLEW上的constrain。设置波形从10%到90%所需要的时间

对延迟和功耗都有影响厂家提供的库中,cell延迟的值一般是通过二维非线性查找表来得到,

表的两个index分为inputtransition,loadcapacitance,如果index得值在表内,

延迟值不需要计算,如果不在表内,则需要通过内插或外插来计算,这相应的带来了误

差,内插的误差和外插相比小得多,如果外插计算时的index超出查找表的范围过大,

计算出的数值也就没有意义,所以库中一般都有defaultmax_transitin,也可以放它们全都过去,但是在MUX后面把它们之间set_false_path

Q1.6巧妙定义时钟

直接在分频FF的Q端定义generatedclock时,有时会把分频FF的时序打掉,解决办法是在分频FF的Q端加一个时钟buf,从那个buf的输出端定义generatedclock,从而保证分频FF自身的时序完整

如果从sourceclock到generatedclock之间有多条路径,你希望PT用指定的一条路径来计算时序的话,可以用set_case_analysis,set_disbale_timing或者一级一级地定义generatedclock来引导PT达到你的要求

分频器时序约束问题

时序分析中同一时钟的不同路径问题

请教如下要求的clock在pt中应该怎么create

怎样设set_case或者别的,才能让pt选择同一条clockpath

Q1.7什么时候需要设置latency?

latency分为sourcelatency和networklatency两种。sourcelatency是源时钟自带的,networklatency就是CTS后的clocktreeinsertiondelay。

在综合时,一般不需要latency,

除非,

已知不同clock带有不同的sourcelatency,并且它们之间有时序要求

预知不同clock会有不同的clocktreeinsertiondelay,不想平衡它们,但是要满足他们之间的时序要求

做完CTS后,要把networklatency去掉

请问set_clock_latency设太大会有什么不好

Q1.8如何设置uncertainty

clockuncertainty分为setup和hold,preCTS和postCTS几种不同的情况

一般的处理原则是:

preCTS,setup:uncertainty=PLLjitter+预估的clockskew

preCTS,hold:uncertainty=预估的clockskew

postCTS,set_propagate_clock[all_clocks]

postCTS,setup:uncertainty=PLLjitter

postCTS,hold:uncertainty=0

有时fundry要求holduncertainty保留一定的量,这时就把那个保留量加到上面的公式中

sdc文件中对clk的uncertainty、transition、latency的设置

(2)IO端口的约束

Q2.1如何加IO端口的约束?

最普通的方法是

对输入端,set_input_delay,set_driving_cell(也有用set_input_transition的,但是不多见)

对输出端,set_output_delay,set_load

对时钟端,set_clock_transition

dc综合时的clocktransition应该参考什么设定?

set_drive,set_load

Q2.2哪些端口不需要约束?

静态信号可以set_false_path,比如reset,test_mode,function_mode_select

不能真的什么约束都不加

Q2.3什么样的reset信号可以set_false_path?

如果在工作时,reset信号有效时,时钟信号不翻转,就可以set_false_path

如果reset信号动作时,时钟也有动作的话,就不能set_false_path

Q2.4像reset那样的highfanout信号需要设定为idealnet吗?

如果是falsepath的话,可以设为idealnet

一般不需要设为idealnet,让DC加入buffertree后,有利于估算功耗和面积

Q2.5如果有一组输出信号,需要他们之间对齐,但是不太在乎有多大的延迟,这时应该如何约束?

如果有输出时钟的话,在那个输出时钟端口定义一个generated_clock,其它信号的output_delay都相对于这个generated_clock而定。只要有max和min,就可以把所有信号卡在一个范围之内

如果没有输出时钟的话,用set_output_delay-reference_pin

Q2.6如何计算input和outputdelay?

如果是block的input和outputdelay,可以预先分配,比如输出端,输入端各1/3,中间的连接1/3

block的端口最好都flop-in,flop-out

如果是chipIO,要度其他芯片的IO时序和电路板上面的延迟,比较麻烦

set_input_delay的时间设置

(3)DRV

DRV有时也加DRC,与物理检测的DRC不是一个概念

DRV包括,

set_max_transition与工艺相关,65nm的话,在0.6ns左右

set_max_fanout与工艺相关,一般在12~20之间

set_max_capacitance

set_max_power

set_max_area

(4)falsepath,multicyclepath

Q4.1什么情况下需要set_false_path?

异步时钟之间,

到meta-stability的第一个FF路径,

静态信号

Q4.2何时会用到multicycle_path?

太长的path,

不会每个周期都变的信号

注意:在RTL中,前端一定要多周期工作一次的功能

一般set_multicycle_path-setup<n周期>

要同时写set_multicycle_path-hold<n-1周期>

(5)wireloadmodel

wireloadmodel是一种简单地根据fanout来估算wiredelay的方法,在综合时,一般根据设计的大小选择对应的WLM

有时也会用zerowireloadmodel,这时的clockperiod要相应减小15~25%,或者clockuncertainty增加15~25%

set_wire_load_model两种模式top和enclosed到底有什么区别?

更加准确的计算wiredelay的方法是DCtopo和RCphysical,

他们在综合时会粗略地做个place,然后根据距离来计算延迟

(6)clockgating

Q6.1如何加clockgating?

局部的clockgating在综合时,会自动加进去。加clockgating后,不但会减小功耗,还会改善时序,因为本来到D端的逻辑,一部分被移到CK端了,简化了D端的逻辑

整个block的clockgating,一般直接在RTL里面加,因为DC没有那么聪明

Q6.2需要对clockgating加什么特别的约束吗?

如果使用标准库里面的ICG单元,不需要附加任何特别的约束,前后端的工具都认得它

如果用latch+and自己搭的clockgating,你要对那个and单元set_disable_clock_gating_check,还要告诉后端,一定把latch和and摆在一起

一般只在没有动态切换时钟时,才可以用一个and/or做clockgating,这时也要set_disable_clock_gating_check

clockgatingcell约束

某个domain的clk通过gating关断重启后,对这个domain做复位有没有必要?

(7)case_analysis

set_case_analysis可以强制某个node为0/1

这个0/1会沿着纯逻辑组合单元向前传送,如果没有特别设定的话,会停在时序单元上

注意,只是是向前传,不会向左右2边和向后传

举例:

如果设在输出端上,那么所有fanin端都会被强制为0/1

如果只设在某个输入端上,与之相连的输出端和其他输入端都不受影响

(8)idealnet/network

ideal_net只作用于这条net

ideal_network会把这个属性传送下去

clocknet自动带有idealnet属性

其他net,何时需要设定idealnet?见Q2.4综合脚本的样本现在到处都是,最好找一个,照猫画虎改改用

建议把时序约束脚本与综合脚本分开存放,这样时序约束可以单独使用。

(1)综合的注意事项

Q1.1需要fixhold吗?

不需要,hold交由后端去做就好了。

所以综合时,不需要读入min.lib,不用设wc_bc等复杂的选项

Q1.2综合出来的网表如何验证?

如RTL做形式验证

gate-sim(网表仿真)。不要用延迟。

不需要从DC输出SDF,因为那个根本不准,而且它也无法保证没有hold违反

Q1.3如何让DC自动插入clockgating

在脚本中加入

setpower_cg_always_enable_registerstrue

set_max_leakage_power0.0

set_max_dynamic_power0.0

set_clock_gating_style(指定ICG)

insert_clock_gating

replace_clock_gates

Q1.4综合时要检查哪些项目?

最最起码要做,

综合前,check_design,check_timing,保证所有的path都有约束(含timingexception)

综合后,report_timing,report_constraint,report_area,report_power,report_qor

Q1.5如何解决综合后setup的违法?

多综合几遍

检查约束是否合理

最后只好改RTL了

Q1.6如何判断约束是否合理?

什么是合理的约束还真不好说,但是下面是一些不合理的情况,遇到了一定得解决

2#楼里面所列约束项目不完整的

startpoint或endpoint的clockcycle特别大的,说明那是异步时钟

某个cell或net延迟很大的,可能是clocknet当作signal用了,设了dont_touch

Q1.7如何得到更好的网表?

对于DC,一般人们都喜欢把clockperiod调小一点(10~25%),那样DC会给你个timing比较好的网表,但是代价的面积的增大和功耗的增加。当然,你调clockuncertainty也有同样的效果#*******************************************************************************************

#Filename:syn_script_templet.tcl

#Author:xxxxxxxxx

#Description:Thisfileisjustonlyatempletforsynthesis,includingbasicsynthesisflow.

#Userscanmakeitasreferencedesign.

#*******************************************************************************************remove_design-all#****************************

#readdesigntoDCmemory,Assumingtherearefourmodules

#****************************read-fverilog../design/mod.v

read-fverilog../design/mod1.v

read-fverilog../design/mod2.v

read-fverilog../design/mod3.v#orreadlikethissetall_modules{modmod1\

mod2mod3\

}foreach(current_module,all_modules)

{

setdesign_path{../}

}#******************************/

#Set_dont_touchAttributeoncell,net,referenceordesign

#Set_dont_touch_networkAttributeonclock,pin,ports

#******************************/set_dont_touch_networkfind(port,"CLK")set_dont_touch[get_cells{xxxx/xxxx/aaa}]

set_dont_touch[get_nets{bbbb}]

set_dont_touch[get_designs{ssss}]#******************************/

#createclockinfo

#******************************/

create_clock-nameclk-period2.56-waveform{01.28}[get_pins,{s_x/I_PMA/I_PMA7/RXBCLK}]

create_generated_clock-nameclk_125-sourceA_x/clk-edges{135}[get_pins{p_x/clk_125}]set_clock_uncertainty-setup0.2clk

set_clock_uncertainty-hold0.02clk

set_clock_uncertainty-setup0.2clk_125

set_clock_uncertainty-hold0.02clk_125#******************************/

#exceptions

#******************************/set_false_path-fromclk_m-toclk_125

set_max_delay8-from[get_pins{a_x/A}]-to[get_pins{P_x/x_x/d}]

current_designmcucore

set_multicycle_path3-throughalu_x/mulb_x/*#******************************/

#SetDisableTiming

#******************************/

set_disable_timing-fromCLKA-toCLKBsynopsys_mem/TP8X16C1

set_disable_timing-fromCLKB-toCLKAsynopsys_mem/TP8X16C1#*******************************/

#ReportClockRelatedInformation

#*******************************/

report_clock-attributes>./design/report_clock.rep

report_clock-skew>>./design/report_clock.rep

report_design>./design/report_design.rep

report_port-verbose>./design/report_port.rep#*******************************/

#SetWire_load_model

#*******************************/

link

set_wire_load_model-nameKME_DEFAULT-libraryj1oa

set_wire_load_modeenclosed

#*******************************/

#Load&Input_transitionRelatedInformation

#*******************************/

set_input_delay1.0[all_inputs]

set_output_delay1.0[all_outputs]set_load-pin_load75[get_ports{xxx*}]

set_load-pin_load15[get_ports{bbb*}]

set_load-pin_load15[get_ports{ggg*}#*******************************/

#MISC

#*******************************/

current_designdesign

set_fix_multiple_port_nets-buffer_constants-all

set_cost_priority-delaycurrent_designdesign

uniquify

link

compile-map_efforthigh

#******************************/

#ReportRelatedInformation

#******************************/

current_designdesign

report_path_group>./design/report_path_group.rep

report_cell>./design/report_cell.rep

report_hierarchy>./design/report_hierarchy.rep

check_design>./design/check_design.rep

report_area>./design/report_area.repreport_timing-groupclk_125-max_paths20>./design/report_timing_clk_125.rep

report_timing-groupclk_m-max_paths20>./design/report_timing_clk_m.rep

report_timing-pathfull-delaymax-transition_time-capacitance>./design/report_timing.repreport_constraint-max_delay-all_violators>./design/report_constraint_slack_only.rep

report_constraint-max_delay-verbose-all_violators>./design/report_constraint.rep

#*****************************/

#WriteNetlist&SdfFile

#*****************************/ungroup-all-flatten

write-formatedif-hierarchy-output./netlist/design.edif

write-h-fverilog-o./netlist/design.vgh

write_sdf-version2.1-contextverilog./sdf/design.sdfquitSynthesisSummary逻辑综合总结综合概述综合技术的研究可以追溯到20世纪60年代,IBM公司T.J.Watson研究中心开发ALERT系统,将寄存器传输级算法描述转化成逻辑级的结构实现;20世纪70年代,综合技术发展迅速,但主要致力于较低层次的逻辑综合和版图综合;20世纪80年代中期,专用集成电路的广泛应用,要求芯片设计大规模、高性能、短周期,大大推动了从算法级设计描述向寄存器传输级设计描述转换的高层次综合技术。

1.逻辑综合概念逻辑综合负责将寄存器传输级的结构描述转化为逻辑层的结构描述,以及将逻辑层的结构描述转化为电路的结构描述。在数字IC设计领域常用的EDA综合工具中,最权威的要算Synopsys公司提供的综合工具。Synopsys公司提供的DesignCompiler(DC)是业界流行的、功能强大的逻辑综合工具。用户只需要输入设计规格的HDL描述和时间约束,就可能得到较为优化的门级综合网表。此外,DC还集成了功能强大的静态时序分析引擎,并支持与后端布局布线工具交互工作。

2.逻辑综合的流程从某种意义而言,综合就是将设计的HDL描述转化为门级网表的过程。Synopsys公司提供的综合工具DC把综合分为三个步骤进行:synthesis=translation+mapping+optimization。Translation是指把设计的HDL描述转化为GTECH库元件组成的逻辑电路;GTECH库是Synopsys公司提供的通用的、独立于工艺的元件库。Mapping是指将GTECH库元件映射到某一特定的半导体工艺库上,此时的电路网表包含了相关的工艺参数。Optimization是根据设计者设定的时延、面积、线负载模型等综合约束条件对电路网表进一步优化的过程。从综合工具的使用流程来看,综合包括综合环境的设置,综合约束,综合优化,综合与后端流程等。

综合约束用来设定电路综合的目标,它包括设计环境约束、时间约束和面积约束。

设计环境约束:指的是用来描述设计在工作时的温度、电压、驱动、负载等外部条件的一系列属性。基本的环境设置内容包括工作条件、负载模型、系统接口驱动或扇出能力等设置。这些属性约束在电路综合时是必须的,如果用户没有进行显式的说明,则DC在综合的时候会采用默认值。

时间约束内容:包括定义时钟、定义时钟网络的时间约束和时序路径时间约束设定,以及非同步设计的时间约束等。了解延迟的计算是定义恰如其分的时间约束的关键。Synopsys公司支持几种延迟模型:一是CMOS通用的延迟模型,二是CMOS分段的线性延迟模型,三是非线性的查表延迟模型。深亚微米的设计,前两种模型并不常用,非线性的延迟模型以输入的迁越时间和输出电容负载为参变量计算延迟的时间值,其结果以表格的形式列出供DC查找。

面积约束:和时间约束之间是一对矛盾且需要折中的关系,DC综合默认为时间约束比面积约束拥有更高的优先级。DC优化时默认不进行面积优化,如果你关注于芯片的面积,可以使用set_max_area命令设定面积的约束,使得DC完成时序约束之后继续进行面积优化。在设定综合约束之后,一般并不马上进行综合优化。因为对于一个较大的设计来说,综合一次时间很长。因此,综合前确认综合约束命令是否正确添加到设计中时很有必要的,可以减少由于综合约束不正确重新综合优化的风险,减少综合反复的时间。检查综合约束设置的命令有report_design,report_port–verbose,report_clock[-skew],report_constraints,report_timimg_requirement等。

许多版图工具只接受Verilog或EDIF格式的综合网表作为输入。在综合后提供Verilog格式的网表送给后端的版图工具,IC工程师还必须对综合的网表做好一下处理:

1.彻底解决多次例化同一子模块的问题

2.修正设计中部分连线的命名以简化综合网表

3.删除整个设计中悬空的端口

4.确保每个实例化单元的引脚都是可见的

5.避免网表中存在assign语句、传输门和三态连线的定义

6.避免网表中存在不必要的门控时钟或门控复位信号

7.避免网表中引用的实例化名不存在对应的实现逻辑

在综合之后,我们还得对综合后的网表进行门级仿真,在门级仿真上Synopsys公司提供的VCS仿真工具在服务器上运行的速度是比较快的。门级仿真过程中还有一步就是带时序反标的时序仿真,通过DC或者PT写出SDF文件,在网表中将逻辑延迟和线延迟反标入电路中,模拟更加真实的情况。下面将讲述如何writesynthesisscript

什么是综合呢?synthesis,台湾翻译为合成,其作用就是将硬件描述语言的RTL级代码转变为门级网表。当然,现在综合技术已经很成熟了,还有推出的行为(behavioral)综合和物理(physical)综合。我们这里讨论的是逻辑(logic)综合。

综合技术是提高设计产能的一个很重要的技术,没有综合技术的发展,我们就不可能用HDL实现电路的设计,因为HDL开始是用来供电路仿真建模使用的,到了后来才把其中一部分子集作为可综合的语言,也就是我们使用的RTLCODE。很多人入门都用HDL做设计,就以为HDL就只是用来做设计的,没有看到HDL最初始的一面,所以在验证的时候,就无法用好HDL另外一部分强大的功能。有时间还是可以看看WritingTestbench这本书,增强对HDL语言在验证方面作用的了解,也是提高对HDL认识很好的补充。

我们以DesignCompiler为例子讲解综合的过程。

首先,综合就要必须要用综合库,这个你可以向厂家要,综合库可以通过.lib这个库文件转变成.db综合库,这个基本过程可以DesignCompiler里面实现,综合库里面有什么内容呢?.db是无法阅读的,.lib是可以阅读的,里面有库的基本参数的单位,库运行的条件,各种参数,最重要的是两个部分,一个是WLM,即WireLoadModel,一个Gate的定义(输入输出,功能,时序参数,面积等等);这只是StandarCell的库,另外还有其他库,如RAM,DSP的综合库,都以.db的形式存在。

综合需要三种输入,一个是代码,一个是综合库,一个是综合脚本Script。综合脚本主要包括了一下内容,对综合工具环境的配置,对综合对象外部环境的设置(operationcondiction),对WLD的设置,对综合对象的时序的约束,综合策略,综合优化,综合报告和输出。下面给入门的人一个现成的Script例子(tclscript)

#######SetDirectory#########

setLIBtypical

setSYNDIR$HOME

setSRCDIR$HOME/src

setSCRDIR$HOME/script

setRPTDIR$HOME/rpt

setSYNDB$HOME/db

setSYNOPSYS"/cad/synopsys/"

######Enviroment############

define_design_libWORK-path$SYNDIR/WORK

setbus_naming_style%s_%d

setverilogout_single_bit"false"

sethdlin_enable_vpp"true"

sethdlin_enable_vpp"true"

setverilogout_no_tri"true"

setwrite_name_nets_same_as_ports"true"

setcompile_preserve_sync_resets"true"

set_ultra_optimizationtrue

setverilogout_equationfalse

setverilogout_no_tritrue

setsdc_write_unambiguous_namesfalse

######Library#################

setsynopsys_path"$SYNOPSYS/libraries/syn\

$SYNOPSYS/dw/sim_ver"

setstandarcell_path"*"

setsearch_path"$search_path\

$synopsys_path\

$standarcell_path"

settarget_library"typical.db"

setsymbol_library"*"

setsynthetic_library"dw_foundation.sldb

温馨提示

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

评论

0/150

提交评论