前言
作为基于FPGA的原型设计的倡导者,我们可能会偏向于它的好处,而对其缺陷视而不见,然而,这不是我们的意图。本文系列旨在给一个平衡的观点FPGA-based原型的利弊,说到底,如果他们能通过其他方法器目标会更好地满足,例如使用基于SystemC的虚拟原型,我们不想让人们必须要使用一个长原型项目。
本章将提供基于FPGA的原型设计的目的和局限性。完成本章后,读者应该深入了解基于FPGA的原型设计对系统级验证的适用性和其他目标的适用性。正如我们将在后面的章节中看到的,通过保持专注于原型项目的目标,我们可以简化我们关于平台、IP使用、设计移植、调试等方面的决策。因此,我们可以通过检查来自世界各地的原型团队的一些例子,从其他人在他们的项目中所拥有的不同目标中学习。
1-基于FPGA的原型
原型设计不是一个按钮式的过程,在不同的阶段需要大量的护理和考虑。除了在接下来的几章中解释这些行为和专业知识之外,我们还应该给予一些激励,说明为什么我们应该(或者可能不应该)在我们的SoC项目中执行原型设计。
在创作这本书之前的多年里,在与原型验证领域的朋友的对话中,我们喜欢问的一个问题是:“你为什么要这么做?”有很多答案,但我们能够将它们分类为表1中所示的一般原因。例如,“真实世界的数据效应”可能描述一个团队的原型,以便使系统的速度模型能够与其他系统或外围设备互连,可能是为了测试与特定的新接口标准的遵从性。
他们制作原型的广泛理由是“与现实世界的接口”,而原型设计确实提供了最快和最准确的方法来实现这一点。
对这些项目目标的结构化理解以及为什么我们应该使用原型,将帮助我们决定基于FPGA的原型设计是否会有利于我们的下一个项目。
因此,让我们来探讨表1中的每个目标,以及基于FPGA的原型设计如何提供帮助。在许多情况下,我们还将提供来自现实世界的例子,作者希望提前感谢那些在这一努力中提供了自己的经验作为指导的人。
表1:使用基于FPGA的原型的一般目标和原因
1.1.高性能和准确性
只有基于FPGA的原型设计提供了正确测试设计的许多方面所需的速度和准确性,我们将进行描述。
我们把这个原因放在列表的首位,因为它是团队制作原型的根本原因,尽管项目有许多不同的交付目标。例如,该团队的目标可能是验证一些SoC的一些嵌入式软件,看看它如何在实际硬件上以速度运行,但使用原型的潜在原因是为了高性能和准确性。
我们可以在虚拟系统上验证软件的更高的性能,但我们失去了使用真正的RTL的准确性。
1.2.实时数据流
验证SoC困难的部分原因是它的状态依赖于许多变量,包括它以前的状态、输入序列和SoC输出的更广泛的系统效应(和可能的反馈)。
以实时连接到系统其他部分的速度运行SoC设计,可以让我们能够看到实时条件、输入和系统反馈发生变化时的即时影响。
图14:HDMI原型机方框图
一个非常好的例子是由新思科的同步系统IP组执行的HDMI原型中的实时数据流。在这里,一个高清(HD)媒体数据流通过一个处理核心的原型并被路由到一个高清显示器,如图14中的方框图所示。
我们将了解更多关于这个设计在第十章当我们考虑IP使用原型,但目前,注意在图的底部有音频和高清视频数据流实时从接收器(从外部来源)通过原型和实时HDMI物理连接到一个外部监视器。
通使用一个预芯片(模拟)原型,我们可以立即看到和听到不同的高清数据对我们的设计的影响,反之亦然。
只有基于FPGA的原型允许这种实时数据流,这不仅给这种多媒体应用带来了巨大的好处,也给许多需要输入数据流实时响应的应用也提供了巨大的好处。
1.3.软硬件集成
在上面的示例中,读者可能已经注意到在原型中有一个小的MicroBlazeCPU,以及外围设备和内存,所以SoC的所有类似的块都存在。
在这种设计中,在CPU中运行的软件主要用于加载和控制AV处理,然而,在许多SoC设计中,最需要大部分设计工作的是软件。
鉴于软件已经主导SoC开发工作,软件工作在项目进度的关键路径上越来越普遍。是软件开发和验证,支配了SoC能够有效达到批量生产的实际完成日期。在这种情况下,系统团队可以做些什么来提高软件开发和验证的生产力呢?
要回答这个问题,我们需要看看软件团队把时间花在哪里,我们将在下一节中探讨。
1.4.为软件开发的SoC建模
软件是复杂的,很难做到完美。我们都熟悉软件升级、服务包和我们日常使用电脑的错误修复。
然而,在嵌入到SoC中的软件的情况下,这种对软件的永久微调不太容易实现。
从好的方面来说,与嵌入式软件交互的系统、其预期的使用模式和环境情况通常都比更通用的计算机软件更容易确定。
此外,用于更简单系统的嵌入式软件本身可以保持简单,因此更容易完全验证。例如,控制车辆子系统或电子玩具的SoC可以比在实时操作系统(RTOS)上运行许多应用程序和进程的智能手机更容易得到充分的测试。
如果我们更仔细地观察在这样的智能手机中运行的软件,如图15所示的安卓软件,那么我们会看到一个多层的排列,称为软件堆栈。这张图是基于软件设计师弗兰克·阿贝尔森在他的书《解锁安卓系统》中的原创作品。
看看堆栈,我们应该意识到最低级别,即最接近硬件的,是由需要将软件映射到SoC硬件的需求主导的。这需要对硬件的绝对知识的地址和时钟周期水平的精度。软件堆栈的最低级别的设计者,通常自称为平台工程师,其任务是用堆栈的更高级别可以识别和重用来描述硬件。这个描述被一些RTOS供应商称为BSP(板支持包),也类似于我们日常pc中的BIOS(基本输入/输出系统)层。
堆栈底部的下一层包含RTOS的内核和将所描述的硬件与更高级软件接口所需的驱动程序。在堆栈的这些最低级别中,平台工程师和驱动程序开发人员将需要在真正的SoC或一个完全准确的SoC模型上验证他们的代码。这个级别的软件开发人员需要在每个时钟周期中完全看到他们的软件的行为。
对于软件开发人员来说,另一个极端是,在堆栈的顶层,我们会发现可能同时运行多个应用程序的用户空间。在智能手机的例子中,这些可以是联系人管理器、视频显示器、互联网浏览器,当然,还有实际上打电话的电话子系统。这些应用程序都不能直接访问SoC硬件,而且实际上与对硬件的任何考虑都有些不同。这些应用程序依赖于运行在堆栈的较低级别上的软件来代表其与SoC硬件和世界其他地方进行通信。
我们可以概括,在堆栈的每一层,软件开发人员只需要一个足够精确的模型来欺骗自己的代码,使其认为它在目标SoC中运行。超过必要的精度只会导致模型在模拟器上运行得更慢。实际上,任何级别的SoC建模都要求我们表示硬件和堆栈,直到刚好低于当前级别需要验证的层,我们应该以足够的精度工作,以允许最大的性能。
例如,位于堆栈顶部的应用程序开发人员可以在真正的SoC或模型上测试他们的代码。在这种情况下,模型只需要足够精确,以使应用程序认为它运行在真正的SoC上,也就是说,它不需要周期精度或硬件的细粒度可见性。然而,速度很重要,因为多个应用程序将并发运行,并在许多情况下与真实世界的数据进行接口。
这种模型的方法对于软件层来说具有“刚好足够的准确性”,从而导致不同的软件开发人员在SoC项目中在不同的时间使用许多不同的建模环境。可以使用以SystemC等语言建模的事务级模拟来创建一个模拟器模型,该模型的运行精度较低,但速度足够快,可以一起运行许多应用程序。如果处理实时的、真实世界的数据并不重要,那么我们最好考虑这种虚拟原型方法。
然而,当整个软件堆栈必须一起运行或必须处理真实世界的数据时,基于FPGA的原型设计就变得最有用了。
1.5.软件验证的原型使用示例
只有基于FPGA的原型设计才打破了建模方法中固有的准确性和性能之间的反比关系。通过使用FPGAs,我们可以实现实时到最高的速度,但仍然可以在整个RTL周期精度下进行建模。
这使得相同的原型不仅可以用于低级软件验证所需的精确模型,而且还可以用于高级应用程序开发人员所需的高速模型。
实际上,整个SoC软件堆栈可以基于一个基于FPGA的原型进行建模。在Scott执行的一个项目中,可以看到使用fpga进行软件验证的一个很好的例子康斯特布尔和他的团队在飞思卡尔斯半导体的手机产品集团。
飞思卡尔对加速SoC的开发非常感兴趣,因为较短的产品生命周期要求产品快速进入市场,不仅是为了击败竞争对手,也是为了避免迅速过时。飞思卡尔分析了其流程中最大的时间下沉量,并决定通过加速他们的手机3G协议测试来实现最大的好处。如果这种测试可以在芯片前进行,那么飞思卡尔将在项目计划中节省相当多几个月的时间。与只有一到两年的产品寿命相比,这确实是非常重要的。
协议测试是一个复杂的过程,即使在高实时速度下也需要一天才能完成。使用RTL模拟将需要数年时间,而在更快的模拟器上运行仍然需要数周时间,这两者都不是一个实际的解决方案。之所以选择fpga,是因为这是实现必要的时钟速度以及时完成测试的唯一方法。
协议测试需要开发产品的各个软件方面,包括硬件驱动程序、操作系统和协议堆栈代码。虽然主要目标是协议测试,如前所述,通过使用fpga,所有这些软件开发都将在芯片前完成,并大大加速各种最终产品计划。
飞思卡尔原型设计了一个多芯片系统,其中包括一个双核MXC2基带处理器和一个射频收发芯片的数字部分。基带处理器包括一个用于调制解调器处理的飞思卡尔星核心DSP核心和一个用于用户应用程序处理的ARM926核心,加上60多个外设。
使用同步系统HAPS-54原型板来实现原型,如图16所示。基带处理器有超过500万ASIC门,斯科tt的团队使用同步系统认证工具将其划分为板上的三个XilinxVirtex-5FPGAs,而数字射频设计被放置在第四FPGA中。飞思卡尔决定不制作模拟部分的原型,而是直接从安立苏协议测试箱中以数字形式交付蜂窝网络数据。
旧的核心使用的一些设计技术在ASIC中非常有效,但它们不是非常FPGA友好。此外,一些RTL是从系统级设计代码自动生成的,由于时钟网络过于复杂,这些代码对fpga也相当不友好。因此,必须对RTL进行一些修改,使其更兼容FPGA,但好处是显著的。
除了加速协议测试,当飞思卡尔的工程师收到第一个芯片时,他们已经能够:
• 发布在芯片之后没有重大修改的调试器软件。
• •完整的驱动程序软件。
• •将SoC启动到操作系统软件提示符。
• •实现了modem camp和注册。飞思卡尔团队在收到第一个芯片片仅仅一个月后就达到了通过系统拨打移动电话的里程碑,使产品进度加快了6个多月。
为了回答我们关于基于FPGA的原型设计可以为我们做些什么的问题,让我们听听斯科特·康斯特布尔自己的话:
“除了我们所声明的协议测试目标外,我们的FPGA系统原型还在许多其他领域提供了项目进度加速,多次证明了它的价值。也许最重要的是,让工程师更早地参与到项目计划中,让所有团队从设计到软件到验证再到六个月前非常熟悉产品的应用程序,这是不可估量的人力好处。这种加速的产品专业知识的影响很难在甘特图上加以衡量,但可能是最有益的。
鉴于这些成就,**使用FPGA原型解决方案来加速ASIC时间表是“显而易见的”**。此后,我们已经将这种方法扩展到飞思卡尔网络和微控制器组中,并使用原型进行新的IP验证、驱动程序开发、调试器开发和客户演示。”
这个示例展示了基于FPGA的原型设计如何成为软件团队工具箱中的一个有价值的补充,并在产品质量和项目时间表方面带来显著的投资回报。
2-接口效益:测试真实世界的数据效果
很难想象一个SoC设计不符合输入数据的基本结构,并对输入数据进行一些处理以产生输出数据。事实上,如果我们推进SoC设计,我们将发现许多遵循相同结构的子块,以此类推,一直到单独的门级别。
验证这些级别上的正确处理需要我们提供一组完整的输入数据集,并观察正确的输出数据是由于处理的结果而创建的。对于单个的门,这是微不足道的,而对于小的RTL块,这仍然是可能的。然而,随着系统复杂性的增长,在统计上很快就不可能确保输入数据和初始条件的完整性,特别是当软件在多个处理器上运行时。
为了提高传统验证方法的效率和覆盖范围,并克服这种复杂性的挑战,已经进行了大量的研究和投资。在完整的SoC级别上,我们需要使用各种不同的验证方法,以覆盖所有可能的输入组合,并防止不太可能的组合。
这最后一点很重要,因为不可预测的输入数据可能会打乱除了最精心设计的基于soc的关键系统之外的所有系统。SoC的许多可能的状态加上新的输入数据,或不寻常的组合或序列的输入数据,可以使SoC进入未验证的状态。当然,这可能不是一个问题,而且SoC可以在系统的任何其他部分或用户没有意识到的情况下进行恢复。
然而,在最终的芯片中要避免未经验证的状态,因此我们需要尽可能彻底地测试设计的方法。验证工程师使用强大的方法,如约束随机刺激和先进的测试安全带,在设计的功能模拟中执行各种各样的测试,旨在达到可接受的覆盖范围。然而,完整性仍然受验证工程师给出的方向和约束以及可用来运行模拟本身。因此,约束随机验证永远不是完全详尽的,但它将大大增加我们测试了所有输入组合的信心,包括可能的和不可能的。
为了防止角的情况组合,我们可以通过在现实世界中运行的基于FPGA的原型上运行的设计观察来补充我们的验证结果。通过将SoC设计放在原型中,我们可以以一个速度和精度点运行,与最终芯片非常比较,允许在最终环境数据中“浸泡”测试,就像最终芯片所做的一样。
将SoC设计沉浸到现实世界场景中的一个例子是在西班牙巴伦西亚的DS2中使用了基于FPGA的原型设计。
3 示例:原型沉浸在真实世界的数据中
宽带过电力线(BPL)技术使用通常无法检测到的信号,通过电力总电电力线传输和接收信息。BPL的一个典型用途是通过主电线将高清视频从接收器分发到任何显示器上,如图17所示。
DS2的BPL设计的核心是硬件和嵌入式软件中的复杂算法,这些软件可以编码和检索高速传输的信号进出电力线。这些电力线可能是非常嘈杂的电气环境,因此开发的一个关键部分是在各种各样的真实条件下验证这些算法,如图18所示。
DS2的ASIC设计经理哈维尔·希门尼斯解释了基于FPGA的原型为他们做了什么。
“为了开发可靠和高速的通信,有必要使用一种可靠的验证技术。它需要使用不同的信道和噪声模型进行多次试验,只有基于FPGA的原型允许我们完全测试算法,并在原型上运行设计的嵌入式软件。此外,我们还可以将原型机带出实验室,进行广泛的现场测试。我们能够在真实的家庭和工作场所中放置多个原型,其中一些确实是恶劣的电气环境。我们不能为此目的考虑模拟器系统,因为它们只是太昂贵,而且不可移植。
在实验室之外使用基于FPGA的原型设计具有指导意义,因为我们看到,使平台可靠和便携是成功的关键。我们将在第5章和第12章中进一步探讨这一点。
4 可行性实验室实验的好处
在项目开始时,就会对芯片的拓扑结构、性能、功耗和片上通信结构做出基本的决策。其中一些实验最好使用算法或系统级建模工具来执行,但一些额外的实验也可以使用FPGAs来执行。
这真的是基于FPGA的原型设计吗?我们使用FPGAs来原型一个想法,但它与使用算法或数学工具不同,因为我们需要一些RTL,可能是由这些高级工具生成的。
但是一旦在FPGA,早期的信息可以聚集起来来帮助推动算法的优化和最终的SoC架构。基于FPGA的原型给项目的这个阶段带来的额外好处是,可以使用更精确的模型,它可以运行得足够快,从而与实时输入进行交互。
这类实验原型并不是本书的主题,但值得一提,因为它们是在完整的SoC项目之间使用基于FPGA的原型硬件和工具的另一种方式,从而为我们的投资获得进一步的回报。
5 在实验室外的原型使用情况
基于FPGA的验证SoC设计的原型设计的一个真正独特的方面是它独立工作的能力。这是因为fpga可以配置,也许可以从闪存EEPROM卡或其他独立的介质,而不需要从主机电脑的监督。因此,该原型可以独立运行,并用于在与其他建模技术提供的情况完全不同的情况下测试SoC设计,例如依赖于主机干预的仿真。
在极端情况下,原型可能会完全从实验室带到现场的现实环境中。一个很好的例子可能是能够将原型安装在一个移动的车辆上,并探索设计对外部噪声、运动、天线场强等变化的依赖性。例如,作者知道移动电话基带原型已经被放置在车辆中,并用于通过公共GSM网络进行移动电话呼叫。
芯片架构师和其他产品专家需要与早期采用者的客户进行交互,并演示其算法的关键特性。基于FPGA的原型设计在这个项目的早期阶段可能是一个至关重要的好处,但该方法与主流的SoC原型设计略有不同。
实验室中另一个非常流行的基于FPGA的原型的使用是在贸易展上进行新产品能力的预生产演示。我们将探索具体需要使用原型在实验室12章但现在让我们考虑使用FPGA-based原型的BBC在英国(是的,BBB)说明了实验室外使用和使用在贸易展。
6 例子:现实世界中的一个原型
英国广播公司在英国推出DVB-T2的一个研发项目证明了fpga独立运营的强大能力。DVB-T2是一种新的、最先进的开放标准,它允许高清电视从地面发射机上进行广播。
使用基于FPGA的原型设计的原因是,像大多数国际标准一样,DVB-T2技术规范花了几年时间才完成,事实上,来自世界各地的研究人员和技术人员花了3万个工程师小时。只有fpga提供了在此过程中发生变化时所需的灵活性。该规范在2008年3月被冻结,三个月后在2008年6月26日以DVB蓝皮书的形式出版。
由于BBC使用的是基于FPGA的原型,与规范工作并行,由BBC研发公司的贾斯汀·米切尔领导的BBC实现团队能够为DVB-T2开发一种基于硬件的调制器和解调器。
如图19所示的调制器是基于同步系统HAPS-51卡,使用来自Xilinx的Virtex-5 FPGA。HAPS-51卡与BBC研发公司设计的子卡相连。这个子卡提供了一个ASI接口来接受传入的传输流。然后将输入的传输流传递到FPGA,根据DVB-T2标准进行编码,并传递回子卡,直接上转换到UHF。
该调制器用于世界上第一个从直播电视发射机进行的DVB-T2传输,能够在规范发布的同一天开始。
解调器,也使用HAPS作为另一个基于FPGA的原型的基础,完成了端到端链,这在2008年9月阿姆斯特丹的IBC展览上得到了演示,所有在规范达成后的三个月内。这是一项了不起的成就,有助于建立人们对该系统已准备在2009年推出的信心。
BBC研发还为DVB-T2项目的其他基本环节做出了贡献,包括2009年3月在都灵举行的一个非常成功的“PlugFest”,5个不同的调制器和6个不同的解调器以各种模式一起工作。BBC原型机的坚固和便携式结构使它成为这种插头节活动的理想选择。
Justin解释了基于FPGA的原型为他们做了什么:
“FPGA最大的优势之一是能够跟踪传输发布日期的后期变化。在对规范进行更改时,能够快速更改调制器是很重要的。很难想象还有另一种技术能使调制器和解调器的快速发展,以及便携性,使调制器和解调器能够在现场发射机和公开展览中单独使用。”
7 基于FPGA的原型设计不能为我们做些什么?
我们开始这一章的目的是对基于FPGA的原型设计的好处和局限性提供一个平衡的看法,因此,我们应该在这里强调一些弱点来平衡之前声明的优势是正确的。
(哈哈哈哈哈哈 求生欲)
7.1.一个基于FPGA的原型机并不是一个模拟器
首先,FPGA原型不是RTL模拟器。如果我们的目标是编写一些RTL,然后尽快在FPGA中实现它,以便看看它是否有效,那么我们应该重新考虑被绕过了什么。
模拟器有两个基本组件;可以把它们看作是引擎和仪表盘。
该引擎的工作是刺激模型并记录结果。仪表板允许我们检查这些结果。我们可能会以小的增量运行模拟器,并通过我们的仪表盘进行调整,我们可能会使用一些非常复杂的刺激——但这几乎就是模拟器所做的。一个基于FPGA的原型也能做同样的事情吗?答案是否定的。
的确,FPGA是一个运行RTL“模型”的更快的引擎,但是当我们添加到设置该模型的努力中(即,这本书的主要内容)时,速度的好处很快就被淹没了。最重要的是,模拟器的仪表板部分提供了对刺激的完全控制和结果的可见性。
我们应考虑仪器FPGA的方法,以获得设计功能的一些可见性,但即使是最仪器的设计也只提供RTL模拟器仪表板中可获得的一小部分信息。
因此,模拟器是一个重复编写和评估RTL代码的更好的环境,因此我们应该一直等到模拟基本完成并且RTL相当成熟之后,然后再将其传递给基于FPGA的原型团队。我们将在第四章中更详细地考虑这个交接点。
7.2.基于FPGA的原型不是ESL
正如我们在介绍中所描述的,电子系统级(ESL)或算法工具,如同步系统的创新者或同步系统,允许将设计输入SystemC或从预定义的模型库中构建。
然后,我们在相同的工具中模拟这些设计,并探索它们的系统级行为,包括在项目的早期阶段运行软件和进行硬件-软件权衡。
为了使用基于FPGA的原型,我们需要RTL,因此它不是探索算法或架构的最佳场所,而这些算法在RTL中不经常表达。
基于FPGA的软件原型设计的优势在于,当RTL足够成熟,允许硬件平台被构建,然后软件就可以在一个更准确和更真实的环境中运行。有些人有关于蓝天的想法,并写了少量的RTL来运行在FPGA中进行可行性研究,如前面在第2.3节中所述。这是基于FPGAs的原型设计的一个次要但重要的使用,但不要与运行整个SoC的系统级或算法探索相混淆。
7.3.连续性是关键
优秀的工程师总是为工作选择正确的工具,但是应该有一种方法让正在进行的工作让其他人继续。我们应该能够用尽可能少的工作将来自ESL模拟的设计传递到基于FPGA的原型中。一些ESL工具也有一个使用高级合成(HLS)实现芯片的实现路径,它生成RTL以包含在整个SoC项目中。一个基于FPGA的原型可以使用RTL并在具有周期精度的板上运行,但同样,我们应该等到RTL相对稳定,这将在项目的硬件软件分区和架构探索阶段完成之后。
在第13章中,我们将探索如何将基于FPGA的原型链接到ESL和RTL模拟中的方法。原型可以补充这些模拟,但不能真正取代它们,所以我们将在这本书中关注什么基于FPGA的原型可以做得很好。
8 总结:那么为什么要使用基于FPGA的原型设计呢?
今天的soc是许多不同专家工作的结合,从算法研究人员、硬件设计师、软件工程师到芯片布局团队,随着项目的进展,每个团队都有自己的需求。SoC项目的成功在很大程度上取决于上述每一位专家所使用的硬件验证、硬件软件共同验证和软件验证方法。基于FPGA的原型设计为这些专家带来了不同的好处:
8.1.对于硬件团队
对于硬件团队来说,验证工具的速度对验证吞吐量起着重要的作用。在大多数SoC开发中,随着项目的成熟,有必要进行许多模拟和重复的回归测试。仿真器和模拟器是对这种类型的RTL验证最常用的平台。
然而,由于运行时间长,RTL内部或RTL和外部模拟之间的一些交互不能被重新创建,即使使用基于TLM的模拟和建模因此,一些团队使用基于FPGA的原型来为这种硬件测试提供更高性能的平台。例如,我们可以相对实时地运行整个操作系统引导,节省了几天的模拟时间来实现相同的事情。
8.2.对于软件团队
对于软件团队来说,基于FPGA的原型设计提供了一种独特的目标芯片的预芯片模型,它足够快速和准确,可以在接近最终的条件下进行软件调试。
8.3.对于整个团队
对于整个团队来说,SoC项目的一个关键阶段是软件和硬件第一次相互介绍。硬件将由最终的软件以硬件验证计划并不总是单独设想或预测的方式运行,从而暴露出新的硬件问题。这在多核系统或那些运行并发实时应用程序的系统中尤其普遍。如果这种硬件软件的引入只是在第一次芯片制造之后,那么委婉地说,在那个时候发现新的漏洞就不理想了。
一个基于FPGA的原型允许尽早将软件引入一个周期准确和快速的硬件模型。SoC团队经常告诉我们,基于FPGA的原型设计的最大好处是,当第一个芯片可用时,系统和软件就会在一天内启动并运行。
编辑:黄飞
评论
查看更多