文档库 最新最全的文档下载
当前位置:文档库 › 智能手机CPU的ARM(Advanced RISC Machines)微处理器

智能手机CPU的ARM(Advanced RISC Machines)微处理器

智能手机CPU的ARM(Advanced RISC Machines)微处理器
智能手机CPU的ARM(Advanced RISC Machines)微处理器

ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。

ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。利用这种合伙关系,ARM很快成为许多全球性RISC标准的缔造者。

目前,总共有30家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、LG半导体、NEC、SONY、菲利浦和国民半导体这样的大公司。至于软件系统的合伙人,则包括微软、升阳和MRI等一系列知名公司。

ARM架构是面向低预算市场设计的第一款RISC微处理器。

ARM 即Advanced RISC Machines的缩写,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。

1985年4月26日,第一个ARM原型在英国剑桥的Acorn计算机有限公司诞生,由美国加州SanJoseVLSI技术公司制造。

20世纪80年代后期,ARM很快开发成Acorn的台式机产品,形成英国的计算机教育基础。

1990年成立了Advanced RISC Machines Limited(后来简称为ARM Limited,ARM公司)。20世纪90年代,ARM 32位嵌入式RISC(Reduced lnstruction Set Computer)处理器扩展到世界范围,占据了低功耗、低成本和高性能的嵌入式系统应用领域的领先地位。ARM公司既不生产芯片也不销售芯片,它只出售芯片技术授权。

[编辑本段]ARM的学习和开发都需要学习哪些软件

总结起来最主要的有以下几个吧

1 ADS调试用

确切的说是ADS+AXD。ADS里包含AXD。原来都用SDT后来ARM公司停止对SDT 支持了,改支持ADS了,还是用ADS吧。

有的人的程序发布的仍然是SDT版本的,但基本都可以找到相应ADS的,新人在这里不要发蒙。ADS是编译器,AXD是调试器。编译成AXF以后再在ARM的RAM里调试。

2 FLASHPGM

FLASH烧写的软件。AXF在RAM里调试,掉电就没有了,方便程序修改。调试好的程序再下到FLASH里,上电直接运行。

同类的软件还有很多,什么FLUTED了、FLSHP了都是,但FLASHPGM最好,要是有人还问FLASH不支持BIN格式文件的问题就要看我写的FLASHPGM使用了。

3 BANYANT调试代理(不知道名对不,起这么个难记的,我一般都叫它“半羊”因为知道它那几天刚吃了烤羊)

调试代理就是用它帮你使用更简单的JTAG(便宜啊)来实现原本1K才卖的JTAG仿真器的大部分功能。JTAG调试原理看我另一篇笔记。简单的就可以把他理解为你自己做的JTAG的驱动就行了。

调试代理还有很多种,什么H-JTAG了、ARM7了(不知道具体叫什么,就记得可执行文件叫ARM7.EXE)都是,BANYANT比较好。

需要注意的是,每种调试代理安装方法虽然都简单但都不一样,需要看说明。而且AXD 调试之前都要运行。省钱了,就别怕麻烦了。

4 ARM-ELF-TOOLS工具链

里面是UCLINUX开发用的工具比如ARM-ELF-GCC只类的。工具链就是把很多工具打包在一起发布的方便你开发的东西。具体安装方法看我另一篇笔记。

另外如果你开发LINUX就要用ARM-LINUX-TOOLS,不一样,不通用。

5 U-BOOT

大名鼎鼎的BOOTLOADER生成工具,同类的好象还有VIVI(名字很暧昧~~)

生成的BOOTLOADER烧到FLASH里,然后就可以用BOOTLOADER下载烧写其他了

有了BOOTLOADER才能下UCLINUX。BOOTLOADER就像电脑上的BIOS。当然UCOS 的不用这个,用什么我不知道:)

最新版本是1.1.4 具体使用方法看我另一篇笔记吧。

6 UCLINUX包

UCLINUX的源码包,不用多说了吧?建议大家用现成的先体会一下,然后再自己编译,裁剪。因为单独UCLINUX的编辑技术上比较简单,但涉及的方面还是比较广的。

7 VMWARE

老牌的虚拟机软件,在一个机器上虚拟出一个机器装LINUX(PC上用的),省得你来回开关机了。记得装VMWARE-TOOLS,安装方法在我另一篇笔记里。

8 source insight 代码编辑工具linux下使用kscope

[编辑本段]ARM公司简介

1991 年ARM 公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用ARM 技术知识产权(IP )核的微处理器,即我们通常所说的ARM 微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM 技术的微处理器应用约占据了32 位RISC 微处理器75 %以上的市场份额,ARM 技术正在逐步渗入到我们生活的各个方面。

ARM 公司是专门从事基于RISC 技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM 微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM 微处理器芯片进入市场。目前,全世界有几十家大的半导体公司都使用ARM 公司的授权,因此既使得ARM 技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。

ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和众多合作伙伴。ARM商品模式的强大之处在于它在世界范围有超过100个的合作伙伴(Partners)。ARM 是设计公司,本身不生产芯片。采用转让许可证制度,由合作伙伴生产芯片。

当前ARM体系结构的扩充包括:

·Thumb 16位指令集,为了改善代码密度;

·DSP DSP应用的算术运算指令集;

·Jazeller 允许直接执行Java字节码。

ARM处理器系列提供的解决方案有:

·无线、消费类电子和图像应用的开放平台;

·存储、自动化、工业和网络应用的嵌入式实时系统;

·智能卡和SIM卡的安全应用。

ARM处理器本身是32位设计,但也配备16位指令集。一般来讲存储器比等价32位代码节省达35%,然而保留了32位系统的所有优势。ARM的Jazelle技术使Java加速得到比基于软件的Java虚拟机(JVM)高得多的性能,和同等的非Java加速核相比功耗降低80%。CPU功能上增加DSP指令集提供增强的16位和32位算术运算能力,提高了性能和灵活性。ARM还提供两个前沿特性来辅助带深嵌入处理器的高集成SoC器件的调试,它们是嵌入式ICE-RT逻辑和嵌入式跟踪宏核(ETMS)系列。

[编辑本段]内核种类

家族架构内核特色高速缓存(I/D)/MMU 常规 MIPS 于MHz 应用

ARM1 ARMv1 ARM1 无

ARM2 ARMv2 ARM2 Architecture 2 加入了MUL(乘法)指令无4 MIPS @ 8MHz Acorn Archimedes,Chessmachine

ARMv2a ARM250 Integrated (完整的)MEMC (MMU),图像与IO处理器。Architecture 2a 加入了SWP和SWPB(置换)指令。无,MEMC1a 7 MIPS @ 12MHz Acorn Archimedes ARM3 ARMv2a ARM2a 首次在ARM架构上使用处理器高速缓存均为4K 12 MIPS @

25MHz Acorn Archimedes

ARM6 ARMv3 ARM610 v3 架构首创支援寻址32位的内存(针对26位)均为4K 28 MIPS @ 33MHz Acorn Risc PC 600,Apple Newton

ARM7TDMI ARMv4T ARM7TDMI(-S) 三级流水线无15 MIPS @ 16.8 MHz Game Boy Advance,Nintendo DS,iPod

ARM710T 均为8KB, MMU 36 MIPS @ 40 MHz Acorn Risc PC 700,Psion 5 series,Apple eMate 300

ARM720T 均为8KB, MMU 60 MIPS @ 59.8 MHz Zipit

ARM740T MPU

ARMv5TEJ ARM7EJ-S Jazelle DBX 无

ARM9TDMI ARMv4T ARM9TDMI 五级流水线无

ARM920T 16KB/16KB, MMU 200 MIPS @ 180 MHz Armadillo,GP32,GP2X(第一颗内核), Tapwave Zodiac(Motorola i. MX1)

ARM922T 8KB/8KB, MMU

ARM940T 4KB/4KB, MPU GP2X(第二颗内核)

ARM9E ARMv5TE ARM946E-S 可变动,tightly coupled memories, MPU Nintendo DS,Nokia N-GageConexant 802.11 chips

ARM966E-S 无高速缓存,TCMs ST Micro STR91xF,包含Ethernet [2]

ARM968E-S 无高速缓存,TCMs

ARMv5TEJ ARM926EJ-S Jazelle DBX 可变动,TCMs, MMU 220 MIPS @ 200 MHz 移动电话:Sony Ericsson(K, W系列),Siemens 和 Benq(x65 系列和新版的)

ARMv5TE ARM996HS 无振荡器处理器无高速缓存,TCMs, MPU

ARM10E ARMv5TE ARM1020E (VFP),六级流水线32KB/32KB, MMU ARM1022E (VFP) 16KB/16KB, MMU

ARMv5TEJ ARM1026EJ-S Jazelle DBX 可变动,MMU or MPU

XScale ARMv5TE 80200/IOP310/IOP315 I/O处理器

80219 400/600MHz Thecus N2100

IOP321 600 BogoMips @ 600 MHz Iyonix

IOP33x

IOP34x 1-2核,RAID加速器32K/32K L1, 512K L2, MMU

PXA210/PXA250 应用处理器,七级流水线Zaurus SL-5600

PXA255 32KB/32KB, MMU 400 BogoMips @ 400 MHz Gumstix,Palm Tungsten E2 PXA26x 可达400 MHz Palm Tungsten T3

PXA27x 800 MIPS @ 624 MHz

HTC Universal, Zaurus SL-C1000,3000,3100,3200, Dell Axim x30, x50,和x51 系列PXA800(E)F

Monahans 1000 MIPS @ 1.25 GHz

PXA900 Blackberry 8700, Blackberry Pearl (8100)

IXC1100 Control Plane Processor

IXP2400/IXP2800

IXP2850

IXP2325/IXP2350

IXP42x NSLU2

IXP460/IXP465

ARM11 ARMv6 ARM1136J(F)-S SIMD, Jazelle DBX, (VFP),八级流水线可变动,MMU ?? @ 532-665MHz (i.MX31 SoC) Nokia N93,Zune,Nokia N800

ARMv6T2 ARM1156T2(F)-S SIMD, Thumb-2, (VFP),九级流水线可变动,MPU

ARMv6KZ ARM1176JZ(F)-S SIMD, Jazelle DBX, (VFP) 可变动,MMU+TrustZone ARMv6K ARM11 MPCore 1-4核对称多处理器,SIMD, Jazelle DBX, (VFP) 可变动,MMU

Cortex ARMv7-A Cortex-A8 Application profile, VFP, NEON, Jazelle RCT, Thumb-2,

13-stage pipeline 可变动(L1+L2), MMU+TrustZone up to 2000(2.0 DMIPS/MHz 从600 MHz到超过1 GHz的速度)Texas Instruments OMAP3

ARMv7-R Cortex-R4(F) Embedded profile, (FPU) 可变动高速缓存,MMU可选配600 DMIPS Broadcom is a user

ARMv7-M Cortex-M3 Microcontroller profile 无高速缓存,(MPU) 120 DMIPS @ 100MHz Luminary Micro[3] 微控制器家族

设计文件

设计文件讲求精简又快速的设计方式,整体电路化却又不采用微码,就像早期使用在Acorn微电脑的8位6502处理器。

ARM架构包含了下述RISC特性:

读取/储存架构不支援地址不对齐内存存取(ARMv6内核现已支援)正交指令集(任意存取指令可以任意的寻址方式存取数据Orthogonal instruction set)大量的16 × 32-bit 寄存器阵列(register file)固定的32 bits 操作码(opcode)长度,降低编码数量所产生的耗费,减轻解码和流水线化的负担。大多均为一个CPU周期执行。为了补强这种简单的设计方式,相较于同时期的处理器如Intel 80286和Motorola 68020,还多加了一些特殊设计:

大部分指令可以条件式地执行,降低在分支时产生的负重,弥补分支预测器(branch predictor)的不足。算数指令只会在要求时更改条件编码(condition code)32-bit筒型位移器(barrel shifter)可用来执行大部分的算数指令和寻址计算而不会损失效能强大的索引寻址模式(addressing mode)精简但快速的双优先级中断子系统,具有可切换的暂存器组有个附加在ARM设计中好玩的东西,就是使用一个4-bit 条件编码在每个指令前头,表示每支指令的执行是否为有条件式的

这大大的减低了在内存存取指令时用到的编码位,换句话说,它避免在对小型叙述如if

做分支指令。有个标准的范例引用欧几里德的最大公因子算法:

在C编程语言中,循环为:

int gcd (int i, int j) { while (i != j) if (i > j) i -= j; else j -= i; return i;} 在ARM 汇编语言中,循环为:

loop CMP Ri, Rj ; 设定条件为"NE"(不等於) if (i != j) ; "GT"(大於) if (i > j), ; or "LT"(小於) if (i < j) SUBGT Ri, Ri, Rj ; 若"GT"(大於), i = i-j; SUBLT Rj, Rj, Ri ; 若"LT"(小於), j = j-i; BNE loop ; 若"NE"(不等於),则继续回圈这避开了then和else子句之间的分支。

另一项指令集的特色是,能将位移(shift)和回转(rotate)等功能并成"资料处理"型的指令(算数、逻辑、和暂存器之间的搬移),因此举例来说,一个C语言的叙述

a += (j << 2);在ARM之下,可简化成只需一个word和一个cycle即可完成的指令

ADD Ra, Ra, Rj, LSL #2这结果可让一般的ARM程式变得更加紧密,而不需经常使用内存存取,流水线也可以更有效地使用。即使在ARM以一般认定为慢速的速度下执行,与更复杂的CPU设计相比它仍能执行得不错。

ARM处理器还有一些在其他RISC的架构所不常见到的特色,例如PC-相对寻址(的确在ARM上PC为16个暂存器的其中一个)以及前递加或后递加的寻址模式。

另外一些注意事项是ARM 处理器会随着时间,不断地增加它的指令集。某些早期的ARM 处理器(比ARM7TDMI更早),譬如可能并未具备指令可以读取两Bytes 的数量,因此,严格来讲,对这些处理器产生程式码时,就不可能处理如C 语言物件中使用"volatile short" 的资料型态。

ARM7 和大多数较早的设计具备三阶段的流水线化(Pipeline):提取指令、解码,并执行。较高效能的设计,如ARM9,则有五阶段的流水线化。提高效能的额外方式,包含一颗较快的加法器,和更广的分支预测逻辑线路。

这个架构使用“协处理器”提供一种非侵入式的方法来延伸指令集,可透过软件下MCR、MRC、MRRC和MCRR 等指令来对协处理器寻址。协处理器空间逻辑上通常分成16个协处理器,编号分别从0 至15 ,而第15号协处理器(CP15)是保留用作某些常用的控制功能,像是使用高速缓存和记忆管理单元运算(若包含于处理器时)。

在ARM 架构的机器中,周边装置连接处理器的方式,通常透过将装置的实体暂存器对应到ARM 的内存空间、协处理器空间,或是连接到另外依序接上处理器的装置(如总线)。协处理器的存取延迟较低,所以有些周边装置(例如 XScale 中断控制器)会设计成可透过不同方式存取(透过内存和协处理器)。

Thumb

较新的ARM处理器有一种16-bit指令模式,叫做Thumb,也许跟每个条件式执行指令均耗用4位的情形有关。在Thumb模式下,较小的opcode有更少的功能性。例如,只有

分支可以是条件式的,且许多opcode无法存取所有CPU的暂存器。然而,较短的opcode 提供整体更佳的编码密度(注:意指程式码在内存中占的空间),即使有些运算需要更多的指令。特别在内存埠或总线宽度限制在32 以下的情形时,更短的Thumb opcode能更有效地使用有限的内存带宽,因而提供比32位程式码更佳的效能。典型的嵌入式硬件仅具有较小的32-bit datapath寻址范围以及其他更窄的16 bits寻址(例如Game Boy Advance)。在这种情形下,通常可行的方案是编译成Thumb 程式码,并自行最佳化一些使用(非Thumb)32位指令集的CPU相关程式区,因而能将它们置入受限的32-bit总线宽度的内存中。

首颗具备Thumb 技术的处理器是ARM7TDMI。所有ARM9 和后来的家族,包

括 XScale 都纳入了Thumb 技术。

Jazelle

ARM 还开发出一项技术,Jazelle DBX (Direct Bytecode eXecution),允许它们在某些架构的硬件上加速执行Java bytecode,就如其他执行模式般,当呼叫一些无法支援bytecodes 的特殊软件时,能提供某些bytecodes的加速执行。它能在现存的ARM与Thumb模式之间互相执行。

首颗具备Jazelle技术的处理器是ARM926EJ-S:Jazelle以一个英文字母'J'标示于CPU 名称中。它用来让手机制造商能够加速执行Java ME的游戏和应用程式,也因此促使了这项技术不断地开发。

Thumb-2

Thumb-2 技术首见于 ARM1156 核心,并于2003年发表。Thumb-2 扩充了受限的

16-bit Thumb 指令集,以额外的32-bit 指令让指令集的使用更广泛。因此Thumb-2 的预期目标是要达到近乎Thumb 的编码密度,但能表现出近乎ARM 指令集在32-bit 内存下的效能。

Thumb-2 至今也从ARM 和Thumb 指令集中派生出多种指令,包含位栏(bit-field)操作、分支建表(table branches),和条件执行等功能。

Thumb Execution Environment (ThumbEE)

ThumbEE,也就是所谓的Thumb-2EE,,业界称为Jazelle RCT技术,于2005年发表,首见于 Cortex-A8 处理器。ThumbEE 提供从Thumb-2 而来的一些扩充性,在所处的执行环境(Execution Environment)下,使得指令集能特别适用于执行阶段(Runtime)的编码产生(例如即时编译)。Thumb-2EE 是专为一些语言如 Limbo、Java、C#、Perl 和 Python,并能让即时编译器能够输出更小的编译码却不会影响到效能。

ThumbEE 所提供的新功能,包括在每次存取指令时自动检查是否有无效指标,以及一种可以执行阵列范围检查的指令,并能够分支到分类器(handlers),其包含一小部份经常呼叫的编码,通常用于高阶语言功能的实作,例如对一个新物件做内存配置。

进阶SIMD (NEON)

进阶SIMD 延伸集,业界称为NEON技术,它是一个结合64 和128 bit 的 SIMD (Single Instruction Multiple Data 单指令多重数据)指令集,其针对多媒体和讯号处理程式具备标准化加速的能力。NEON 可以在10 MHz 的CPU 上执行MP3 音效解码,且可以执行13 MHz 频率以下的 GSM AMR (Adaptive Multi-Rate) 语音编码。NEON具有一组广泛的指令集、各自的寄存器阵列,以及独立执行的硬件。NEON 支援8-, 16-, 32- 和

64-bit 的整数及单精度浮点数据,并以SIMD 的方式运算,执行图形和游戏处理中关于语音/视讯的部分。SIMD 在向量超级处理机中是个决定性的要素,它具备同时多项处理功能。在NEON 技术中,SIMD 最高可支援到同时16 个运算。

VFP

VFP 是在协同处理器针对ARM架构的衍生技术。它提供低成本的单精度和倍精度浮点运算能力,并完全相容于ANSI/IEEE Std 754-1985 二进制浮点算数标准。VFP 提供大多数适用于浮点运算的应用,例如PDA、智慧手机、语音压缩与解压、3D图像以及数位音效、打印机、机上盒,和汽车应用等。VFP 架构也支援 SIMD(单指令多重数据)平行化的短向量指令执行。这在图像和讯号处理等应用上,非常有助于降低编码大小并增加输出效率。在ARM-based处理器中,其他可见的浮点、或SIMD 的协同处理器还包括了FPA, FPE, iwMMXt。他们提供类似VFP 的功能但在opcode层面上来说并不具有相容性。

安全性扩充(TrustZone)

TrustZone(TM) 技术出现在ARMv6KZ 以及较晚期的应用核心架构中。它提供了一种低成本的方案,针对系统单芯片(SoC)内加入专属的安全核心,由硬件建构的存取控制方式支援两颗虚拟的处理器。这个方式可使得应用程式核心能够在两个状态之间切换(通常改称为领域(worlds)以避免和其他功能领域的名称混淆),在此架构下可以避免资讯从较可信的核心领域泄漏至较不安全的领域。这种内核领域之间的切换通常是与处理器其他功能完全无关联性(orthogonal),因此各个领域可以各自独立运作但却仍能使用同一颗内核。内存和周边装置也可因此得知目前内核运作的领域为何,并能针对这个方式来提供对装置的机密和编码进行存取控制。典型的TrustZone 技术应用是要能在一个缺乏安全性的环境下完整地执行操作系统,并在可信的环境下能有更少的安全性的编码。

[编辑本段]ARM 授权方

ARM 公司本身并不靠自有的设计来制造或出售CPU ,而是将处理器架构授权给有兴趣的厂家。ARM 提供了多样的授权条款,包括售价与散播性等项目。对于授权方来说,ARM 提供了ARM 内核的整合硬件叙述,包含完整的软件开发工具(编译器、debugger、SDK),以及针对内含ARM CPU 硅芯片的销售权。对于无晶圆厂的授权方来说,其希望能将ARM 内核整合到他们自行研发的芯片设计中,,通常就仅针对取得一份生产就绪的智财核心技术(IP Core)认证。对这些客户来说,ARM 会释出所选的ARM 核心的闸极电路图,连同抽象模拟模型和测试程式,以协助设计整合和验证。需求更多的客户,包括整合元件制造商(IDM)和晶圆厂家,就选择可合成的RTL(暂存器转移层级,如 Verilog)形式来取得处理器的智财权(IP)。藉著可整合的RTL,客户就有能力能进行架构上的最佳化与加强。这个方式能让设计者完成额外的设计目标(如高震荡频率、低能量耗损、指令集延伸等)而

不会受限于无法更动的电路图。虽然ARM 并不授予授权方再次出售ARM 架构本身,但授权方可以任意地出售制品(如芯片元件、评估板、完整系统等)。商用晶圆厂是特殊例子,因为他们不仅授予能出售包含ARM 内核的硅晶成品,对其它客户来讲,他们通常也保留重制ARM 内核的权利。

就像大多数IP 出售方,ARM 依照使用价值来决定IP 的售价。在架构上而言,更低效能的ARM 内核比更高效能的内核拥有较低的授权费。以硅芯片实作而言,一颗可整合的内核要比一颗硬件宏(黑箱)内核要来得贵。更复杂的价位问题来讲,持有ARM 授权的商用晶圆厂(例如韩国三星和日本富士通)可以提供更低的授权价格给他们的晶圆厂客户。透过晶圆厂自有的设计技术,客户可以更低或是免费的ARM预付授权费来取得ARM 内核。相较于不具备自有设计技术的专门半导体晶圆厂(如台积电和联电),富士通/三星对每片晶圆多收取了两至三倍的费用。对中少量的应用而言,具备设计部门的晶圆厂提供较低的整体价格(透过授权费用的补助)。对于量产而言,由于长期的成本缩减可借由更低的晶圆价格,减少ARM的NRE成本,使得专门的晶圆厂也成了一个更好的选择。

许多半导体公司持有 ARM 授权:Atmel、Broadcom、Cirrus Logic、Freescale (于2004从摩托罗拉公司独立出来)、富士通、英特尔(借由和Digital的控诉调停)、IBM,英飞凌科技,任天堂,恩智浦半导体(于2006年从飞利浦独立出来)、OKI电气工业,三星电子,Sharp,STMicroelectronics,德州仪器和 VLSI 等许多这些公司均拥有各个不同形式的ARM授权。虽然ARM的授权项目由保密合约所涵盖,在智慧财产权工业,ARM是广为人知最昂贵的CPU内核之一。单一的客户产品包含一个基本的 ARM 内核可能就需索取一次高达美金20万的授权费用。而若是牵涉到大量架构上修改,则费用就可能超过千万美元。

相关文档