没有合适的资源?快使用搜索试试~ 我知道了~
Richard Buchmann. Modélisation et Simulation Rapide au niveau cycle pour l’Exploration Architec-turale de Systèmes Intégrés sur puce. Micro et nanotechnologies/Microélectronique. Université Pierreet Marie Curie - Paris VI, 2006. Français. NNT : . tel-004260660HAL Id: tel-004260660https://theses.hal.science/tel-004260660于2009年10月23日提交0HAL是一个多学科的开放获取存档,用于存储和传播科学研究文献,无论其是否发表。这些文献可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。0HAL是一个多学科的开放获取存档,用于存储和传播研究水平的科学文献,无论是否发表,这些文献来自法国或国外的教育和研究机构,公共或私人实验室。0芯片上集成系统的架构建模和快速模拟0Richard Buchmann0引用此版本:0巴默尔大学博士学位论文0计算机科学专业0Richard BUCHMANN提交,以获得巴黎第六大学博士学位0模型化和快速模拟0循环级别的快速模拟用于集成系统的架构探索0集成系统的架构建模0在芯片上0于2006年12月5日提交,评审委员会成员如下0弗雷德里克∙佩特罗(Frédéric P ÉTROT)评阅人0唐吉∙里塞(Tanguy R ISSET)评阅人0阿兰∙格雷纳(Alain G REINER)导师0弗朗索瓦∙夏罗(François C HAROT)考官0让-玛丽∙谢斯诺(Jean-Marie C HESNEAUX)考官0布鲁诺∙杰戈(Bruno J EGO)考官0奥利维尔∙泰马姆(Olivier T EMAM)考官0ii0摘要0芯片上集成系统的建模需要软件应用的规范和硬件架构的建模,然后将软件部署到该硬件上。集成系统设计师的目标是找到最佳的部署解决方案,以优化硅面积、能量消耗和性能等指标。这些指标通常通过模拟来评估。由于硬件架构的参数和软件部署选择的众多,模拟所需的时间很重要。能够缩短这段时间的工具非常有价值。本论文介绍了简化硬件架构开发和加速SystemC语言描述的同步架构模型模拟的原则和工具。本文由四个章节组成:•使用SystemC将硬件组件建模为通信同步有限状态机(CFSM);•从可综合的VHDL描述生成用于模拟的SystemC模型,达到RTL级别;•验证SystemC模型编写规则;•使用完全静态调度技术进行快速模拟。这些工具使设计师能够快速构建硬件架构,使用可综合的RTL级别组件和符合CFSM模型的SystemC组件。SystemCASS以比动态调度模拟器快12倍的加速度模拟这样的架构。关键词:架构探索,SOC,建模,模拟,调度,有限状态机0iv0摘要0片上系统建模基于软件规范、硬件建模和软件到硬件的映射。系统设计师的目标是找到最佳映射,以满足规格要求并优化性能、硅面积和能量消耗。同样,系统设计师面临着由于大量硬件/软件参数而引起的架构探索问题。架构探索是耗时的,任何能够减少或简化开发过程的工具都具有重要的意义。本论文介绍了简化硬件开发和加速同步硬件仿真的原则和工具。目标仿真平台基于SystemC语言,依赖于位/周期准确模型。四个章节分别介绍了以下内容:•使用通信同步有限状态机作为模拟硬件组件和平台(CFSM)的有效手段;•从可综合的VHDL描述生成SystemC模型;• SystemC模型的规则检查;•使用完全静态调度的快速仿真。这些工具使系统设计师能够使用可综合的RTL级组件和基于CFSM模型的SystemC组件构建硬件架构。SystemCASS比使用动态调度的仿真器快12倍。关键词:架构探索、SOC、建模、仿真、调度、有限状态机vi0致谢0我要感谢AlainGreiner指导我的博士论文,并且提供了资金支持。我特别感谢他在写作过程中给予的宝贵建议。没有这些宝贵的建议,这篇论文将会有完全不同的面貌。我还要感谢FrédéricPétrot和Tanguy Risset接受了作为评审人的重任,以及François Charot、Jean-MarieChesneaux、Bruno Jego和OlivierTemam接受了作为评委的邀请。在攻读硕士学位时,我非常欣赏Frédéric Pétrot和AlainGreiner的教学能力。我要向他们表达我由衷的感激,因为他们在我选择集成电路设计自动化专业方向上起到了很大的影响。我要感谢LudovicJacomme和整个ASIM团队,感谢他们的可用性、认真和友好。很少有问题没有答案。每天与自己喜欢的同事一起工作总是很愉快的。因此,我特别感谢我的博士同事(或前博士同事):Emmanuel Viaud、Etienne Faure、François Donnet、Maxime Palus、PascaleGomez和WahidBahroun。我还要感谢我亲近的人在困难时期对我的支持。我的一些亲近的人很友好地参与了校对工作。这种努力更加值得赞赏,因为他们并不在集成电路领域工作。在大学第一年的学习中,两个人之间往往会形成深厚的友谊。我与Sébastien之间的友谊也不例外。我引用一句话:“超越恒星日”。又是一个古老的故事……我由衷地感谢Juliana,她从我博士论文的开始就一直陪伴着我,并表现出无尽的耐心。耐心是一种可贵的品质……2Modélisation CABA132.1État de l’art . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142.2Modèle d’architecture en CFSM . . . . . . . . . . . . . . . . . . . . . . . . .212.3Représentation en SystemC . . . . . . . . . . . . . . . . . . . . . . . . . . . .272.4Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373Ordonnancement statique393.1État de l’art . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .403.2Hypothèses de modélisation des modules. . . . . . . . . . . . . . . . . . . .453.3Construction de l’ordre d’exécution des processus . . . . . . . . . . . . . . . .463.4Résultats expérimentaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . .533.5Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .634Génération de modèle en CFSM654.1État de l’art . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .664.2Principe de la méthode proposée . . . . . . . . . . . . . . . . . . . . . . . . .724.3Techniques utilisées par VASY . . . . . . . . . . . . . . . . . . . . . . . . . .794.4Construction d’un automate et génération. . . . . . . . . . . . . . . . . . . .894.5Résultats expérimentaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . .984.6Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1010目录0目录 vii01 问题 1 1.1 芯片上系统建模 . . . . . . . . . . . . . . . . . . . . 2 1.2 架构探索 . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 4 1.3 架构仿真 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4 结论 . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10viiiTABLE DES MATIÈRES5Vérification sémantique1035.1Approche dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1045.2Principe de la vérification sémantique. . . . . . . . . . . . . . . . . . . . . .1075.3Construction de l’arbre de syntaxe abstraite. . . . . . . . . . . . . . . . . . .1095.4Construction du support des variables. . . . . . . . . . . . . . . . . . . . . .1105.5Identification des constantes architecturales. . . . . . . . . . . . . . . . . . .1165.6Vérification des contraintes de modélisation . . . . . . . . . . . . . . . . . . .1165.7Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1165.8Résultats expérimentaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . .1175.9Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1216Conclusions et perspectives1236.1Bilan des travaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1246.2Conclusions générales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1266.3Perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126A Annexe : Support d’une expressioniA.1Définition du support simple d’une expression . . . . . . . . . . . . . . . . . .iA.2Définition du support étendu d’une expression . . . . . . . . . . . . . . . . . .iBAcronymesiiiBibliographievListe des tableauxviiTable des figuresixListingsxiiiChapitre 1ProblématiqueSommaire1.1Modélisation d’un système intégré sur puce . . . . . . . . . . . . . . . . .21.1.1Spécification de l’application logicielle . . . . . . . . . . . . . . . .21.1.2Modélisation de l’architecture matérielle. . . . . . . . . . . . . . .21.1.3Déploiement du logiciel sur l’architecture matérielle . . . . . . . . .31.2Exploration Architecturale . . . . . . . . . . . . . . . . . . . . . . . . . .41.3Simulation architecturale . . . . . . . . . . . . . . . . . . . . . . . . . . .51.3.1Niveaux d’abstraction des modèles matériels avec représentation dutemps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61.3.2Moteur de simulation . . . . . . . . . . . . . . . . . . . . . . . . . .81.3.3Modélisation pour l’ordonnancement statique . . . . . . . . . . . . .91.3.4Vérification sémantique. . . . . . . . . . . . . . . . . . . . . . . .91.3.5Génération de modèles pour la simulation rapide . . . . . . . . . . .101.4Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102CHAPITRE 1. PROBLÉMATIQUELa simulation architecturale est une méthode incontournable pour l’évaluation et la validationdes systèmes intégrés sur puce. La recherche sur les méthodes de simulation a un impactmajeur sur l’exploration architecturale.Au cours de ce chapitre, nous présentons la modélisation d’un système intégré sur puce,puis l’exploration architecturale. Les problèmes abordés dans cette thèse sont résumés à la findu chapitre.01.1 芯片上集成系统的建模0多媒体应用(数字电视、DVD等)或面向通信的应用(网络处理器、移动终端等)被实现在集成了一个或多个处理器和少量硬件加速器的硬件架构上。芯片上集成系统的建模需要对硬件架构进行建模,描述软件应用,并将软件部署到硬件上。下面的章节将以MJPEG解压应用程序为例,说明这些不同步骤。01.1.1 软件应用规范0为了利用软件应用的粗粒度并行性,应用通常以任务图(进程或线程)的形式进行描述。任务通过点对点的通信通道进行通信。图的节点表示任务,边表示通信通道。理论模型是Kahn进程网络模型[Kah74]。应用通常完全以软件形式进行规范,以便可以直接在工作站上执行和验证。C/C++语言通常用于规范。图1.1展示了一个MJPEG图像流解压应用程序的示例。TrafficGenerator任务提供图像,其中的信息由Demux任务读取。Variable LengthDecoder(VLD)任务执行Huffman解码。InverseQuantification(IQ)任务将数据乘以一个量子,然后ZigZag任务改变数据的顺序。InverseDiscrete CosineTransform(IDCT)任务计算逆变换以重建图像块。最后,LineBuilder任务构建图像的行。Display任务显示解压缩后的图像。01.1.2 硬件架构建模0硬件架构通常是多处理器的,包括多个存储器模块和一个或多个专用协处理器,围绕一个互连微网络或总线组织。Vld01.1. 芯片上集成系统的建模0Traffic Generator0Vld IQ ZZ IDCT Line Builder0Display0通信通道0任务0Demux0图1.1 - MJPEG解压缩应用程序的任务图0架构以图表的形式表示,其中硬件组件通过信号或信号线连接。硬件组件模型称为模块。每个模块都使用硬件描述语言(如VHDL、Verilog或SystemC)进行描述。图1.2展示了一个具有四个可编程处理器的硬件架构示例,它们通过一个通用的Virtual ComponentInterface(VCI)接口微网络连接。每个处理器都有自己的数据和指令缓存。架构还包含一个协处理器和一个定时器,其中断信号连接到处理器。时钟和复位信号连接到每个组件。这些信号在图中没有表示出来。0将软件部署到硬件架构上0任务可以通过硬件或软件来实现。部署是指在可编程处理器和/或硬件加速器上定义软件任务的位置。例如,图1.3描述了将MJPEG解压应用程序部署在多处理器硬件架构上的可能方式。软件任务DEMUX、VLD、IQ、ZZ和LineBuilder被部署在可编程处理器上。与视频流的输入和输出相对应的任务TrafficGenerator和Display被实现在硬件组件上。此外,非常耗时的计算任务IDCT被实现在硬件加速器上。部署的结果是在硬件架构上放置软件任务的解决方案。寻找部署解决方案的过程称为架构探索。0第4章 问题0处理器1 硬件组件 信号0显示控制器0VCI VCI VCI VCI VCI0微型网络0协处理器0VCI VCI VCI01位 1位01位01位04个处理器 1个处理器 定时器0内存0图1.2 - 多处理器硬件架构01.2 架构探索0架构探索是在可配置的硬件架构上寻找软件应用程序部署的最佳解决方案。主要的优化标准包括:• 硅面积占用;• 集成系统的能量消耗;•循环次数的性能。硬件架构具有许多参数,如可编程处理器的数量和功率、缓存的容量和策略、通信通道的延迟和吞吐量、互连组件的类型等。由于硬件架构的参数众多以及在架构上部署软件的选择,解决方案空间是巨大的。架构探索是一个NP难优化问题。通常,该问题由设计者手动解决。设计者对有限数量的解决方案进行评估和比较,从而获得良好的部署解决方案,但不能保证这是最佳解决方案。评估解决方案的面积、功耗和性能的主要方法之一是进行架构仿真。优化工作分为多个阶段,设计者在每个阶段模拟、观察和调整架构。01.3. 架构仿真 50流量生成器 解复用器 Vld IQ IDCT 显示行构建器0显示控制器0硬件实现到...外部信号0处理器1 处理器n0外部接口0ZZ0硬件架构0软件应用程序0任务0微型网络0硬件加速器0外部存储单元0硬件组件0VCI信号 任务之间的依赖关系0内存0图1.3 - 在硬件架构上部署MJPEG应用程序0设计者模拟、观察和调整架构的过程中进行多次迭代。01.3 架构仿真0架构仿真是架构探索的成本函数。芯片上集成系统的仿真是离散时间类型的。换句话说,算法以迭代方式计算每个时间单位的系统状态。芯片上集成系统的规模和复杂性增加导致仿真时间非常长,可能需要数天的计算时间。这导致架构探索变得非常缓慢。本论文的目标是加速架构探索,以更快地收敛到良好的架构选择。为此,我们希望减少仿真时间。仿真的持续时间主要取决于模型的执行速度以及仿真引擎。下面的章节将讨论硬件模型的抽象级别选择以及用于快速仿真的仿真引擎。0第1章 问题0硬件模型的选择以及用于快速仿真的仿真引擎。01.3.1 硬件模型的抽象级别与时间表示0我们可以将硬件组件建模分为四个主要的抽象级别:• 门级别;• 寄存器传输级别(RTL);•循环精确、位精确级别(CABA);•带时间的事务级建模(TLM-T)。每个建模级别都提供了一个折衷方案,我们将在接下来的章节中介绍。0门级别0硬件组件被描述为选择的制造过程中的逻辑门互连。对于每种类型的门,都已知硅表面积、电容和电流传播时间。从这样的描述进行模拟是很慢的。门级别建模可以获得电路的时钟频率等信息。0RTL级别0架构的时钟和寄存器被识别出来。RTL级别的模型描述了寄存器之间的传输行为。与门级别的组件相比,这个级别的组件模拟速度更快。此外,这种类型的模型通常是可综合的:逻辑综合工具能够将RTL级别的模型转换为门级别。0CABA级别0CABA级别的模型在接口上是位精确和周期精确的。这样的组件可以被看作是一个黑盒子。这些模型不能直接进行综合。CABA级别的模拟比RTL级别的模拟更快。0TLM-T级别0硬件模块之间的通信被建模为带有时间戳的事务。TLM-T级别的模拟是目前最快的。架构的功能被忠实地建模,但循环次数的精度不能保证。01.3. 架构模拟 70选择抽象级别进行架构探索0模拟速度和评估精度取决于硬件架构模型的抽象级别。图1.4总结了抽象级别对模拟速度和模型精度的折衷。0模型精度 模拟速度0CABA级别(或CC)0可综合RTL级别0事务时间级别(TLM−T)0门级别0图1.4 - 抽象级别与性能/精度的折衷0TLM-T级别不能保证系统性能的精确评估。事务发生的日期可能会有几个周期的误差。0其他三个建模级别 - 门、可综合RTL和CABA -可以精确评估集成系统的能耗和系统的时间性能。CABA级别比其他两个级别更快。0在本论文中,我们关注CABA抽象级别,因为这个级别在架构探索中提供了一个很好的折衷方案。0我们已经看到执行速度取决于抽象级别和模拟引擎。08 第1章 问题01.3.2 模拟引擎0我们希望模拟的架构只包含在CABA级别描述的模块。每个模块都有一个或多个描述其行为的进程。模拟器的核心任务是在工作站上调度这些进程的执行。0调度是确定进程顺序的过程。如果该顺序是在仿真执行过程中构建的,则称为动态调度。0仿真器的核心通常包括一个离散事件仿真引擎。这种类型的引擎可以实现动态调度。当信号或端口I的值发生变化时,会生成一个事件EventI。每个进程都与一组事件相关联,称为其敏感列表。当列表中的事件生成时,调度器执行相应的进程。0进程的执行可能会修改某些信号,这些信号会进一步生成事件。只要还有事件生成,仿真就会继续进行。当当前时间没有待处理事件时,系统被认为是稳定的,仿真器可以继续增加模拟时间。0动态调度器会根据仿真的进行逐步生成调度顺序。不幸的是,它所拥有的信息不足以推断出最佳顺序。图1.5使用一个包含两个模块的架构来说明这个问题。每个模块都有一个进程。因此,我们有两个进程:A和B。事件Event I2在进程A的敏感列表中。事件Event I1和EventS1在进程B的敏感列表中。0如果信号I1和I2的值同时改变,会生成两个事件Event I1和EventI2。进程A和B会同时被唤醒,分别由Event I2和EventI1唤醒。当进程A执行时,信号S1会被修改并产生一个事件EventS1,这会再次唤醒进程B。根据调度器的实现方式,进程唤醒的实际顺序可能是以下两种之一:0• B,A,然后再次B;•A,B,然后再次B。0动态调度的结果会导致进程B不必要地被唤醒。然而,这些不必要的唤醒会增加执行时间,从而降低仿真速度。最佳的顺序应该是:A然后B。0因此,我们对静态调度技术感兴趣,其中在仿真之前计算出最佳进程激活顺序。这种调度需要额外的信息。因此,我们希望通过添加可供静态调度工具使用的信息来丰富模型。01.3. 系统仿真架构 90包含在敏感列表中的端口0信号模块0进程0B0S10S20I2 I10A0图1.5 - 涉及进程不必要唤醒的硬件架构示例01.3.3 静态调度建模0静态调度调度器的作用是确定仿真执行之前的最佳评估顺序。为此,调度器需要确定进程之间的先后关系。设计者没有提供这些先后关系。因此,这些信息必须由调度器构建。一种方法是明确每个模块之间的输出信号和输入信号之间的依赖关系。在本论文中,我们讨论了模型必须满足的约束条件,以确保静态调度的可计算性。调度器基于一个假设,即额外的信息明确了同一模块的输出信号和输入信号之间的依赖关系。下一节提供了一种验证这个假设的方法。01.3.4 语义验证0我们刚刚提出了一种基于静态调度的时间表,它基于一些假设。所做的假设如下: •模型是CABA的; •模型提供了输入/输出信号依赖性的信息,可以计算静态调度。如果这些依赖性信息没有被验证,时间表将根据错误数据进行推理。模拟器将变得不确定。因此,模拟结果可能是不正确的。在模拟之前对模型进行语义验证可以防止出现这种情况。语义验证是本论文的一个贡献之一。Au cours de ce chapitre, les différentes étapes de l’exploration architecturale des systèmesintégrés sur puce ont été brièvement présentées. Nous avons décrit une des méthodes de modé-lisation du matériel, et de déploiement du logiciel sur le matériel. Nous avons ensuite identifiéle problème de la durée de l’exploration architecturale qui devient excessive en raison du grandnombre de paramètres du système.Étant donné que la durée de l’exploration architecturale dépend de la vitesse de la simulationarchitecturale, le problème revient à accélérer l’exécution de la simulation. Nous avons discernédeux facteurs majeurs : le niveau d’abstraction des modules et le moteur de simulation.Le niveau de modélisation qui nous intéresse est le niveau CABA. La restriction quant auniveau de modélisation permet d’envisager l’emploi d’un simulateur spécialisé orienté vers lasimulation rapide.Nous avons identifié alors l’ordonnancement statique des processus comme étant une bonnesource d’accélération. Cette accélération peut être obtenue à condition d’enrichir les modèlesavec des informations explicitant les relations de dépendance entre les signaux d’entrée/sortied’un même module. Si ces informations sont partielles ou incorrectes, le déterminisme de la si-mulation est compromis. Nous avons alors discerné deux besoins. Le premier besoin est d’établirune méthode de modélisation où les dépendances entre les signaux d’entrée/sortie apparaissentclairement. Le second besoin est de vérifier les relations de dépendance fournies.L’exploration architecturale est limitée par la disponibilité des modèles de simulation rapide.Or, nous avons constaté que les modèles RTL synthétisables sont très répandus. La générationautomatique de modules CABA à partir de ces modèles RTL est donc un enjeu important.Au cours de ce chapitre, nous avons soulevé les questions suivantes auxquelles nous essaie-rons de répondre :0第1章 问题0在工业界存在许多可综合的RTL级别模型。由于这些模型是为逻辑综合而设计的,因此在模拟速度方面性能非常差。从RTL版本手动编写CABA模型可能会很耗时且繁琐。人为错误经常发生。通过工具的自动化生成可以减少转换时间和错误风险。因此,我们对从可综合RTL模型自动生成CABA级别模拟模型感兴趣。这项工作是本论文的一个贡献之一。01.3.5 生成用于快速模拟的模型0在本章中,我们简要介绍了片上系统的架构探索的不同阶段。我们描述了一种硬件建模和软件部署的方法之一。然后,我们确定了由于系统参数的数量庞大,架构探索的持续时间变得过长的问题。由于架构探索的持续时间取决于架构模拟的速度,问题归结为加速模拟执行。我们确定了两个主要因素:模块的抽象级别和模拟引擎。我们感兴趣的建模级别是CABA级别。建模级别的限制使得可以考虑使用面向快速模拟的专用模拟器。然后,我们确定了静态进程调度作为加速的良好来源。只有在模型中丰富了关于同一模块的输入/输出信号之间依赖关系的信息时,才能实现这种加速。如果这些信息是部分的或不正确的,模拟的确定性将受到威胁。然后,我们确定了两个需求。第一个需求是建立一种建模方法,其中输入/输出信号之间的依赖关系清晰可见。第二个需求是验证所提供的依赖关系。架构探索受快速模拟模型的可用性限制。然而,我们发现可综合的RTL模型非常普遍。因此,从这些RTL模型自动生成CABA模块是一个重要的问题。在本章中,我们提出了以下问题,我们将尝试回答:01.4 结论Plan de la thèseNous présentons d’abord, dans le chapitre 2, une méthode de modélisation de composantsCABA pour la simulation rapide.L’algorithme d’ordonnancement abordé au chapitre 3 permet une accélération significative lorsde la simulation de ces modèles.Le chapitre 4 décrit une méthode de génération de modèles CABA pour accroître le nombre demodèles disponibles.Dans le chapitre 5, nous décrivons une liste de règles d’écriture. Ces règles d’écriture permettentde vérifier si un modèle respecte notre méthode de modélisation.Les résultats expérimentaux sont exposés et commentés dans chacun des chapitres.Nous concluons ensuite sur l’intérêt des méthodes proposées. Puis nous exposons plusieurs pers-pectives à nos travaux.01.4. 结论 110• 如何有效地对CABA级别的硬件组件行为进行建模? • 如何加速CABA组件的模拟? •快速模拟模型的有效性规则是什么? • 如何自动验证这些规则的遵守情况? •如何自动生成快速模拟模型? 接下来的章节试图回答我们在整个问题中提出的问题。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功