一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于集成电路的动态设计流程的生成的制作方法

2021-12-14 21:12:00 来源:中国专利 TAG:


1.本公开涉及用于集成电路的动态设计流程的生成。


背景技术:

2.集成电路通常在多步骤过程中被设计和测试,该多步骤过程涉及多个专业工程师对集成电路设计执行各种不同的设计和验证任务。这些工程师通常使用各种内部或专有(例如,公司特定)集成电路设计工具链来处理使用商业电子设计自动化(eda)工具的集成电路设计工作流程的不同部分。
附图说明
3.当结合附图阅读时,从以下详细描述可以最好地理解本公开。需要强调的是,按照惯例,附图的各种特征并非按比例绘制。相反,为了清楚起见,各种特征的尺寸被任意扩大或缩小。
4.图1是用于促进集成电路的设计的系统的示例的框图。
5.图2是用于促进集成电路的设计和制造的系统的示例的框图。
6.图3是用于促进集成电路的设计的系统的示例的框图。
7.图4是用于促进集成电路的设计的过程的示例的流程图。
8.图5是用于促进集成电路的设计的迭代过程的示例的流程图。
9.图6是用于基于设计参数数据结构生成用于集成电路的寄存器传输级数据结构的过程的示例的流程图。
10.图7是用于基于寄存器传输级数据结构生成用于集成电路的物理设计数据结构的过程的示例的流程图。
11.图8是用于基于寄存器传输级数据结构生成用于集成电路的文档的过程的示例的流程图。
12.图9是用于生成多租户物理设计规范以促进集成电路的制造的过程的示例的流程图。
13.图10是用于促进集成电路的制造和测试的过程的示例的流程图。
14.图11是为了呈现web接口以促进集成电路的模板设计的选择而生成的示例显示区域的视图。
15.图12是为了呈现web接口以促进集成电路的定制设计而生成的示例显示区域的视图。
16.图13是为了呈现web接口以促进对集成电路的定制设计的访问而生成的示例显示区域的视图。
17.图14是用于生成和使用动态设计流程的过程的示例的流程图。
18.图15是用于基于寄存器传输级数据结构使用动态设计流程生成用于集成电路的物理设计数据结构的过程的示例的流程图。
19.图16是用于更新设计流程以促进集成电路的设计的系统的示例的框图。
20.图17是用于生成设计流程的过程的示例的流程图。
具体实施方式
21.公开了用于集成电路设计的自动生成和测试的系统和方法。这些系统提供了下述方法:允许对处理器或片上系统(soc)设计具有构思的单个工程师根据少量设计参数值(或通俗地说,旋钮)轻松地指定他们的芯片要求,并且该系统使许多商用电子设计自动化(eda)工具的操作自动化,以用于处理器或soc的设计和验证,并且因此单个工程师在几小时(或几分钟)内即可完成,而传统上需要由熟悉特定eda工具操作的大量专业工程师团队花费长得多的时间。
22.因此,该系统和方法能够解决以下具有挑战性的技术问题:(a)允许由理解高级要求的单个非专家设计处理器和soc,(b)轻松地允许通过生成潜在的数千种替代表达来对设计空间进行脚本化探索,并对已完成的设计进行模拟或仿真,(c)自动将来自多个第三方的知识产权(ip)核(或块)与处理器设计集成到soc中,以及(d)允许创建多租户或托管的处理器和soc服务,以生产定制但预先验证的处理器和soc。在(d)的情况下,服务可以一直扩展到将制造的处理器或soc交付给用户或云环境,例如,第3方接收处理器并将其安装到用户可以控制其操作的云中。
23.支持和支撑多个实施例的一个要素是开发和使用多个惯例和模板以允许客户提供的参数决定来自给定服务的递送资源(参见下面对服务的详细讨论)。惯例(例如,认为main是c程序的入口点)与服务特定的模板或参数化一起用于定制然后调用商业(以及开源)eda工具。例如,chisel是一种用于硬件构建的开源工具,其使用scala程序生成寄存器传输语言,诸如verilog。上面和本文讨论的用户定义的设计参数可以被模板化到配置中,或者作为参数提供,比如用于risc

v处理器的通用chisel程序,以生成用户特定的变体。其输出可以用作进一步服务等的设计参数。关键在于,这些惯例和模板/参数化的技术方法提供了极大的灵活性,以系统地自动化复杂的eda工具的工具链使用以生成经验证甚至可能仿真/模拟的处理器或soc设计。
24.可以提供web接口和/或脚本应用编程接口(api)以用于选择与一个或多个模板集成电路设计相关联的一组设计参数值。可以使用惯例对模板设计进行编码以促进模块化设计。一组设计参数值以设计参数数据结构被编码,并被传递到自动化系统,以用于使用所选的设计参数值生成和测试集成电路设计。例如,设计参数数据结构的设计参数可以包括是否支持特权模式、是否支持乘数扩展、是否支持浮点扩展、在片上存储器中是否支持纠错代码、指令缓存的大小、指令缓存的关联性、片上存储器中的数据子系统的大小、是否包括端口(例如,前端端口、系统端口、外围端口或存储器端口)、存储器端口通道的计数、端口通信协议选择、总线宽度、物理存储器保护单元的计数、是否支持jtag调试、硬件断点的计数、是否支持指令跟踪、是否支持调试直接存储器访问、本地中断的计数、是否支持平台级中断控制器、中断优先级的计数、全局中断的计数、是否支持分支预测、分支目标缓冲器条目的计数、分支历史表条目的计数和/或制造过程的选择。
25.例如,从web接口发出的单个命令可以触发寄存器传输级数据、软件开发工具包、文档和用于集成电路的物理设计文件(例如,gdsii文件)的自动生成,该物理设计文件包含
选定的设计参数值。单个命令还可以触发已生成的集成电路设计的测试计划的生成和执行。产生的设计数据和对应的测试结果可以作为例如一组文件、档案或储存库(例如,github储存库)提供给用户。该系统还可以通过实际制造集成电路或将物理设计转发给外部铸造厂以用于制造和跟踪所制造的芯片的制造、测试、运输和/或安装的进度而使用所得的设计来促进集成电路(例如,处理器或片上系统(soc))的制造。该系统可以改变芯片的设计方式,以允许非专业人士通过选择相对简单的设计参数来定制芯片,这可以实现对实际rtl或物理芯片的快速设计空间探索。例如,可以使用diplomacy、chisel和firrtl的组合从一组高级配置设定开发设计良好的芯片。通过使用单一语言(例如,scala)来控制设计流水线中的多个任务,可以有效地实现系统。嵌入函数式编程语言可以提供更大的灵活性并且可以提高设计者/用户的生产力。
26.在一些实施方式中,集成电路设计的现场可编程门阵列(fpga)和/或其他仿真模型被生成并用于测试。fpga模型可以加载到用于验证测试的基于云的fpga上。该系统可以实现ip核的简单配置。可以在该过程期间提供反馈(例如,集成电路的性能、功率和面积估计),并让用户了解订购的芯片在哪里(例如,我的芯片在制造过程或出货跟踪中的位置)。系统可以提供对于设计的价格估计,即,获取所得芯片的成本是多少。例如,可以提供nre(非经常性工程成本)和每单位成本两者的估计。系统可以使用基于模板的芯片设计(例如,从供应商或第三方提供的ip/配置混合模板开始)。这些芯片或ip核模板可以是开源的和/或每个用户偏好的私有的,这将使用特定的nre进行开发。
27.一些实施方式使用版本控制系统(例如,git/github)来维护模板设计以及存储和/或共享定制的集成电路设计和相关数据。版本控制系统可以提供源代码管理功能并实现设计的进一步定制。版本控制服务可以针对想要进一步定制芯片的高级用户。例如,在基于一组设计参数值自动生成初始设计之后,系统的控制器可以为它们提供存储库(例如,git),其中,基本构建块连线在一起。用户现在可以添加附加的ip核或定制的源代码。例如,用户可以合并他们的定制ip核或更改源代码。例如,用户可以通过将特定文件提交到存储库来扩展测试计划或文档。
28.例如,上面讨论的现有项目可以按照惯例来表现。因此,例如,用户可以使用正确的惯例向其定制ip核目录中的文档添加章节。在一些实施方式中,可以提供“ip存储”以促进设计的共享,其中遵循惯例的良好设计的ip核可以被拉入另一个设计,并且所有上述过程都以自动化方式在其上工作。例如,这些可能是完整的实施方式,或者只是已经流片的fpga演示。ip存储可以实现将第3方ip核以编程方式安装到设计中。例如,遵循适用的模块化设计惯例的git中的目录可以轻松地从系统的web应用中添加/选择。这种集成来自多方的ip核的能力解决了一个具有挑战性的技术问题,因为来自两个不同供应商的核通常可能针对不同的eda设计和验证工具使用/流程进行预先设计,例如,一个核可能需要使用eda工具进行与另一个核的附加不同处理。
29.在第一方面,本说明书中描述的主题可以体现在包括以下的系统中:web应用服务器,该web应用服务器被配置成基于所接收的输入生成设计参数数据结构,其中,设计参数数据结构包括集成电路设计的设计参数的值,并且该web应用服务器被配置成显示反映集成电路的设计参数的值变化的模板设计的自动更新框图;寄存器传输级服务模块,该寄存器传输级服务模块被配置成基于设计参数数据结构生成集成电路的寄存器传输级数据结
构;软件开发工具包服务模块,该软件开发工具包服务模块被配置成基于寄存器传输级数据结构生成用于集成电路的软件开发工具包;物理设计服务模块,该物理设计服务模块被配置成基于寄存器传输级数据结构生成用于集成电路的物理设计数据结构;验证服务模块,该验证服务模块被配置成基于设计参数数据结构和验收标准生成用于集成电路的测试计划;以及控制器,该控制器被配置成访问设计参数数据结构,利用设计参数数据结构调用寄存器传输级服务模块以获得寄存器传输级数据结构,利用寄存器传输级数据调用软件开发工具包服务模块结构以获得软件开发工具包,利用寄存器传输级数据结构调用物理设计服务模块以获得物理设计数据结构,调用验证服务模块以获得测试计划,以及基于测试计划、寄存器传输级数据结构、软件开发工具包和物理设计数据结构调用用于集成电路的测试以获得一组测试结果。
30.在第二方面,本说明书中描述的主题可以体现在方法中,该方法包括:访问设计参数数据结构,其中,设计参数数据结构包括集成电路设计的设计参数值;响应于标识设计参数数据结构的命令,基于设计参数数据结构生成用于集成电路的寄存器传输级数据结构;响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构生成用于集成电路的软件开发工具包;响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构生成用于集成电路的物理设计数据结构;响应于标识设计参数数据结构的命令,基于设计参数数据结构和验收标准生成用于集成电路的测试计划;响应于标识设计参数数据结构的命令,基于测试计划、寄存器传输级数据结构、软件开发工具包和物理设计数据结构调用用于集成电路的测试以获得一组测试结果;以及传输、存储或显示基于寄存器传输级数据结构、软件开发工具包、物理设计数据结构和测试结果的设计数据结构。
31.在第三方面,本说明书中描述的主题可以体现在包括网络接口、存储器和处理器的系统中,其中,存储器包括指令,该指令可由处理器执行以使得系统:访问设计参数数据结构,其中,设计参数数据结构包括集成电路设计的设计参数值;响应于标识设计参数数据结构的命令,基于设计参数数据结构生成用于集成电路的寄存器传输级数据结构;响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构生成用于集成电路的软件开发工具包;响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构生成用于集成电路的物理设计数据结构;响应于标识设计参数数据结构的命令,基于设计参数数据结构和验收标准生成用于集成电路的测试计划;响应于标识设计参数数据结构的命令,基于测试计划、寄存器传输级数据结构、软件开发工具包和物理设计数据结构调用用于集成电路的测试以获得一组测试结果;以及使用网络接口传输基于寄存器传输级数据结构、软件开发工具包、物理设计数据结构和测试结果传输设计数据结构。
32.在第四方面,本说明书中描述的主题可以体现在方法中,该方法包括:接收设计参数文件,其中,设计参数文件包括集成电路设计的设计参数的值;基于设计参数文件自动生成用于集成电路的寄存器传输级文件、软件开发工具包和物理设计文件;以及基于寄存器传输级文件、软件开发工具包和物理设计文件自动调用用于集成电路的测试以获得一组测试结果。
33.在第五方面,本说明书中描述的主题可以体现在系统中,该系统包括:web应用服务器,该web应用服务器被配置成基于所接收的输入生成设计参数数据结构,其中,设计参数数据结构包括集成电路设计的设计参数的值,被配置成显示反映集成电路的设计参数的
值变化的模板设计的自动更新框图,并被配置成发出构建集成电路设计的命令;以及控制器,该控制器被配置成响应于构建集成电路设计的命令而访问设计参数数据结构,利用设计参数数据结构调用寄存器传输级服务模块以获得寄存器传输级数据结构,利用寄存器传输级数据结构调用软件开发工具包服务模块以获得软件开发工具包,利用寄存器传输级数据结构调用物理设计服务模块以获得物理设计数据结构,调用验证服务模块以获得测试计划,并且基于测试计划、寄存器传输级数据结构、软件开发工具包和物理设计数据结构调用用于集成电路的测试以获得一组测试结果。
34.在第六方面,本说明书中描述的主题可以体现在方法中,该方法包括:访问设计流程配置数据结构,其中,设计流程配置数据结构以工具控制语言编码;基于设计流程配置数据结构,从一组流程模块中选择多个流程模块,其中,该组流程模块中的每个流程模块以工具控制语言向相应的电子设计自动化工具提供应用编程接口;基于设计流程配置数据结构,将设计流程生成为包括所选流程模块作为顶点的有向无环图;基于一个或多个输入集成电路设计数据结构,使用设计流程来控制所选流程模块的相应电子设计自动化工具,而生成输出集成电路设计数据结构;以及传输、存储或显示输出的集成电路设计数据结构。
35.在第七方面,本说明书中描述的主题可以体现在包括网络接口、存储器和处理器的系统中,其中,存储器包括指令,该指令可由处理器执行以使得系统:访问设计流程配置数据结构,其中,设计流程配置数据结构以工具控制语言编码;基于设计流程配置数据结构,从一组流程模块中选择多个流程模块,其中,该组流程模块中的每个流程模块以工具控制语言向相应的电子设计自动化工具提供应用编程接口;基于设计流程配置数据结构,将设计流程生成为包括所选流程模块作为顶点的有向无环图;以及基于一个或多个输入集成电路设计数据结构,使用设计流程来控制所选流程模块的相应电子设计自动化工具,而生成输出集成电路设计数据结构。
36.在第八方面,本说明书中描述的主题可以体现在包括指令的非暂时性计算机可读存储介质中,该指令在由处理器执行时促进以下操作的执行,该操作包括:访问设计流程配置数据结构,其中,设计流程配置数据结构以工具控制语言编码;基于设计流程配置数据结构,从一组流程模块中选择多个流程模块,其中,该组流程模块中的每个流程模块以工具控制语言向相应的电子设计自动化工具提供应用编程接口;基于设计流程配置数据结构,将设计流程生成为包括所选流程模块作为顶点的有向无环图;基于一个或多个输入集成电路设计数据结构,使用设计流程来控制所选流程模块的相应电子设计自动化工具,而生成输出集成电路设计数据结构;以及传输、存储或显示输出的集成电路设计数据结构。
37.图1是用于促进集成电路的设计的系统100的示例的框图。系统100包括集成电路设计服务基础设施110,该集成电路设计服务基础设施处理经由网络106上的通信从web客户端102和脚本api客户端104接收的请求。例如,集成电路设计服务基础设施110可以被实现为在一个或多个联网计算设备上运行的软件。例如,集成电路设计服务基础设施110可以在图3的系统300上实现。集成电路设计服务基础设施110包括:web应用服务器112;脚本api服务器114;以及控制器120,该控制器使用存储在设计参数数据结构122中的基于设计参数值的服务(130、140、150、160、170和180)的集合来确定集成电路设计。例如,系统100可以实现图4的过程400。例如,系统100可以实现图4的过程400。例如,系统100可以实现图5的过程500。例如,网络106可以是局域网或宽阵列网络(例如,因特网)。
38.系统100包括web客户端102,其可以用于与集成电路设计服务基础设施110交互并控制集成电路设计服务基础设施。例如,web客户端102可以包括运行计算设备(例如,台式计算机、笔记本电脑、平板电脑或智能手机)的web浏览软件。web客户端102可以显示由web应用服务器112生成和从web应用服务器接收的web接口。例如,web接口可以包括使用户能够为集成电路设计选择设计参数值的设计旋钮。
39.系统100包括可以用于与集成电路设计服务基础设施110交互并控制集成电路设计服务基础设施的脚本api客户端104。例如,脚本api客户端104可以包括运行计算设备(台式计算机、笔记本电脑、平板电脑或智能手机)的脚本(例如,python脚本、java脚本或ruby脚本),该计算设备经由网络通信(例如,使用传输控制协议(tcp)会话)与脚本api服务器114通信。脚本api客户端104可以生成对控制器120的api调用,并使用api调用来选择用于一个或多个集成电路设计的设计参数值,这些设计参数值以设计参数数据结构122(例如,设计参数文件)被编码,并且命令控制器120基于设计参数数据结构122生成和测试一个或多个集成电路设计。在一些实施方式中,脚本api客户端104的脚本可以用于控制设计空间上的迭代以测试设计参数值的大量候选排列。
40.集成电路设计服务基础设施110包括生成web接口以促进集成电路设计服务基础设施110的控制的web应用服务器112。web接口可以包括配置旋钮(例如,图标或字段),该配置旋钮可以选择用于集成电路设计的设计参数值。web应用服务器112可以被配置成基于所接收的输入(例如,由用户与web客户端102处的配置旋钮交互引起)生成设计参数数据结构122(例如,设计参数文件或设计参数数据库)。设计参数数据结构122可以包括集成电路设计的设计参数值。设计参数数据结构122可以包括对模板设计(例如,用于ip核的模板设计)的引用,其可以基于设计参数的值进行修改。例如,设计参数数据结构122可以包括javascript对象符号(json)文件,其中具有使用web接口的旋钮选择的设计参数的值。web应用服务器112可以被配置成显示反映集成电路(例如,ip核或soc)的设计参数值的变化的模板设计的自动更新框图。例如,web应用服务器112可以生成图11的显示区域1110。例如,web应用服务器112可以生成图12的显示区域1210。例如,web应用服务器112可以生成图13的显示区域1310。在一些实施方式中,web应用服务器112被实现为在与控制器120相同的计算设备上运行的软件(例如,python或django前端工具)。在一些实施方式中,web应用服务器112被实现为在与控制器120分离的计算设备上运行的软件。在一些实施方式中,web应用服务器112经由api调用与控制器120通信并且甚至可以经由脚本api服务器114将api调用路由到控制器。
41.由web应用服务器112生成的web接口可以包括用于选择多种设计参数值的旋钮。例如,旋钮可以用于选择二元设计参数(例如,带有复选框或径向按钮图标的包括乘数块或不包括乘数块)。例如,旋钮可以用于从离散的设计参数选项列表中进行选择(例如,使用下拉菜单选择制造过程)。例如,旋钮可以用于选择在一定范围内变化的值(量化)(例如,可以通过在文本字段中输入值或通过移动滑块图标来调整中断数量或时钟频率)。web应用服务器112可以通过基于利用web接口的另一个旋钮做出的选择来改变或禁用旋钮来反映不同设计参数之间的依赖性。因此,设计参数值的选择可以约束或限制其他设计参数的选择。例如,当使用与多个存储器端口相关的旋钮来选择零个存储器端口以包含在集成电路中时,可以禁用(例如,变灰)与数据缓存设计参数相关的旋钮。
42.由web应用服务器112生成的web接口可以包括自动更新框图,该自动更新框图反映了设计参数值的当前选择,因为这些值是使用web接口的旋钮改变的。自动更新框图可以提供正在生成的设计参数数据结构122的状态的视觉表示。
43.由web应用服务器112生成的web接口可以包括基于利用web接口的旋钮选择的设计参数的当前值的设计的功率、性能和/或面积估计。在一些实施方式中,功率、性能和/或面积估计可以响应于使用web接口的旋钮做出的改变而实时更新。例如,web应用服务器112可以访问用作功率、性能和面积(ppa)的模型的设计空间的样本表,并且给定旋钮设定,这些数字可以从模型中计算(例如,使用插值)并立即显示。在一些实施方式中,由web应用服务器112生成的web接口可以包括功率、性能和/或面积估计,其基于在基于使用集成电路设计服务基础设施110已生成和测试所选设计参数值的设计之后可用的完全生成的设计来确定。
44.由web应用服务器112生成的web接口可以包括图标,该图标可以用于向控制器120发出命令以基于以设计参数数据结构编码的一组设计参数值来构建集成电路设计。由web应用服务器112生成的web接口可以在集成电路设计被生成、测试和/或制造时提供关于集成电路设计的状态更新。
45.集成电路设计服务基础设施110包括脚本api服务器114,其被配置成接收api调用并将api调用传送到控制器120。例如,脚本api服务器114可以促进控制器120与脚本api客户端104之间的网络通信(例如,使用tcp)。脚本api服务器114可以用于基于经由应用编程接口接收的输入生成设计参数数据结构122(例如,设计参数文件或设计参数数据库)。例如,控制器120的api可以是代表性状态传输(rest)api。使用脚本api可以使得用户轻松测试各种设计参数值选择,以有效地搜索设计空间。例如,用户可以编写脚本,以利用小参数调整以编程方式测试云中的数千个设计。可以启用自动回归测试。用户可以编写调用api的定制控制器。
46.集成电路设计服务基础设施110包括控制器120,其被配置成基于设计参数数据结构122生成集成电路设计并测试该设计。例如,控制器120可以被配置成访问设计参数数据结构122,利用设计参数数据结构122调用寄存器传输级服务模块130以获得寄存器传输级数据结构132,利用寄存器传输级数据结构132调用软件开发工具包服务模块140以获得软件开发工具包142,利用寄存器传输级数据结构132调用物理设计服务模块160以获得物理设计数据结构162,调用验证服务模块180以获得测试计划182,以及基于测试计划182、寄存器传输级数据结构132、软件开发工具包142和物理设计数据结构162调用集成电路的测试以获得一组测试结果190。控制器120可以包括应用编程接口,该应用编程接口使得脚本(例如,经由脚本api服务器114)能够处理多个设计参数数据结构。例如,控制器120可以响应于由web应用服务器112或脚本api服务器114发出的构建集成电路设计的命令执行动作以生成集成电路设计。例如,控制器120可以被实施为在图3的系统300上运行的软件。
47.例如,控制器120可以被实现为云服务。控制器120可以基于设计参数数据结构(例如,设计参数文件)中的设计参数来实现用于集成电路设计的有序构建流水线。例如,集成电路可以是ip核。例如,集成电路可以是片上系统。控制器120可以将预先配置的语义用于从设计构建流水线中的先前阶段的输出中排除的输入和服务。控制器120可以将设计参数数据结构(例如,json文件)作为来自web应用服务器112或脚本api服务器114的输入并输出
设计数据结构(例如,集成电路设计的设计文件和/或测试结果的压缩存档),其包括在有序设计流水线中使用的各种服务(130、140、150、160、170和/或180)的输出。例如,由控制器120实现的设计流水线可以包括四个阶段。在第一阶段,可以调用寄存器传输级服务模块130以基于设计参数数据结构122生成寄存器传输级数据结构132。在第二阶段,取决于寄存器传输级数据结构的多个设计服务可以并行调用以生成相应的设计相关数据结构。例如,软件开发工具包服务模块140、文档服务模块150、物理设计服务模块160和现场可编程门阵列设计服务可以并行或以任何顺序调用以基于寄存器传输级数据结构132和设计参数数据结构122生成软件开发工具包142、文档152、物理设计数据结构(例如,gdsii文件)以及现场可编程门阵列仿真数据结构172(例如,fpga仿真文件)。在第三阶段,可以调用验证服务模块180以生成测试计划182,并且可以通过调用测试来执行测试计划182以获得用于集成电路设计的测试结果190。例如,设计验证测试可以取决于寄存器传输级数据结构132、软件开发工具包142、物理设计数据结构162和/或现场可编程门阵列仿真数据结构172。例如,调用的验证测试可以由控制器120、验证服务模块180和/或外部服务(例如,经由网络106上的通信访问的基于云的fpga或仿真服务)直接执行。在第四阶段,可以制造经验证的集成电路设计。例如,可以通过将基于物理设计数据结构(例如,gdsii文件)的设计数据结构发送(例如,经由网络106上的通信)到集成电路制造设施的服务器来发起制造。在一些实施方式中(图1中未示出),用于制造集成电路的集成电路制造设备可以包括在集成电路设计服务基础设施110中。
48.控制器120可以被配置成处理向web应用服务器112报告错误和/或反馈以用于中继到web客户端102。控制器120可以被配置成处理来自其他租户/公司/用户的多个请求。控制器120可以被配置成管理云中的工作负荷。控制器120可以被配置成通知用户在哪里获得设计流水线的结果(例如,制造的芯片和/或设计测试结果)。例如,控制器120可以被配置成在云环境中协调或管理启动fpga以用于进行测试并将登录凭证提供回web应用服务器112以用于中继到web客户端102。
49.在一些实施方式中,控制器120可以将生成的集成电路设计作为存储库(例如github存储库)返回,其中基本构建块连线在一起。访问存储库的用户现在可以添加附加的ip核或定制源代码。例如,生成的设计数据结构可以被传送到或由控制器120存储到github储存库,并且github储存库的访问凭证可以被递送给用户(例如,经由web接口)。
50.集成电路设计服务基础设施110包括寄存器传输级服务模块130,其被配置成基于设计参数数据结构122生成用于集成电路的寄存器传输级数据结构132。例如,寄存器传输级服务模块130可以实现为scala代码。例如,可以使用scala代码实现寄存器传输级服务模块130。例如,可以使用chisel来实现寄存器传输级服务模块130(在https://chisel.eecs.berkeley.edu/chisel

dac2012.pdf可获得)。例如,可以使用firrtl(对于寄存器传输级的灵活中间表示)来实现寄存器传输级服务模块130(在https://aspire.eecs.berkeley.edu/wp/wpcontent/uploads/2017/11/specificati on

for

the

firrtl

language

izraelevitz.pdf可获得)。例如,可以使用diplomacy来实现寄存器传输级服务模块130(在https://carrv.github.io/2017/papers/cook

diplomacy

carrv2017.pdf可获得)。例如,寄存器传输级服务模块130可以使设计良好的芯片能够从使用diplomacy、chisel、firrtl的混合的高级配置设定集自动开发。寄存器传输级服务模块
130可以将设计参数数据结构122(例如,json文件)作为输入,并根据设计参数数据结构的设计参数(例如,如使用由web应用服务器112生成的web接口的配置旋钮所指定的)输出用于芯片和/或所选核ip的寄存器传输级数据结构(例如,verilog文件)。寄存器传输级数据结构可以包括更新的配置设定以驱动设计流水线的未来阶段。例如,更新的配置设定可以包括核的具体存储器映射、实际端口、时钟设计、布局规划信息和/或由寄存器传输级别服务模块130确定的其他配置信息。例如,可以实施图6的过程600以基于设计参数数据结构122生成用于集成电路的寄存器传输级数据结构132。
51.集成电路设计服务基础设施110包括软件开发工具包服务模块140,其被配置成基于寄存器传输级数据结构132生成用于集成电路的软件开发工具包142。例如,软件开发工具包服务模块140可以访问用于由设计参数数据结构122标识的模板集成电路设计的现有工具链或软件开发工具包。现有工具链或软件开发工具包(例如,risc

v工具链/sdk)可以使用适用于可配置性的惯例来建立。例如,现有工具链或软件开发工具包可以被组织成与设计参数数据结构122的设计参数相对应的子模块。软件开发工具包服务模块140可以归纳现有工具链或软件开发工具包以响应于设计参数数据结构122中的设计参数值。软件开发工具包服务模块140可以将寄存器传输级数据结构132作为输入,并基于寄存器传输级数据结构132和/或设计参数数据结构122生成软件开发工具包142。例如,软件开发工具包142可以包括编译器、汇编器、报头文件、库、引导加载程序、内核驱动器和/或用于全功能sdk/计算环境的其他工具。例如,软件开发工具包服务模块140可以被实现为在图3的系统300上运行的python脚本。在一些实施方式中,软件开发工具包服务模块140被配置成解析寄存器传输级数据结构132、生成用于工具和构建的选项、响应于存储器映射生成报头文件、从现有工具链或软件开发工具包中选择适当的示例、为目标模拟器(例如,qemu(快速模拟器))生成相关配置文件以便它们可以在另一处理器(例如,x86)上运行您的特定设计,以及为verilog模拟器和物理fpga板生成加载程序以进行闪存。产生的软件开发工具包142可以在云中构建和测试(例如,在提供给客户之前),这可以在我们知道这些事物在这种配置中起作用的情况下提供高价值。得到的软件开发工具包142可以用控制器120注册以交付给用户(例如,经由web接口)。
52.集成电路设计服务基础设施110包括文档服务模块150,其被配置成基于寄存器传输级数据结构132生成用于集成电路的文档152。例如,文档服务模块150可以利用prince(在https://www.princexml.com/可获得)。例如,文档服务模块150可以利用ascii doc(在http://asciidoc.org/可获得)。例如,文档服务模块150可以访问由设计参数数据结构122标识的模板集成电路设计的预加载模块化手册。模块化手册可以使用适用于可配置性的惯例来建立。例如,可以将模块化手册组织成与设计参数数据结构122的设计参数相对应的子模块。在一些实施方式中,模块化手册作为多个部件存储在用于模板的现有sdk的对应目录中。文档服务模块150可以归纳预加载的模块化手册以响应于设计参数数据结构122中的设计参数值。例如,没有乘法器的risc

v芯片的文档152可以省略关于乘数指令的文档,或者类似地,可以生成具有向量扩展的risc

v芯片的文档152以包括用于向量扩展的合适文档。文档服务模块150可以将寄存器传输级数据结构132作为输入,并基于寄存器传输级数据结构132和/或设计参数数据结构122生成文档152(例如,以html和/或pdf格式)。文档服务模块150可以通过与rtl后输出一起工作来正确地记录存储器映射/端口。例如,文档服务模块
150可以利用类似于react框架的文档框架(例如,js html框架)。在一些实施方式中,文档块具有相应的python代码段,该代码段接收rtl输出配置文件并将其分解为ascii doc所需的组块并调用内容生成。例如,文档服务模块150可以实现图8的过程800。在一些实施方式中,文档152以html格式和pdf格式两者输出。例如,生成的文档152可以用控制器120注册以允许为用户打包(例如,以存档或其他数据结构的形式传送到web客户端102)。
53.集成电路设计服务基础设施110包括物理设计服务模块160,其被配置成基于寄存器传输级数据结构132生成集成电路的物理设计数据结构162。例如,物理设计服务模块160可以利用专有或开源综合和布局布线工具(例如,synopsys、cadence和/或mentor工具)。例如,物理设计服务模块160可以利用synopsys工具,包括设计编译器、ic编译器、primetime、formality和/或starextract。例如,物理设计服务模块160可以实现逻辑等效检查。例如,物理设计服务模块160可以利用静态时序分析工具。例如,物理设计服务模块160可以实现设计规则检查(drc)和/或布局对原理图(lvs)检查。例如,物理设计服务模块160可以实现设计的快速迭代并且以更易于理解的格式向用户提供反馈(例如,功率、性能和面积估计),这可以增加价值。例如,物理设计服务模块160可以用技术性较低的术语回报是否存在任何问题,并行化和平衡工作负载,并突出包括在物理设计数据结构162中的工具的输出的重要部件。物理设计服务模块160可以将寄存器传输级数据结构132(例如,verilog和/或布局规划指南)作为输入,并基于寄存器传输级数据结构132和/或设计参数数据结构122生成物理设计数据结构162(例如,包括gdsii文件或oasis文件)。例如,物理设计服务模块160可以实现图7的过程700。在一些实施方式中,物理设计服务模块160可以在云中管理和编排物理设计工具链。例如,物理设计服务模块160可以管理许可文件、管理计算资源(例如,cpu周期、存储器和/或磁盘使用)并平衡用户支付意愿与结果速度、处理从工具到工具的数据库移动,并管理对第三方ip核的访问(例如,使用集成电路设计服务基础设施110的一些用户/租户可能缺乏对可用于定制给其他用户/租户的一些ip核的访问权限)。例如,用户可以通过由web应用服务器112生成的web接口输入服务和/或定价偏好。例如,物理设计服务模块160可以使用模板化设计,这可以允许显着的设计重复使用并且物理设计服务模块160可以标识那些组合并减少工作量。例如,物理设计服务模块160可以通过将工具问题转化为可管理的反馈并以可交付的格式向用户(例如,web客户端102的用户)提供工具的实际误差/输出,而提供更好或更紧凑的误差/问题报告。在一些实施方式中,物理设计服务模块160可以找到跨多个设计共同使用的共同配对(例如,ddr控制和phy)。所标识配对的物理设计块可以跨设计重复使用以提高效率。在一些实施方式中,物理设计服务模块160可以被配置成从先前的物理设计尝试中学习,并且为下一次尝试自动调整某些参数。例如,当被调用以生产满足特定性能基准的芯片同时保持在尚未满足的特定面积/功耗约束下(例如,不够快或过大或耗电)时,物理设计服务模块160可以提出建议的替代参数或者只是在寻求更接近需求的方向上迭代。
54.集成电路设计服务基础设施110包括现场可编程门阵列服务模块170,其被配置成基于寄存器传输级数据结构132和软件开发工具包142生成用于集成电路的现场可编程门阵列仿真数据结构172。例如,现场可编程门阵列服务模块170可以被配置成利用基于云的现场可编程门阵列(fpga)。例如,现场可编程门阵列服务模块170可以被配置成利用基于云的fpga合成工具。例如,现场可编程门阵列服务模块170可以被配置成利用仿真平台,诸如
palladium(来自cadence)、veloce(来自mentor graphics)和/或zebu(来自synopsys)。例如,现场可编程门阵列服务模块170可以使缺乏如何构建这些复杂平台的知识的用户能够生成用于fpga测试的工作文件(例如,在云中)。例如,现场可编程门阵列服务模块170可以被配置成处理模拟设备硬盘驱动器和网络设备。例如,现场可编程门阵列服务模块170可以向用户(例如,web客户端102的用户)提供登录,以使得用户能够登录到芯片并且轻松地运行基准测试。例如,现场可编程门阵列服务模块170可以将寄存器传输级数据结构132和软件开发工具包142作为输入,并基于寄存器传输级数据结构132、软件开发工具包142和/或设计参数数据结构122生成现场可编程门阵列仿真数据结构172(例如,仿真文件和支持材料)。一旦设计以寄存器传输级格式(例如,作为verilog)可用,现场可编程门阵列服务模块170可以生成文件以使设计能够在fpga或者在仿真平台上运行。在一些实施方式中,现场可编程门阵列服务模块170可以提供包括外围设备在内的整个系统一起操作的仿真(例如,需要匹配存储器时序)。例如,仿真的外围设备可以是用户在由web应用服务器112生成的web接口中选择的实际外围设备。例如,如果用户选择了具有64位ddr接口的芯片,则fpga服务可以构建一个fpga模型,其使得最终用户产生仿真芯片具有64位接口的仿真。例如,如果用户选择芯片带有显示控制器,则fpga服务应提供带有显示控制器的仿真环境。例如,现场可编程门阵列服务模块170可以基于参数化集成电路设计实现对现有工具的高度详细的使用。例如,现场可编程门阵列服务模块170可以被配置成使用fpga/仿真器工具链、被配置成建立仿真设备、被配置成编译仿真设备、将仿真设备加载到所请求的云中、以及提供登录和/或启动所请求的基准测试并返回结果作为测试结果190的一部分。例如,现场可编程门阵列服务模块170可以将最终的fpga/仿真器设计和/或凭证(例如,登录名和密码)注册回控制器120。在一些实施方式中,控制器120被配置成使用基于现场可编程门阵列仿真数据结构172编程的现场可编程门阵列调用测试,以获得仿真结果,其中,现场可编程门阵列门阵列在云服务器上运行。例如,控制器可以使用凭证来调用在云服务器上操作的现场可编程门阵列上的测试。
55.集成电路设计服务基础设施110包括验证服务模块180,其被配置成基于设计参数数据结构122和验收标准生成用于集成电路的测试计划182。例如,验证服务模块180可以被配置成利用verilog模拟器(例如,开源verilog模拟器)。例如,验证服务模块180可以被配置成利用fpga。例如,验证服务模块180可以被配置成利用软件模拟器,诸如快速模拟器(qemu)、spike和/或其他软件模拟器。在一些实施方式中,多个目标测试平台看起来相同,因此验证服务模块180能够轻松地跨不同成本选项移动工作负载(例如,使用物理fpga比使用抢占式云实例更便宜)。例如,验证服务模块180可以采用寄存器传输级数据结构132(例如,包括verilog rtl)、软件开发工具包142、物理设计数据结构(例如,包括gdsii文件)、测试语料库以及对应的验收标准作为输入并生成用于集成电路设计的测试计划182和/或测试结果190。例如,验证服务模块180的输入可以由控制器120提供。在一些实施方式中,用户定义的控制器或更参数化的控制器被配置成响应于变化的验收标准。给定验收标准和设计配置,可以自动生成测试计划。例如,验证服务模块180可以被配置成定义环境、在给定测试语料库和基于设计参数数据结构122生成的硬件和软件设计的情况下过滤掉它不能运行的测试、生成测试计划182以包括用于集成电路设计的所选测试的序列。例如,环境可以定义测试平台。在被测设备之外,测试台中可能有附加部件,并且在设计中标准化这些环境可能
是有益的。例如,可以在测试平台内标准化结束测试的方式。一些测试平台可以定义cpu可以写入的寄存器,该寄存器被定义在测试台中,而一些测试平台会以某种方式摆动通用输入/输出(gpio)引脚。给定测试计划182,许多测试平台可以用于所有测试。在一些实施方式中,验证服务模块180可以根据测试计划182执行或以其他方式调用测试并收集包括在测试结果190中的结果。例如,测试计划182和/或部分或全部测试结果190可以被回报到控制器120。
56.图2是用于促进集成电路的设计和制造的系统200的示例的框图。系统200包括web客户端102、脚本api客户端104、网络106、集成电路设计服务基础设施110、fpga/仿真器服务器220以及制造商服务器230。例如,用户可以利用web客户端102或脚本api客户端104命令集成电路设计服务基础设施110以基于用户为一个或多个模板集成电路设计选择的一组设计参数值自动生成集成电路设计。
57.例如,集成电路设计服务基础设施110可以(例如,经由网络106上的网络通信)调用对由fpga/仿真服务器220执行的结果设计的测试,该fpga/仿真服务器运行一个或多个fpga或者其他类型的硬件或软件模拟器。例如,集成电路设计服务基础设施110可以使用基于现场可编程门阵列仿真数据结构172编程的现场可编程门阵列来调用测试,以获得仿真结果。现场可编程门阵列可以在fpga/仿真服务器220上操作,该fpga/仿真服务器可以是云服务器。测试结果可以由fpga/仿真服务器220返回到集成电路设计服务基础设施110并以有用的格式中继给用户(例如,经由web客户端102或脚本api客户端104)。
58.集成电路设计服务基础设施110还可以促进在与制造商服务器230相关联的制造设施中使用集成电路设计制造集成电路。在一些实施方式中,基于物理设计数据结构162的物理设计规范(例如,gdsii文件)被传输到制造商服务器230以调用集成电路的制造(例如,使用相关制造商的制造设备)。例如,制造商服务器230可以托管铸造厂流片网站,该铸造厂流片网站被配置成接收物理设计规范(例如,作为gdsii文件或oasis文件)以调度或以其他方式促进集成电路的制造。在一些实施方式中,集成电路设计服务基础设施110支持多租户以允许多个集成电路设计(例如,来自一个或多个用户)分担固定制造成本(例如,掩模版/掩模生成和/或穿梭晶片测试)。例如,集成电路设计服务基础设施110可以使用固定封装(例如,准标准化封装),该固定封装被定义以降低固定成本并促进掩模版/掩模、晶片测试和其他固定制造成本的分担。例如,物理设计规范可以包括来自一个或多个相应物理设计数据结构的一个或多个物理设计以便促进多租户制造。例如,集成电路设计服务基础设施110可以实施图9的过程900以生成多租户物理设计规范。
59.响应于物理设计规范的传输,与制造商服务器相关联的制造商可以基于集成电路设计来制造和测试集成电路。例如,相关制造商(例如,铸造厂)可以执行光学邻近校正(opc)和类似的流片后/生产前处理、制造集成电路、周期或异步更新集成电路设计服务基础设施110(例如,经由与控制器120或web应用服务器112的通信)的制造过程状态、执行适当的测试(例如,晶片测试)并发送到封装厂进行封装。封装厂可以从制造商接收完成的晶片或管芯和测试材料,并且周期或异步更新集成电路设计服务基础设施110(例如,经由与控制器120或web应用服务器112的通信)的封装和交付过程的状态。在一些实施方式中,当用户使用web接口签入时,状态更新可以中继给用户,和/或控制器可以通过电子邮件向用户发送更新可用。
60.在一些实施方式中,得到的集成电路(例如,物理芯片)被递送(例如,经由电子邮件)给用户。在一些实施方式中,得到的集成电路(例如,物理芯片)安装在由云服务器控制的系统中,使得它们可快速访问以使用网络通信远程运行以控制集成电路的操作。例如,对控制制造的集成电路的云服务器的登录可以被发送到集成电路设计服务基础设施110并被中继到用户(例如,经由web客户端102)。例如,图10的过程1000可以由制造商实施。
61.图3是用于促进集成电路的设计的系统300的示例的框图。系统300是可以用于将集成电路设计服务基础设施110实现为图1所示的系统100的集成电路设计服务基础设施110的整体或者一个或多个部件的计算设备的内部配置的示例。系统300可以包括部件或单元,诸如处理器302、总线304、存储器306、外围设备314、电源316、网络通信接口318、用户界面320、其他合适的部件或其组合。
62.处理器302可以是中央处理单元(cpu)(诸如微处理器),并且可以包括具有单个或多个处理核的单个或多个处理器。可替代地,处理器302可以包括现在存在或以后开发的能够操纵或处理信息的另一种类型的设备或多个设备。例如,处理器302可以包括以任何方式互连的多个处理器,包括硬连线或联网(包括无线联网)。在一些实施方式中,处理器302的操作可以分布在多个物理设备或单元上,这些物理设备或单元可以直接耦合或跨越局域网或其他合适类型的网络耦合。在一些实施方式中,处理器302可以包括用于操作数据或指令的本地存储的高速缓存或高速缓存存储器。
63.存储器306可以包括易失性存储器、非易失性存储器或其组合。例如,存储器306可以包括易失性存储器——诸如一个或多个dram模块,诸如ddr sdram,以及非易失性存储器,诸如磁盘驱动器、固态驱动器、闪存、相变存储器(pcm)或能够持久地存储电子信息的任何形式的非易失性存储器,诸如在没有活动电源的情况下。存储器306可以包括现在存在或以后开发的能够存储数据或指令以供处理器302处理的另一种类型的设备或多个设备。处理器302可以经由总线304访问或操纵存储器306中的数据。尽管在图3中示出为单个块,存储器306可以实现为多个单元。例如,系统300可以包括易失性存储器——诸如ram,和持久性存储器,诸如硬盘驱动器或其他存储装置。
64.存储器306可以包括可执行指令308、诸如应用数据310的数据、操作系统312或其组合,以供处理器302立即访问。可执行指令308可以包括例如一个或多个的应用程序,其可以全部或部分地从非易失性存储器加载或复制到易失性存储器以由处理器302执行。可执行指令308可以组织成可编程模块或算法、功能程序、代码、代码段或其组合来执行本文描述的各种功能。例如,可执行指令308可以包括可由处理器302执行以使系统300响应于命令而基于设计参数数据结构自动生成集成电路设计和相关测试结果的指令。应用数据310可以包括例如用户文件、数据库目录或字典、配置信息或功能程序,诸如web浏览器、web服务器、数据库服务器或其组合。操作系统312可以例如是microsoftmac os或用于小型设备的操作系统,诸如智能手机或平板设备;或用于大型设备的操作系统,诸如大型计算机。存储器306可以包括一个或多个设备并且可以利用一种或多种类型的存储装置,诸如固态或磁存储装置。
65.外围设备314可以经由总线304耦合到处理器302。外围设备314可以是传感器或检测器,或包含任意数量的传感器或检测器的设备,其可以监测系统300本身或系统300周围的环境。例如,系统300可以包含地理空间位置标识单元,诸如全球定位系统(gps)位置单
元。作为另一示例,系统300可以包含用于测量诸如处理器302的系统300的部件的温度的温度传感器。如可以预期的,其他传感器或检测器可以与系统300一起使用。在一些实施方式中,电源316可以是电池,并且系统300可以独立于外部配电系统操作。系统300的任何部件——诸如外围设备314或电源316——可以经由总线304与处理器302通信。
66.网络通信接口318还可以经由总线304耦合到处理器302。在一些实施方式中,网络通信接口318可以包括一个或多个收发器。网络通信接口318可以例如经由网络接口提供到诸如网络106的网络的连接或链接,该网络接口可以是有线网络接口——诸如以太网,或无线网络接口。例如,系统300可以经由网络通信接口318和使用一种或多种网络协议的网络接口与其他设备通信,该一种或多种网络协议为诸如以太网、tcp、ip、电力线通信(plc)、wifi、红外线、gprs、gsm、cdma或其他合适的协议。
67.用户界面320可以包括显示器;位置输入设备,诸如鼠标、触摸板、触摸屏等;键盘;或其他合适的人机界面设备。用户界面320可以经由总线304耦合到处理器302。除了显示器之外或者作为显示器的替代,可以提供允许用户编程或以其他方式使用系统300的其他界面设备。在一些实施方式中,用户界面320可以包括显示器,其可以是液晶显示器(lcd)、阴极射线管(crt)、发光二极管(led)显示器(例如,oled显示器)或其他合适的显示器。
68.在一些实施方式中,客户端或服务器可以省略外围设备314。处理器302的操作可以分布在多个客户端或服务器上,这些客户端或服务器可以直接耦合或者跨局域网或其他合适类型的网络耦合。存储器306可以分布在多个客户端或服务器上,诸如基于网络的存储器或者多个客户端或服务器中的存储器,以执行客户端或服务器的操作。尽管在此被描绘为单个总线,但总线304可以由多个总线构成,这些总线可以通过各种桥接件、控制器或适配器彼此连接。
69.图4是用于促进集成电路的设计的过程400的示例的流程图。过程400包括:访问410设计参数数据结构;基于设计参数数据结构生成420用于集成电路的寄存器传输级数据结构;基于寄存器传输级数据结构生成430用于集成电路的软件开发工具包;基于寄存器传输级数据结构生成440用于集成电路的物理设计数据结构;基于寄存器传输级数据结构生成450用于集成电路的文档;基于寄存器传输级数据结构和软件开发工具包,生成460用于集成电路的现场可编程门阵列仿真数据结构;基于设计参数数据结构和验收标准生成470用于集成电路的测试计划;基于测试计划、寄存器传输级数据结构、软件开发工具包和物理设计数据结构调用480用于集成电路的测试,以获得一组测试结果;以及传输、存储或显示490基于寄存器传输级数据结构、软件开发工具包、物理设计数据结构和测试结果的设计数据结构。过程400可以响应于单个命令(例如,构建命令)自动生成和测试符合设计参数数据结构中的设计参数值的集成电路设计。例如,过程400可以由集成电路设计服务基础设施110实施。例如,过程400可以由图1的系统100实施。例如,过程400可以由图3的系统300实施。
70.过程400包括访问410设计参数数据结构(例如,文件、数据库、储存库或比特流)。设计参数数据结构包括集成电路设计的设计参数的值。例如,集成电路设计可以具有ip核。例如,集成电路设计可以具有片上系统。例如,设计参数数据结构可以包括json文件。例如,设计参数数据结构的设计参数可以包括是否支持特权模式、是否支持乘数扩展、是否支持浮点扩展、在片上存储器中是否支持纠错代码、指令缓存的大小、指令缓存的关联性、片上
存储器中的数据子系统的大小、是否包括端口(例如,前端端口、系统端口、外围端口或存储器端口)、存储器端口通道的计数、端口通信协议选择、总线宽度、物理存储器保护单元的计数、是否支持jtag调试、硬件断点的计数、是否支持指令跟踪、是否支持调试直接存储器访问、本地中断的计数、是否支持平台级中断控制器、中断优先级的计数、全局中断的计数、是否支持分支预测、分支目标缓冲器条目的计数、分支历史表条目的计数和/或制造过程的选择。例如,可以通过接收设计参数数据结构(例如,使用网络通信接口318经由与web客户端102或脚本api客户端104的网络通信)来访问410设计参数数据结构。例如,可以通过读取设计参数数据结构(例如,经由总线304从存储器306读取)来访问410设计参数数据结构。
71.过程400包括:响应于标识设计参数数据结构的命令,基于设计参数数据结构生成420用于集成电路的寄存器传输级数据结构。例如,命令可以是用户使用web客户端102通过web应用服务器112的web接口的图标发布的构建命令。例如,命令可以是由在脚本api客户端104上运行的脚本经由脚本api服务器114发布的构建命令。命令可以显式地或隐式地标识设计参数数据结构。例如,命令可以通过与设计参数数据结构的副本一起发送来标识设计参数数据结构。例如,命令可以通过包括对先前存储的设计参数数据结构的指针或其他引用来标识设计参数数据结构。例如,设计参数数据结构可以包括列出设计参数和相应值的标识符的json文件。在一些实施方式中,设计参数数据结构还包括标识设计参数修改的模板集成电路设计的指示(例如,指针、名称或另一标识符)。例如,模板集成电路设计可以包括遵守便于模块化设计的惯例的模块化设计数据结构。例如,基于设计参数数据结构生成420用于集成电路的寄存器传输级数据结构可以包括利用基于设计参数数据结构的数据调用寄存器传输级服务(例如,寄存器传输级服务模块130)。例如,图6的过程600可以被实施为基于设计参数数据结构生成420用于集成电路的寄存器传输级数据结构。
72.例如,寄存器传输级数据结构可以包括一个或多个verilog文件。寄存器传输级数据结构可以包括更新的配置设定以驱动集成电路设计流水线的后期阶段。在一些实施方式中,寄存器传输级数据结构包括存储器映射、一个或多个端口分配和布局规划信息。
73.寄存器传输级数据结构(例如,寄存器传输级文件)可以使用诸如scala、chisel、diplomacy和/或firrtl的工具基于设计参数数据结构自动生成420。例如,生成420用于集成电路的寄存器传输级数据结构可以包括执行scala代码以读取设计参数数据结构并动态生成电路图。在一些实施方式中,生成420用于集成电路的寄存器传输级数据结构包括在chisel中调用diplomacy封装以确定用于集成电路的总线协议。
74.过程400包括:响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构生成430用于集成电路的软件开发工具包。在一些实施方式中,生成430用于集成电路的软件开发工具包包括生成用于verilog模拟器和物理现场可编程门阵列的加载程序以进行闪存。例如,生成430软件开发工具包可以包括访问用于由设计参数数据结构标识的模板集成电路设计的现有工具链或软件开发工具包。现有工具链或软件开发工具包(例如,risc

v工具链/sdk)可以使用适用于可配置性的惯例来建立。例如,可以将现有工具链或软件开发工具包组织成与设计参数数据结构的设计参数相对应的子模块。例如,软件开发工具包可以包括编译器、汇编器、报头文件、库、引导加载程序、内核驱动程序和/或用于全功能sdk/计算环境的其他工具。例如,生成430软件开发工具包可以包括执行python脚本。在一些实施方式中,生成430软件开发工具包包括解析寄存器传输级数据结构(例如,json文件)、生成
用于工具和构建的选项、生成响应于存储器映射的头文件、从现有工具链或软件开发工具包中选择适当的示例、为目标模拟器(例如,qemu(快速模拟器))生成相关配置文件以便它们可以在另一处理器(例如,x86)上运行新设计,以及为verilog模拟器和物理fpga板生成加载程序以进行闪存。得到的软件开发工具包可以在云中构建和测试(例如,在提供给客户之前)。例如,生成430软件开发工具包可以包括用基于寄存器传输级数据结构和/或设计参数数据结构的数据调用软件开发工具包服务(例如,软件开发工具包服务模块140)。
75.过程400包括:响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构生成440用于集成电路的物理设计数据结构(例如,物理设计文件)。例如,生成440用于集成电路的物理设计数据结构可以包括实现图7的过程700。例如,生成440用于集成电路的物理设计数据结构可以包括用基于寄存器传输级数据结构和/或设计参数数据结构的数据调用物理设计服务(例如,物理设计服务模块160)。例如,生成440用于集成电路的物理设计数据结构可以包括调用综合和布局布线工具(例如,synopsys、cadence和/或mentor工具)。例如,生成440用于集成电路的物理设计数据结构可以包括执行逻辑等效检查。例如,生成440用于集成电路的物理设计数据结构可以包括调用静态时序分析工具。例如,生成440用于集成电路的物理设计数据结构可以包括执行设计规则检查(drc)和/或布局对原理图(lvs)检查。例如,生成440用于集成电路的物理设计数据结构可以包括确定得到的集成电路设计的功率、性能和面积估计并且将这些估计作为反馈提供给用户(例如,web客户端102的用户)。例如,物理设计数据结构可能以技术含量较低的术语包括物理设计是否存在任何问题。例如,物理设计数据结构可以突出综合和布局布线工具的输出的重要部件。例如,物理设计数据结构可以包括gdsii文件或oasis文件。例如,生成440用于集成电路的物理设计数据结构可以包括在云中管理和编排物理设计工具链。例如,生成440用于集成电路的物理设计数据结构可以包括处理从工具到工具的数据库移动,以及管理对第三方ip核的访问。例如,生成440用于集成电路的物理设计数据结构可以包括访问模板设计,这可以允许重要的设计重复使用。例如,生成440用于集成电路的物理设计数据结构可以包括标识那些组合以减少工作量。例如,通过将工具问题转化为可管理的反馈并以可交付的格式向用户(例如,web客户端102的用户)提供工具的实际误差/输出,生成440用于集成电路的物理设计数据结构可以提供更好或更紧凑的误差/问题报告。例如,生成440用于集成电路的物理设计数据结构可以包括使用物理设计块来标识功能块的配对,这些配对可以在设计中重复使用以提高效率。
76.过程400包括:响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构生成450用于集成电路的文档。例如,生成450用于集成电路的文档可能包括使用prince(在https://www.princexml.com/可获得)。例如,生成450用于集成电路的文档可能包括使用ascii doc(在http://asciidoc.org/可获得)。例如,生成450用于集成电路的文档可以包括访问由设计参数数据结构标识的用于模板集成电路设计的预加载模块化手册。模块化手册可以使用适用于可配置性的惯例来建立。例如,可以将模块化手册组织成与设计参数数据结构的设计参数相对应的子模块。在一些实施方式中,模块化手册作为多个部件存储在模板的现有sdk的对应目录中。生成450用于集成电路的文档可以包括归纳预加载的模块化手册以响应于设计参数数据结构中的设计参数值。例如,生成的450文档可以是html格式和/或pdf格式。为了正确记录存储器映射/端口,生成450用于集成电路的文档可以包括用
后rtl输出工作。例如,生成450用于集成电路的文档可以包括利用类似于react框架的文档框架(例如,js html框架)。在一些实施方式中,文档块具有相应的python代码段,该代码段接收rtl输出配置文件并将其分解为ascii doc所需的块并调用内容生成。例如,生成450用于集成电路的文档可以包括实现图8的过程800。例如,生成450用于集成电路的文档可以包括用基于寄存器传输级数据结构和/或设计参数数据结构的数据调用文档服务(例如,文档服务模块150)。
77.过程400包括:响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构和软件开发工具包生成460用于集成电路的现场可编程门阵列仿真数据结构(例如,现场可编程门阵列仿真文件)。例如,用于集成电路的现场可编程门阵列仿真数据结构可以被配置成利用基于云的现场可编程门阵列(fpga)。例如,生成460用于集成电路的现场可编程门阵列仿真数据结构可以包括调用基于云的fpga合成工具。例如,生成460用于集成电路的现场可编程门阵列仿真数据结构可以包括调用仿真平台,诸如palladium(来自cadence)、veloce(来自mentor graphics)和/或zebu(来自synopsys)。例如,用于集成电路的现场可编程门阵列仿真数据结构可以被配置成处理仿真设备硬盘驱动器和网络设备。例如,现场可编程门阵列仿真数据结构可以包括仿真文件和支持材料。在一些实施方式中,用于集成电路的现场可编程门阵列仿真数据结构可以提供包括外围设备在内的整个系统一起操作的仿真(例如,需要匹配存储器时序)。例如,仿真的外围设备可以是用户在由web应用服务器112生成的web接口中已选择的实际外围设备。例如,生成460用于集成电路的现场可编程门阵列仿真数据结构可以包括高度详细地使用基于参数化集成电路设计的现有工具。例如,生成460用于集成电路的现场可编程门阵列仿真数据结构可以包括调用fpga/仿真器工具链、建立仿真设备以及编译仿真设备。例如,生成460用于集成电路的现场可编程门阵列仿真数据结构可以包括用基于寄存器传输级数据结构和/或设计参数数据结构的数据调用fpga/仿真服务(例如,现场可编程门阵列设计服务模块170)。
78.过程400包括:响应于标识设计参数数据结构的命令,基于设计参数数据结构和验收标准生成470用于集成电路的测试计划。在一些实施方式中,验收标准与设计参数数据结构一起被接收(例如,从web客户端102接收或从脚本api客户端104接收)。在一些实施方式中,验收标准从存储器(例如,存储器306)读取。例如,生成470用于集成电路的测试计划可以包括调用verilog模拟器(例如,开源verilog模拟器)。例如,用于集成电路的测试计划可以包括使用fpga。例如,用于集成电路的测试计划可以包括利用软件模拟器,诸如快速模拟器(qemu)、spike和/或其他软件模拟器。在一些实施方式中,多个目标测试平台看起来相同,因此集成电路的测试计划可以包括在不同的成本选项之间移动工作负载(例如,使用物理fpga比使用抢占式云实例更便宜)。例如,可以基于寄存器传输级数据结构(例如,包括verilog rtl)、软件开发工具包、物理设计数据结构(例如,包括gdsii文件)、测试语料库和对应的验收标准生成470用于集成电路的测试计划。在一些实施方式中,生成470用于集成电路的测试计划可以包括响应于用户定义的变化的验收标准。给定验收标准和设计配置,可以自动生成470测试计划。例如,生成470用于集成电路的测试计划可以包括定义环境、在给定测试语料库和基于设计参数数据结构生成的硬件和软件设计的情况下过滤掉无法运行的测试、并生成测试计划以包括用于集成电路设计的一系列所选测试。例如,环境可以定义测试平台。在被测设备之外,测试台中可能有附加部件,在设计中标准化这些环境可能是
有益的。例如,可以在测试平台内标准化结束测试的方式。一些测试平台可以定义cpu可以写入的寄存器,该寄存器被定义在测试台中,同时一些测试平台会以某种方式摆动通用输入/输出(gpio)引脚。给定测试计划,许多测试平台可以用于所有测试。
79.过程400包括:响应于标识设计参数数据结构的命令,基于测试计划、寄存器传输级数据结构、软件开发工具包和物理设计数据结构调用480用于集成电路的测试以获得一组测试结果。例如,被调用480的验证测试可以由控制器(例如,控制器120)、由验证服务(例如,验证服务模块180)和/或由外部服务(例如,基于云的fpga或经由网络通信访问的仿真服务)直接执行。在一些实施方式中,调用480用于集成电路的测试可以包括使用基于现场可编程门阵列仿真数据结构编程的现场可编程门阵列来调用测试以获得仿真结果。现场可编程门阵列可以在云服务器上运行。例如,调用480用于集成电路的测试可以包括使用凭证(例如,登录名和/或密码)来调用在云服务器上运行的现场可编程门阵列上的测试。例如,测试结果可以包括用于大量测试的概括信息,诸如生成的集成电路设计是否满足所有验收标准的二进制指示,或者包括在测试计划中的相应验证测试是否通过单个验证测试的二进制指示列表。
80.过程400包括传输、存储或显示490基于寄存器传输级数据结构、软件开发工具包、物理设计数据结构和测试结果的设计数据结构。例如,设计数据结构可以是文件的集合、包括来自寄存器传输级数据结构的数据的档案或储存库(例如,github储存库)、软件开发工具包、物理设计数据结构以及测试结果。例如,设计数据结构还可以包括生成450的文档和/或生成460的现场可编程门阵列仿真数据结构。例如,可以将设计数据结构传输490到外部设备(例如,个人计算设备)以用于显示或存储。例如,设计数据结构可以存储490在存储器(例如,存储器306)中。例如,设计数据结构可以显示490在用户界面(例如,用户界面320)中。例如,设计数据结构可以经由网络通信接口(例如,网络通信接口318)传输490。
81.尽管为了清楚起见,过程400被示出为一系列操作,但过程400的实现或结合本文公开的实施方式描述的任何其他技术、过程或算法可以以各种顺序或同时执行。此外,根据本公开的操作可以与本文未呈现和描述的其他操作一起执行。例如,图5的过程500可以用于以变化的设计参数迭代过程400以搜索设计空间。此外,可以省略本文描述的系统和技术的一个或多个方面。例如,可以从过程400中省略操作450。
82.图5是用于促进集成电路的设计的迭代过程500的示例的流程图。过程500包括:访问510设计参数数据结构(例如,如关于图4的操作410所描述的);基于设计参数数据结构(例如,使用图4的过程400)确定520具有用于集成电路的对应测试结果的设计数据结构;如果(在操作525)测试结果失败(例如,测试结果不满足一组验收标准)和/或未超过迭代计数,则基于测试结果更新530设计参数数据结构并前进到下一次迭代;以及如果(在操作525)测试结果通过(例如,测试结果满足一组验收标准)和/或超过迭代计数,则返回540确定520的一个或多个设计数据结构。在一些实施方式中,当过程500终止时,返回540确定520的具有其对应测试结果的所有设计数据结构。在一些实施方式中,当过程500以通过的测试结果终止时,仅返回540确定520的具有其对应测试结果的最后设计数据结构。在一些实施方式中,用于确定集成电路设计是否通过的验收标准可以包括对物理设计的功率、性能和/或面积的约束。例如,当被调用以生产满足特定性能基准的芯片同时保持在尚未满足的特定面积/功耗约束下(例如,不够快或过大或耗电)时,设计参数值可以在寻求更接近需求的
方向上进行更新530。例如,过程500可以使用控制器120的脚本api来实现。例如,过程500可以由集成电路设计服务基础设施110实现。例如,过程500可以由图1的系统100实现。例如,过程500可以由图3的系统300实现。
83.图6是用于基于设计参数数据结构生成用于集成电路的寄存器传输级数据结构的过程600的示例的流程图。例如,设计参数数据结构可以包括json文件。例如,设计参数数据结构可以包括由用户使用web接口中的配置旋钮(例如,图12的配置窗格1220的设计旋钮)确定的设计参数值和/或与模板集成电路设计相关联的值。过程600包括:解析610json文件以确定集成电路设计的设计参数的值;将设计参数值转换620为用于寄存器传输级生成器的输入参数值;以及利用输入参数调用630寄存器传输级生成器以获得包括在寄存器传输级数据结构中的寄存器传输级数据。例如,寄存器传输级生成器可以包括工具,诸如scala、chisel、diplomacy和/或firrtl。例如,过程600可以由集成电路设计服务基础设施110实现。例如,过程600可以由图1的系统100实现。例如,过程600可以由图3的系统300实现。
84.过程600包括用输入参数调用630寄存器传输级生成器以获得包括在寄存器传输级数据结构中的寄存器传输级数据。例如,寄存器传输级生成器可以是以chisel编码的scala程序。例如,调用630寄存器传输级生成器可以包括执行scala代码以动态生成电路图。例如,调用630寄存器传输级生成器可以包括使用chisel基于电路图生成firrtl。firrtl是用于集成电路的中间表示。例如,调用630寄存器传输级生成器可以包括调用firrtl编译器以优化设计。例如,调用630寄存器传输级生成器可以包括调用firrtl verilog后端,该后端被调用以输出verilog。例如,寄存器传输级数据结构可以包括一个或多个verilog文件。在一些实施方式中,寄存器传输级数据结构包括存储器映射、一个或多个端口分配、时钟、布局规划信息和/或其他设计配置数据。例如,时钟可以在寄存器传输级数据结构中指定为用于时钟电路的网表(例如,rtl生成器可以实例化时钟电路,诸如pll和时钟分频器)和时钟电路的描述这两者,使得它可以在下游服务或工具中使用。例如,rtl生成器的输入可以指定为高级别,诸如“添加64位ddr控制器”。rtl生成器可以访问和利用默认设计参数,诸如“该ddr控制器是具有8位ecc、32项重新排序缓冲器的cadence控制器”。
85.图7是用于基于寄存器传输级数据结构生成用于集成电路的物理设计数据结构的过程700的示例的流程图。过程700包括:调用710源综合和布局布线工具;调用720逻辑等效检查;调用730静态时序分析工具;调用740设计规则检查;以及调用750布局对原理图检查。例如,调用的工具链可以包括synopsys工具,诸如设计编译器、ic编译器、primetime、formality和/或starextract。在一些实施方式中,调用710源综合和布局布线工具包括在云中管理和编排物理设计工具链。在一些实施方式中,调用710源综合和布局布线工具包括执行本地安装在同一计算设备上的物理设计工具链。例如,过程700可以由集成电路设计服务基础设施110实现。例如,过程700可以由图1的系统100实现。例如,过程700可以由图3的系统300实现。
86.图8是用于基于寄存器传输级数据结构生成用于集成电路的文档的过程800的示例的流程图。过程800包括:(例如,使用python代码)解析810用于集成电路的寄存器传输级数据结构以标识文档框架的适用部分;基于标识的适用部分生成820文档片段;将片段组装830成词典;从模板(例如,ascii文档模板)实例化840文档;以及将对词典的引用与文档合并850。例如,文档框架可能类似于react框架。在一些实施方式中,章节或段可以动态地添
加到文档中。例如,可以动态生成带有编号的章节和段。例如,ip核文档(例如,第3方ip核文档)可以被纳入包括ip核的片上系统设计的文档中。例如,过程800可以由集成电路设计服务基础设施110实现。例如,过程800可以由图1的系统100实现。例如,过程800可以由图3的系统300实现。
87.图9是用于生成多租户物理设计规范以促进集成电路的制造的过程900的示例的流程图。例如,物理设计规范可以包括用于多个独立集成电路的设计。过程900可以包括:基于生产计划向多个独立集成电路分配910掩模区域;对物理设计规范执行920设计规则检查;以及将物理设计规范传输930到服务器以调用制造。例如,过程900可以由集成电路设计服务基础设施110实现。例如,过程900可以由图1的系统100实现。例如,过程900可以由图3的系统300实现。
88.过程900包括基于生产计划向多个独立集成电路分配910掩模区域。例如,多个独立的集成电路可以收集为完成的物理设计数据结构(例如,gdsii文件或oasis文件)。在一些实施方式中,多个独立的集成电路是从多租户环境中的多个用户收集的。给定为多个集成电路中的每一个请求多少芯片的规范,可以构建标线计划。例如,如果有用户a

芯片1、用户b

芯片2和用户b

芯片3,并且您想要50%的芯片1和25%的芯片2以及25%的芯片3,则可以相应地分配910掩膜区域。
89.过程900包括对物理设计规范执行920设计规则检查。可以检查包括多个独立集成电路的副本的用于掩模的物理设计规范是否违反设计规则(例如,检查多个独立集成电路的副本之间的间距违规)。执行920该顶级drc检查可以用作将被发送到铸造厂进行制造的甲板的最终检查。
90.过程900包括将物理设计规范(例如,gdsii文件或oasis文件)传输930到服务器以调用制造。传输930物理设计规范可以构成向晶圆厂和api提交流片形式(例如,经由web服务/api)。例如,物理设计规范可以被传输930到与铸造厂相关联的服务器(例如,制造商服务器230)。然后,铸造厂可以响应于接收到物理设计规范而使用物理设计规范制造多个独立集成电路。例如,物理设计规范可以经由网络通信接口(例如,网络通信接口318)传输930。
91.图10是用于促进集成电路的制造和测试的过程1000的示例的流程图。在一些实施方式中,制造设施可以被包括在集成电路设计服务基础设施中,并且用于应用户的请求制造集成电路(例如,芯片)。例如,虽然未在图1中示出,但集成电路设计服务基础设施110可以包括芯片制造服务(例如,自动化制造设施)。过程1000包括:制造1010集成电路;将集成电路安装1020在系统中,该系统被配置成响应于经由与云服务器的通信接收的命令来操作集成电路;以及传输1030用于访问和控制集成电路的登录。例如,登录可以经由网络通信接口(例如,网络通信接口318)从控制器120传输1030到请求制造集成电路的用户(例如,经由web应用服务器112传输1030到web客户端102)。使用过程1000可以使用户能够从远程位置快速方便地运行或测试他们的新集成电路的实例。
92.图11是生成用于呈现web接口以促进集成电路的模板设计的选择的示例显示区域1110的视图。显示区域1010可以显示可以被选择用于集成电路设计中的包括和/或定制的设计模板列表(例如,用于ip核)。对于每个可用的设计模板,显示设计规范列表(1120、1122和1124),以示出相应设计模板的一些关键特征和/或设计参数。每个设计规范列表(1120、
1122和1124)在顶部均具有模板名称(1130、1132和1134),其用于标识设计模板。每个设计规范列表(1120、1122和1124)具有定制设计图标(1140、1142和1144),其使用户能够选择相应的模板设计进行定制和设计开发。
93.图12是生成用于呈现web接口以促进集成电路的定制设计的示例显示区域1210的视图。显示区域1210包括配置窗格1220,其包括可以用于为集成电路设计选择设计参数值的设计旋钮,并且具有示出当前显示的设计旋钮类别的名称的配置窗格标题1222。显示区域1210包括配置选项卡菜单1230,其包括允许用户选择待显示在配置窗格1220中并可用于由用户调整的设计旋钮类别的图标。例如,设计旋钮类别可以包括模式&isa、片上存储器、端口、安全性、调试、中断和分支预测。设计旋钮可以提供一种在设计参数数据结构中直观地显示设计参数值并进行总结的方式。设计旋钮可以促进对设计参数值的简单改变。在一些实施方式中,可以实时更新设计旋钮以通过基于另一个设计参数禁用或约束一个设计参数的值来反映不同设计参数之间的依赖性。
94.显示区域1210包括设计框图1240,其显示可以使用配置窗格1220的设计旋钮来选择的概括电流值设计参数值。设计框图1240包括设计名称1242,其标识当前集成电路设计。例如,设计框图1240可以使用颜色编码来反映某些特征以及反映用于集成电路设计的其他设计参数值的文本的存在或不存在。例如,设计框图1240可以是实时更新的自动更新框图,以反映使用设计旋钮做出的设计参数值的变化。在一些实施方式中,设计参数数据结构基于经由web应用接收的输入而生成,该web应用显示模板设计的自动更新框图1240,以反映集成电路的设计参数的值的变化。在一些实施方式中,设计框图1240可以显示基于当前选择的设计参数值的用于集成电路设计的功率、性能和面积的估计。例如,响应于使用设计旋钮对设计参数的值所做的更改,可以立即实时更新ppa(功率性能区域)估计值。该特征可以提供关于芯片在进行设计改变时将如何执行的直接反馈。
95.显示区域1210包括构建图标1250,其可以用于基于用设计旋钮选择的和/或反映在设计框图中的设计参数的值来发出构建和测试集成电路设计的命令。例如,当发出构建命令时,当前设计参数值可以在设计参数数据结构(例如,json文件)中编码,控制器120访问该数据结构以开始。
96.显示区域1210包括状态栏1260,其指示设计的当前状态(例如,设计、审查或构建)。例如,显示区域1010可以使用python和/或django前端工具来生成(例如,通过web应用服务器112)。
97.图13是生成用于呈现web接口以促进对集成电路的定制设计的访问的示例显示区域1310的视图。例如,显示区域1310可以在系统完成构建操作之后显示,以产生包括编码生成的集成电路设计和相关联的测试结果的一组文件的设计数据结构。显示区域1310包括具有下载链接的资产列表1320。资产列表1320的链接允许(例如,在web客户端102处)下载设计数据结构的文件,诸如rtl源文件、测试台文件、软件开发工具包、fpga比特流以及用于得到的集成电路设计的文档。资产列表1320还包括下载的所有资产链接1322,其使得能够下载包括设计数据结构的所有文件的档案或储存库。
98.显示区域1310包括设计框图1330(例如,其与图12的设计框图1240相同或相似),其显示用于集成电路设计的设计参数值的易读指示。设计框图1330包括显示用于集成电路设计的标识符的设计名称1332。
99.显示区域1310包括构建状态栏1340,其反映集成电路设计的构建完成时的日期和时间。在构建完成之前,构建状态栏1340可以反映在集成电路设计服务基础设施110中运行的正在进行的构建过程的当前状态。
100.prometheus

用于自动设计流程生成的系统的示例
101.什么是prometheus:prometheus可以包括定制电子设计自动化(eda)工具,如方法引擎,其目的是驱动所有流程和设计开发。通常,prometheus围绕以下理念:易于学习和使用;自我记录;正确的构造;可扩展和大规模协作;质量和努力的可控性、一致性和可预测性;以及易于自动化。
102.prometheus实施方式:prometheus可以用ruby脚本语言构建,其具有完整的tcl用户界面。tcl(工具控制语言)是芯片设计人员中广泛使用的语言,并且可以是用于eda工具的事实上的控制语言。作为一种编程语言,tcl有其局限性,因为它主要用于eda工具控制,而不是复杂的算法和复杂的任务。ruby是一种面向对象的解释型语言,其具有称为rubygems的交互式shell和封装管理器。ruby是一种强大的脚本语言,但很少有集成电路设计人员熟悉ruby或类似语言。因此,有一个陡峭的学习曲线。通过结合两者的力量,在ruby之上使用tcl,可以实现两全其美。在ruby之上使用tcl的实施方式可以提供许多益处和特性。例如,芯片设计人员只需了解tcl就可以有效地利用prometheus。主流eda工具的用户可能发现prometheus的用法与大多数主流eda工具非常相似和熟悉,从而减少了用户学习曲线。具有现代eda工具套件经验的用户应该能够在没有太多学习障碍的情况下使用prometheus。在prometheus系统中,ruby可以是为开发人员保留的,他们是更高级的用户和更精明的程序员。prometheus可以提供完整的tcl支持,同时还可以经由ruby轻松扩展。例如,用户可以使用更强大的ruby语言扩展基本的tcl命令和特征。与tclsh等现有tcl shell相比,prometheus tcl接口可能是一个更强大和可用的tcl shell。示例包括历史管理器、命令和文件自动完成特征、显示自动换行特征、命令提示符中的嵌套块指示符等,所有这些都经由ruby进行管理和启用。结合ruby还可以使prometheus提供更好的调试和异常处理等。eda中广泛使用了tcl交互式shell。在tcl交互式shell之上具有ruby交互式shell意味着用户可以轻松地在tcl shell与ruby shell之间切换,这可以促进现场开发和调试;并允许逐行执行tcl以及ruby脚本两者,这是在开发期间非常重要的特征。
103.将诸如ruby的解释性语言作为基础语言意味着可以动态更新prometheus源代码。系统或服务可以进一步用于机器学习、元编程和自生成代码。例如,图16的系统1600可以用于迭代更新用于生成集成电路设计的设计流程。例如,可以实施图17的过程1700以迭代地更新用于生成集成电路设计的设计流程。
104.类似于prometheus的系统可以用替代的脚本/解释和面向对象的语言来构建。例如,可以在python之上使用tcl构建类似的系统。
105.prometheus可以提供许多特征。prometheus框架的一部分是它支持多种操作模式的能力。这些模式可以完全独立,或者也可以与其他模式共存。这些模式可以是模块化的和可扩展的。例如,模式可以提供工具的主要特征的接口。模式的示例包括:发行模式;设计模式;html模式;图形模式;流程模式;建立模式;流程模块模式;模板模式。本文更详细地描述了一些值得注意的模式。
106.发行模式是其中prometheus用作用于发行的应用编程接口(api)的模式。可以使
用户能够编纂或编写用于发行的文件和目录规则、模式、结构、惯例等。发行管理器可以管理两步发行过程:(1)本地构建步骤,在该本地构建步骤中,在发行承诺之前检查文件(例如,所有待发行的文件)并使其在本地发行目录中可用。(2)提交步骤,在该提交步骤中,一旦提交,就发行到指定位置,在该位置处它受到许可/修订控制。prometheus可以自动处理版本、位置、修订等。prometheus可以提供与之前发行相比的大量构建报告,包括添加文件、更改文件、删除文件等的统计信息;以及时间戳/文件差异检查器。prometheus可能会提供内置的发行冲突管理器来防止多个用户进行相同的发行。
107.设计模式是prometheus允许用户创建verilog设计的模式,并且可以包含以下解析器:liberty解析器;verilog解析器;库交换格式(lef)解析器;spice解析器;以及图形数据库系统(gds)解析器。例如,用户可以使用设计模式来参数化和生成无法在行为rtl中编码或描述的设计。一个示例是实现ip,它可以包括:少故障时钟网络;片上时钟生成器;过程监测器;延迟链/线(用于dll、flash等);分频器和计数器;等等。设计模式可以允许用户创建、参数化、实例化和连接设计模块并生成顶级rtl。它还可以促进仿真测试平台包装器的自动生成。
108.流程模式是下述模式:其中prometheus使用户能够自动生成复杂的流程管理文件(例如,makepp生成文件),例如,通过描述基于图的节点有向无环图(dag)。传统方法需要对gnu生成文件进行编码,即使对于那些对生成文件有丰富经验的人来说,这也可能难以阅读、管理和修改。prometheus用户可以根据dag中的节点和它们之间的流程关系作为边缘来描述任务。prometheus可以自动生成流程管理文件。流程可以是完全分层的和递归的。任务在其执行性质上可以被声明为独立的或从属的,并且可以将其声明为普通的、分层的和流程模块作为其类型。
109.流程模块模式允许创建具有明确定义的接口但非常复杂、高度可配置且可参数化的内部任务的任务。流程模块的示例可以是综合任务、测试设计(dft)任务、布局布线任务等。流程模块模式允许用户描述复杂任务的接口、设定、配置、文件和目录结构、子流结构。一旦定义,流程模块就可以通过流程模式而被调用、实例化和配置。这可以在不损害其可控性和可编程性的情况下实现流程抽象。
110.图形模式示出了一个示例,其中可以将任何看似随机的语言(诸如graphviz中使用的dot语言)封装在prometheus tcl中。例如,图形模式是下述模式:其中prometheus使不需要学习dot语言的用户可以使用dot语言提供的功能生成图。例如,prometheus开发人员可以提供围绕dot语言的tcl api。然后,prometheus用户可以拥有prometheus tcl的完全可控性和可编程性以及dot的所有功能,而无需学习dot。
111.html模式是prometheus使用户能够使用tcl接口生成html页面的模式。html语法因对人类不友好和不可读而为人所知。html模式可以使用户能够在tcl结构中编码html。除了html语法之外,html模式还可以经由rubygem支持redcloth等标记语言插件,这为用户提供了编码和描述html内容的更大的能力和灵活性。prometheus可以在prometheus环境中将信息和内容生成和自动化为html;一个示例是自动生成的html格式的prometheus使用手册,其可以经由web浏览器打开。
112.建立模式是下述模式:其中prometheus能够支持复杂和精密的环境管理。芯片设计——特别是物理设计——可能需要跨越数百万个文件的数tb的库和技术数据。例如,在
16nm中,台积电就有80 个库。每个库可能有数以万计的设计附属文件。现代芯片设计项目可能需要处理和组织10m个以上的库/技术文件来制作芯片。在供应商和铸造厂内部或之间,库和技术数据通常没有组织或命名惯例。用户在多个供应商和技术上工作也会给传统的eda系统带来挑战。建立模式是下述框架:其中可以经由prometheus中的类似eda工具的命令来描述、编码和配置库和技术文件的文件和目录命名法、结构、组织,使得随后可以在环境文件中标识、组织和配置文件和目录,以用于后续的eda芯片设计环境。
113.图14是用于生成和使用动态设计流程的过程1400的示例的流程图。过程1400包括:访问1410设计流程配置数据结构;基于设计的流程配置数据结构,从一组流程模块中选择1420多个流程模块;基于设计流程配置数据结构,生成1430设计流程作为包括所选流程模块作为顶点的有向无环图;基于一个或多个输入集成电路设计数据结构,使用设计流程来控制所选流程模块的相应电子设计自动化工具,而生成1440输出集成电路设计数据结构;以及传输、存储或显示1450输出集成电路设计数据结构。在一些实施方式中,过程1400可以响应于单个命令(例如,构建命令)自动生成设计流程并使用该设计流程生成集成电路设计。例如,过程1400可以由集成电路设计服务基础设施110实现。例如,过程1400可以由图1的系统100实现。例如,流程1400可以由图1的物理设计服务模块160实现。例如,流程1400可以由图1的寄存器传输逻辑服务模块130实现。例如,流程1400可以由图1的软件开发工具包服务模块140实现。例如,过程1400可以由图1的文档服务模块150实现。例如,流程1400可以由图1的fpga设计服务模块170实现。例如,流程1400可以由图1的验证服务模块180实现。例如,过程1400可以由图3的系统300实现。
114.过程1400包括访问1410设计流程配置数据结构(例如,文件、数据库、储存库或比特流)。设计流程配置数据结构以工具控制语言(例如,tcl脚本语言)编码。例如,设计流程配置数据结构可以标识待在设计流程中使用的电子设计自动化(eda)工具。例如,设计流程配置数据结构可以包括用于待在设计流程中使用的电子设计自动化(eda)工具的配置参数。下面的附录a提供了tcl语言中的设计流程配置数据结构的内容的示例。例如,可以通过接收设计流程配置数据结构(例如,使用网络通信接口318经由与web客户端102或脚本api客户端104的网络通信)来访问1410设计流程配置数据结构。例如,可以通过读取设计流程配置数据结构(例如,经由总线304从存储器306读取)来访问1410设计流程配置数据结构。
115.过程1400包括:基于设计流程配置数据结构,从一组流程模块中选择1420多个流程模块。该组流程模块中的每个流程模块以工具控制语言向相应的电子设计自动化工具提供应用编程接口。例如,所选流程模块中的一个的相应电子设计自动化工具可以是源综合工具、布局布线工具或静态时序分析工具(例如,synopsys、cadence和/或mentor工具)。在一些实施方式中,所选流程模块包括至少三个流程模块,使得所选流程模块中的一个的相应电子设计自动化工具是源综合工具,所选流程模块中的一个的相应电子设计自动化工具是布局布线工具,并且所选流程模块中的一个的相应电子设计自动化工具是静态时序分析工具。
116.过程1400包括:基于设计流程配置数据结构,生成1430作为包括所选流程模块作为顶点的有向无环图的设计流程。例如,设计流程可以编码为make文件。例如,设计流程可以编码为make 文件。例如,设计流程可以编码为scons python脚本。在一些实施方式中,可以使用迭代过程来生成1430设计流程以调整设计流程的配置以实现用于集成电路设计
的性能目标。例如,可以使用图17的过程1700生成1430设计流程。在一些实施方式中,设计流程可以包括与流程模块以外的任务(例如,用于html生成或生成设计流程的图形表示的任务)相对应的顶点。例如,设计流程可以包括用于生成与集成电路设计相关的html的任务。在一些实施方式中(图14中未示出),过程1400可以包括使用设计流程基于输出的集成电路设计数据结构生成超文本标记语言数据结构;以及传输、存储或显示超文本标记语言数据结构。在一些实施方式中,设计流程可能是分层的——包含顶点,其与用于使用子流程的任务相对应,该子流程本身是有向无环任务图。
117.过程1400包括基于一个或多个输入集成电路设计数据结构,使用设计流程控制所选流程模块的相应电子设计自动化工具,生成1440输出集成电路设计数据结构。在一些实施方式中,输出的集成电路设计数据结构包括用于集成电路的物理设计数据结构。例如,输出的集成电路设计数据结构可以包括用于集成电路的gdsii文件。在一些实施方式中,一个或多个输入的集成电路设计数据结构包括寄存器传输级数据结构。在一些实施方式中,可以使用迭代过程来生成1440输出的集成电路设计数据结构以调整设计流程的配置来实现用于集成电路设计的性能目标。例如,可以使用图17的过程1700生成1440输出的集成电路设计数据结构。
118.过程1400包括传输、存储或显示1450输出的集成电路设计数据结构。例如,输出的集成电路设计数据结构可以是包括来自寄存器传输级数据结构、软件开发工具包、物理设计数据结构和/或测试结果的数据的文件集合、档案或储存库(例如,github储存库)。例如,输出的集成电路设计数据结构可以包括使用设计流程生成的文档和/或使用设计流程生成的现场可编程门阵列仿真数据结构。例如,输出的集成电路设计数据结构可以被传输1450到外部设备(例如,个人计算设备)以用于显示或存储。例如,输出集成电路设计数据结构可以存储1450在存储器(例如,存储器306)中。例如,可以在用户界面(例如,用户界面320)中显示1450输出的集成电路设计数据结构。例如,可以经由网络通信接口(例如,网络通信接口318)传输1450输出的集成电路设计数据结构。
119.尽管为了清楚起见,过程1400被示出为一系列操作,但过程1400的实施方式或结合本文公开的实施方式描述的任何其他技术、过程或算法可以以各种顺序或同时执行。此外,根据本公开的操作可以与本文未呈现和描述的其他操作一起执行。例如,过程1400还可以包括:生成设计流程的有向无环图的图形表示;以及传输、存储或显示图形表示。此外,可以省略本文描述的系统和技术的一个或多个方面。例如,可以从过程1400中省略操作1450。
120.在一些实施方式中,过程1400可以作为用于集成电路的更大自动化设计流程的一部分来实现(例如,如关于图15的过程1500所描述的)。例如,设计流程配置数据结构可以是设计参数数据结构(例如,设计参数数据结构122)的一部分。例如,过程1400可以被扩充为包括:访问设计参数数据结构,其中,设计参数数据结构包括集成电路设计的设计参数值;响应于标识设计参数数据结构的命令,基于设计参数数据结构生成用于集成电路的寄存器传输级数据结构;响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构生成用于集成电路的软件开发工具包;其中,响应于标识设计参数数据结构的命令选择多个流程模块;其中,响应于标识设计参数数据结构的命令生成设计流程;其中,输出的集成电路设计数据结构包括用于集成电路的物理设计数据结构,该物理设计数据结构响应于标识设计参数数据结构的命令、基于寄存器传输级数据结构而生成;响应于标识设计参数数据结
构的命令,基于设计参数数据结构和验收标准生成用于集成电路的测试计划;响应于标识设计参数数据结构的命令,基于测试计划、寄存器传输级数据结构、软件开发工具包和物理设计数据结构调用用于集成电路的测试以获得一组测试结果;以及传输、存储或显示基于寄存器传输级数据结构、软件开发工具包、物理设计数据结构和测试结果的设计数据结构。例如,过程1400可以被扩充以包括将基于物理设计数据结构的物理设计规范传输到服务器(例如,制造商服务器230)以调用集成电路的制造。在一些实施方式中,过程1400被扩充以包括:制造集成电路;将集成电路安装在系统中,该系统被配置成响应于经由与云服务器的通信接收的命令来操作集成电路;以及传输用于访问和控制集成电路的登录。
121.图15是用于基于寄存器传输级数据结构使用动态设计流程以生成用于集成电路的物理设计数据结构的过程1500的示例的流程图。过程1500包括:访问1510设计参数数据结构;基于设计参数数据结构生成1520用于集成电路的寄存器传输级数据结构;基于寄存器传输级数据结构生成1530用于集成电路的软件开发工具包;使用动态设计流程基于寄存器传输级数据结构生成1540用于集成电路的物理设计数据结构;基于寄存器传输级数据结构生成1550用于集成电路的文档;基于寄存器传输级数据结构和软件开发工具包,生成1560用于集成电路的现场可编程门阵列仿真数据结构;基于设计参数数据结构和验收标准生成1570用于集成电路的测试计划;基于测试计划、寄存器传输级数据结构、软件开发工具包和物理设计数据结构调用1580用于集成电路的测试,以获得一组测试结果;以及传输、存储或显示1590基于寄存器传输级数据结构、软件开发工具包、物理设计数据结构和测试结果的设计数据结构。过程1500可以响应于单个命令(例如,构建命令)自动生成和测试符合设计参数数据结构中的设计参数值的集成电路设计。例如,过程1500可以由集成电路设计服务基础设施110实现。例如,过程1500可以由图1的系统100实现。例如,过程1500可以由图3的系统300实现。
122.过程1500包括访问1510设计参数数据结构(例如,文件、数据库、储存库或比特流)。设计参数数据结构包括集成电路设计的设计参数值。在一些实施方式中,设计参数数据结构包括设计流程配置数据结构。设计流程配置数据结构可以用工具控制语言(例如,tcl脚本语言)编码。例如,设计流程配置数据结构可以标识待在设计流程中使用的电子设计自动化(eda)工具。例如,设计流程配置数据结构可以包括待用于在设计流程中使用的电子设计自动化(eda)工具的配置参数。例如,集成电路设计可以具有ip核。例如,集成电路设计可以具有片上系统。例如,设计参数数据结构可以包括json文件。例如,设计参数数据结构的设计参数可以包括是否支持特权模式、是否支持乘数扩展、是否支持浮点扩展、在片上存储器中是否支持纠错代码、指令缓存的大小、指令缓存的关联性、片上存储器中的数据子系统的大小、是否包括端口(例如,前端端口、系统端口、外围端口或存储器端口)、存储器端口通道的计数、端口通信协议选择、总线宽度、物理存储器保护单元的计数、是否支持jtag调试、硬件断点的计数、是否支持指令跟踪、是否支持调试直接存储器访问、本地中断的计数、是否支持平台级中断控制器、中断优先级的计数、全局中断的计数、是否支持分支预测、分支目标缓冲器条目的计数、分支历史表条目的计数和/或制造过程的选择。例如,可以通过接收设计参数数据结构(例如,使用网络通信接口318经由与web客户端102或脚本api客户端104的网络通信)来访问1510设计参数数据结构。例如,可以通过读取设计参数数据结构(例如,经由总线304从存储器306读取)来访问1510设计参数数据结构。
123.过程1500包括:响应于标识设计参数数据结构的命令,基于设计参数数据结构生成1520用于集成电路的寄存器传输级数据结构。例如,命令可以是用户使用web客户端102通过web应用服务器112的web接口的图标发布的构建命令。例如,命令可以是由在脚本api客户端104上运行的脚本经由脚本api服务器114发布的构建命令。该命令可以显式地或隐式地标识设计参数数据结构。例如,该命令可以通过与设计参数数据结构的副本一起发送来标识设计参数数据结构。例如,该命令可以通过包括对先前已存储的设计参数数据结构的指针或其他引用来标识设计参数数据结构。例如,设计参数数据结构可以包括列出设计参数和对应值的标识符的json文件。在一些实施方式中,设计参数数据结构还包括标识设计参数修改的模板集成电路设计的指示(例如,指针、名称或另一标识符)。例如,模板集成电路设计可以包括遵守用于促进模块化设计的惯例的模块化设计数据结构。例如,基于设计参数数据结构生成1520用于集成电路的寄存器传输级数据结构可以包括用基于设计参数数据结构的数据调用寄存器传输级服务(例如,寄存器传输级服务模块130)。例如,可以实施图6的过程600以基于设计参数数据结构生成1520用于集成电路的寄存器传输级数据结构。
124.例如,寄存器传输级数据结构可以包括一个或多个verilog文件。寄存器传输级数据结构可以包括更新的配置设定以驱动集成电路设计流水线的后期阶段。在一些实施方式中,寄存器传输级数据结构包括存储器映射、一个或多个端口分配以及布局规划信息。
125.可以使用诸如scala、chisel、diplomacy和/或firrtl的工具基于设计参数数据结构自动生成1520寄存器传输级数据结构(例如,寄存器传输级文件)。例如,生成1520用于集成电路的寄存器传输级数据结构可以包括执行scala代码以读取设计参数数据结构并动态生成电路图。在一些实施方式中,生成1520用于集成电路的寄存器传输级数据结构包括在chisel中调用diplomacy封装以确定用于集成电路的总线协议。
126.过程1500包括:响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构生成1530用于集成电路的软件开发工具包。在一些实施方式中,生成1530用于集成电路的软件开发工具包包括生成用于verilog模拟器和物理现场可编程门阵列的加载程序以进行闪存。例如,生成1530软件开发工具包可以包括访问现有工具链或软件开发工具包以用于由设计参数数据结构标识的模板集成电路设计。现有工具链或软件开发工具包(例如,risc

v工具链/sdk)可以使用适用于可配置性的惯例来建立。例如,可以将现有工具链或软件开发工具包组织成与设计参数数据结构的设计参数相对应的子模块。例如,软件开发工具包可以包括编译器、汇编器、报头文件、库、引导加载程序、内核驱动程序和/或用于全功能sdk/计算环境的其他工具。例如,生成1530软件开发工具包包括执行python脚本。在一些实施方式中,生成1530软件开发工具包包括解析寄存器传输级数据结构(例如,json文件)、生成用于工具和构建的选项、响应于存储器映射生成头文件、从现有工具链或软件开发工具包中选择适当的示例、为目标模拟器(例如,qemu(快速模拟器))生成相关配置文件使得它们可以在另一处理器(例如,x86)上运行新设计,以及为verilog模拟器和物理fpga板生成加载程序以进行闪存。得到的软件开发工具包可以在云中构建和测试(例如,在提供给客户之前)。例如,生成1530软件开发工具包可以包括用基于寄存器传输级数据结构和/或设计参数数据结构的数据调用软件开发工具包服务(例如,软件开发工具包服务模块140)。
127.过程1500包括:响应于标识设计参数数据结构的命令,使用动态设计流程基于寄
存器传输级数据结构生成1540用于集成电路的物理设计数据结构(例如,物理设计文件)。例如,生成动态设计流程并使用它来生成物理设计数据结构可以包括实现图14的过程1400。例如,生成1540集成电路的物理设计数据结构可以包括使用基于寄存器传输级数据结构和/或设计参数数据结构的数据调用物理设计服务(例如,物理设计服务模块160)。例如,生成1540集成电路的物理设计数据结构可以包括确定得到的集成电路设计的功率、性能和面积估计并且将这些估计作为反馈提供给用户(例如,web客户端102的用户)。例如,物理设计数据结构可以以技术含量较低的术语包括物理设计是否存在任何问题。例如,物理设计数据结构可以突出综合和布局布线工具的输出的重要部件。例如,物理设计数据结构可以包括gdsii文件或oasis文件。例如,生成1540用于集成电路的物理设计数据结构可以包括在云中管理和编排物理设计工具链。例如,生成1540用于集成电路的物理设计数据结构可以包括处理从工具到工具的数据库移动,以及管理对第三方ip核的访问。例如,生成1540用于集成电路的物理设计数据结构可以包括访问模板设计,这可以允许重要的设计重复使用。例如,生成1540用于集成电路的物理设计数据结构可以包括标识那些组合以减少工作量。例如,生成1540用于集成电路的物理设计数据结构可以通过将工具问题转化为可管理的反馈并以可交付的格式向用户(例如,web客户端102的用户)提供工具的实际误差/输出,而提供更好或更紧凑的误差/问题报告。例如,生成1540用于集成电路的物理设计数据结构可以包括使用物理设计块来标识功能块的配对,这些配对可以跨设计重复使用以提高效率。
128.过程1500包括:响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构生成1550用于集成电路的文档。例如,生成1550用于集成电路的文档可以包括使用prince(在https://www.princexml.com/可获得)。例如,生成1550用于集成电路的文档可以包括使用ascii doc(在http://asciidoc.org/可获得)。例如,生成1550用于集成电路的文档可以包括访问由设计参数数据结构标识的用于模板集成电路设计的预加载模块化手册。模块化手册可以使用适用于可配置性的惯例来建立。例如,可以将模块化手册组织成与设计参数数据结构的设计参数相对应的子模块。在一些实施方式中,模块化手册作为多个部件存储在用于模板的现有sdk的对应目录中。生成1550用于集成电路的文档可以包括概括预加载的模块化手册以响应于设计参数数据结构中的设计参数值。例如,生成1550的文档可以是html格式和/或pdf格式。为了正确记录存储器映射/端口,生成1550用于集成电路的文档可以包括使用后rtl输出。例如,生成1550用于集成电路的文档可以包括利用类似于react框架的文档框架(例如,js html框架)。在一些实施方式中,文档块具有相应的python代码段,该代码段接受rtl输出配置文件并将其分解为ascii doc所需的块并调用内容生成。例如,生成1550用于集成电路的文档可以包括实现图8的过程800。例如,生成1550用于集成电路的文档可以包括用基于寄存器传输级数据结构和/或设计参数数据结构的数据调用文档服务(例如,文档服务模块150)。
129.过程1500包括:响应于标识设计参数数据结构的命令,基于寄存器传输级数据结构和软件开发工具包生成1560用于集成电路的现场可编程门阵列仿真数据结构(例如,现场可编程门阵列仿真文件)。例如,用于集成电路的现场可编程门阵列仿真数据结构可以被配置成利用基于云的现场可编程门阵列(fpga)。例如,生成1560用于集成电路的现场可编程门阵列仿真数据结构可以包括调用基于云的fpga合成工具。例如,生成1560用于集成电
路的现场可编程门阵列仿真数据结构可以包括调用仿真平台,诸如palladium(来自cadence)、veloce(来自mentor graphics)和/或zebu(来自synopsys)。例如,用于集成电路的现场可编程门阵列仿真数据结构可以被配置成处理仿真设备硬盘驱动器和网络设备。例如,现场可编程门阵列仿真数据结构可以包括仿真文件和支持材料。在一些实施方式中,用于集成电路的现场可编程门阵列仿真数据结构可以提供包括外围设备在内的整个系统一起操作的仿真(例如,需要匹配存储器时序)。例如,仿真的外围设备可以是用户在由web应用服务器112生成的web接口中选择的实际外围设备。例如,生成1560用于集成电路的现场可编程门阵列仿真数据结构可以包括高度详细地使用基于参数化集成电路设计的现有工具。例如,生成1560用于集成电路的现场可编程门阵列仿真数据结构可以包括调用fpga/仿真器工具链、建立仿真设备、和编译仿真设备。例如,生成1560用于集成电路的现场可编程门阵列仿真数据结构可以包括用基于寄存器传输级数据结构和/或设计参数数据结构的数据调用fpga/仿真服务(例如,现场可编程门阵列设计服务模块170)。
130.过程1500包括:响应于标识设计参数数据结构的命令,基于设计参数数据结构和验收标准生成1570用于集成电路的测试计划。在一些实施方式中,验收标准与设计参数数据结构一起被接收(例如,从web客户端102接收或从脚本api客户端104接收)。在一些实施方式中,验收标准从存储器(例如,存储器306)读取。例如,生成1570用于集成电路的测试计划可以包括调用verilog模拟器(例如,开源verilog模拟器)。例如,用于集成电路的测试计划可以包括使用fpga。例如,用于集成电路的测试计划可以包括利用软件模拟器,诸如快速模拟器(qemu)、spike和/或其他软件模拟器。在一些实施方式中,多个目标测试平台看起来相同,因此集成电路的测试计划可能包括在不同的成本选项之间移动工作负载(例如,使用物理fpga比使用抢占式云实例更便宜)。例如,用于集成电路的测试计划可以基于寄存器传输级数据结构(例如,包括verilog rtl)、软件开发工具包、物理设计数据结构(例如,包括gdsii文件)、测试语料库以及对应的验收标准而生成1570。在一些实施方式中,生成1570用于集成电路的测试计划可以包括响应于用户定义的变化的验收标准。给定验收标准和设计配置,可以自动生成1570测试计划。例如,生成1570用于集成电路的测试计划可以包括定义环境,在给定测试语料库和基于设计参数数据结构生成的硬件和软件设计的情况下过滤掉无法运行的测试,并生成测试计划以包括用于集成电路设计的一系列所选测试。例如,环境可以定义测试平台。在被测设备之外,测试台中可能有附加部件,并且在设计中标准化这些环境可能是有益的。例如,可以在测试平台内标准化结束测试的方式。一些测试平台可以定义cpu可以写入的寄存器,该寄存器被定义在测试台中,而一些测试平台会以某种方式摆动通用输入/输出(gpio)引脚。给定测试计划,许多测试平台可以用于所有测试。
131.过程1500包括:响应于标识设计参数数据结构的命令,基于测试计划、寄存器传输级数据结构、软件开发工具包和物理设计数据结构调用1580用于集成电路的测试以获得一组测试结果。例如,被调用1580的验证测试可以由控制器(例如,控制器120)、由验证服务(例如,验证服务模块180)和/或由外部服务(例如,基于云的fpga或经由网络通信访问的仿真服务)直接执行。在一些实施方式中,调用1580用于集成电路的测试可以包括使用基于现场可编程门阵列仿真数据结构编程的现场可编程门阵列来调用测试以获得仿真结果。现场可编程门阵列可以在云服务器上运行。例如,调用1580用于集成电路的测试可以包括使用凭证(例如,登录名和/或密码)来调用在云服务器上运行的现场可编程门阵列上的测试。例
如,测试结果可以包括大量测试的概括信息,诸如生成的集成电路设计是否满足所有验收标准的二进制指示,或者包括在测试计划中的相应验证测试是否通过单个验证测试的二进制指示列表。
132.过程1500包括传输、存储或显示1590基于寄存器传输级数据结构、软件开发工具包、物理设计数据结构和测试结果的设计数据结构。例如,设计数据结构可以是文件的集合、档案或储存库(例如,github储存库),其包括来自寄存器传输级数据结构、软件开发工具包、物理设计数据结构和测试结果的数据。例如,设计数据结构还可以包括生成1550的文档和/或生成1560的现场可编程门阵列仿真数据结构。例如,可以将设计数据结构传输1590到外部设备(例如,个人计算设备)以用于显示或存储。例如,设计数据结构可以存储1590在存储器(例如,存储器306)中。例如,可以在用户界面(例如,用户界面320)中显示1590设计数据结构。例如,设计数据结构可以经由网络通信接口(例如,网络通信接口318)传输1590。
133.尽管为了清楚起见,过程1500被示出为一系列操作,但过程1500的实施方式或结合本文公开的实施方式描述的任何其他技术、过程或算法可以以各种顺序或同时执行。此外,根据本公开的操作可以与本文未呈现和描述的其他操作一起执行。例如,图5的过程500可以用于以变化的设计参数迭代过程1500以搜索设计空间。此外,可以省略本文描述的系统和技术的一个或多个方面。例如,可以从过程1500中省略操作1550。
134.图16是用于更新设计流程1610以促进集成电路设计的系统1600的示例的框图。系统1600包括设计流程1610和一些机器学习模块(1650、1660和1670),这些模块被配置成提供反馈以用于在设计流程1610的各个层次级别处迭代地重新配置设计流程1610。在该示例中,设计流程1610包括两个任务:流程模块1620和流程模块1622。例如,设计流程1610可以至少最初基于设计流程配置数据结构来配置。例如,设计流程1610的输入可以包括设计参数数据结构(例如,设计参数数据结构122)和/或一个或多个集成电路设计数据结构(例如,寄存器传输级数据结构132)。例如,集成电路设计数据结构1640由设计流程1610输出,其可以包括一个或多个构成集成电路设计数据结构(例如,物理设计数据结构162)。
135.在该示例中,设计流程包括一系列流程模块:流程模块1620和流程模块1622。流程模块1620向电子设计自动化工具1630(例如,综合或布局布线工具)提供工具控制语言界面。流程模块1622向电子设计自动化工具1632(例如,静态时序分析工具)提供工具控制语言界面。
136.系统1600包括机器学习模块(1650、1660和1670),其被配置成提供反馈以用于作为整体调整设计流程1610和/或设计流程1610的顶点或任务。机器学习模块1650将由设计流程1610输出的集成电路设计数据结构1640的一个或多个参数1652作为输入。例如,一个或多个参数1652可以包括由集成电路设计数据结构1640描述的集成电路的功率、性能和/或面积估计。例如,电子设计自动化工具1632可以为集成电路设计数据结构1640提供功率、性能和/或面积的估计。机器学习模块1650还可以将附加信息(图16中未明确示出)作为输入,诸如例如一个或多个参数1652的性能目标;基于输入到设计流程1610的集成电路设计数据结构的一个或多个参数1652的对应估计;和/或用于配置设计流程1610的设计流程配置数据结构。机器学习模块1650输出一个或多个反馈参数1654。例如,一个或多个反馈参数1654可以对用于配置设计流程1610的设计流程配置数据结构的调整进行编码。例如,一个或多个反馈参数1654可以是可以用于重新配置设计流程1610的调整后的设计流程配置数
据结构(例如,包括工具控制语言文件)。例如,一个或多个反馈参数1654可以指定对设计流程1610的拓扑结构的改变,诸如添加、移除或换出设计流程1610中的任务(例如,流程模块)。例如,一个或多个反馈参数1654可以指定对设计流程1610中的任务(例如,流程模块1620或流程模块1622)的顺序的改变。例如,一个或多个反馈参数1654可以指定对设计流程1610中的单个任务(例如,流程模块1620或流程模块1622)的配置的改变。例如,机器学习模块1650可以包括神经网络,该神经网络已经被训练来标识导致集成电路的一个或多个参数1652变化的对用于设计流程的设计流程配置数据结构的调整。
137.机器学习模块1660将由流程模块1620输出的集成电路设计数据结构的一个或多个参数1662作为输入。例如,一个或多个参数1662可以包括由流程模块1620的输出描述的集成电路的功率、性能和/或面积估计。例如,电子设计自动化工具1630可以为在设计流程1610中的这个阶段可用的集成电路提供功率、性能和/或面积的估计。机器学习模块1660还可以将附加信息(图16中未明确示出)作为输入,诸如例如一个或多个参数1662的性能目标;基于输入到流程模块1620的集成电路设计数据结构的一个或多个参数1662的对应估计;和/或用于配置流程模块1620的设计流程配置数据结构。机器学习模块1660输出一个或多个反馈参数1664。例如,一个或多个反馈参数1664可以对用于配置流程模块1620的设计流程配置数据结构的调整进行编码。例如,一个或多个反馈参数1664可以是可以用于重新配置流程模块1620的调整后的设计流程配置数据结构(例如,包括工具控制语言文件)。例如,一个或多个反馈参数1664可以指定对流程模块1620的配置的改变。例如,机器学习模块1660可以包括神经网络,该神经网络已经被训练来标识导致集成电路的一个或多个参数1662的变化的对流程模块的设计流程配置数据结构的调整。
138.机器学习模块1670将由流程模块1622输出的集成电路设计数据结构1640的一个或多个参数1672作为输入。例如,一个或多个参数1672可以包括由流程模块1622的输出描述的集成电路的功率、性能和/或面积估计。例如,电子设计自动化工具1630可以提供在设计流程1610中的这个阶段可用的集成电路的功率、性能和/或面积的估计。机器学习模块1670还可以采用附加信息(图16中未明确示出)作为输入,诸如例如一个或多个参数1672的性能目标;基于输入到流程模块1622的集成电路设计数据结构的一个或多个参数1672的对应估计;和/或用于配置流程模块1622的设计流程配置数据结构。机器学习模块1670输出一个或多个反馈参数1674。例如,一个或多个反馈参数1674可以对用于配置流程模块1622的设计流程配置数据结构的调整进行编码。例如,一个或多个反馈参数1674可以是可以用于重新配置流程模块1622的调整后的设计流程配置数据结构(例如,包括工具控制语言文件)。例如,一个或多个反馈参数1674可以指定对流程模块1622的配置的改变。例如,机器学习模块1670可以包括神经网络,该神经网络已经被训练来标识导致集成电路的一个或多个参数1672的变化的对流程模块的设计流程配置数据结构的调整。
139.机器学习模块还可以用于迭代地调整输入到设计流程1610或单独流程模块(例如,流程模块1620或流程模块1622)的集成电路设计参数。在一些实施方式中(图16中未示出),机器学习模块1650还可以输出反馈参数,其指定对输入到设计流程1610的集成电路设计参数的调整。在一些实施方式中(图16中未示出),机器学习模块1660还可以输出反馈参数,其指定对输入到流程模块1620的集成电路设计参数的调整。在一些实施方式中(图16中未示出),机器学习模块1670还可以输出反馈参数,其指定对输入到流程模块1622的集成电
路设计参数的调整。
140.图17是用于生成设计流程的过程1700的示例的流程图。过程1700包括:基于设计流程配置数据结构生成1710第一设计流程;使用第一设计流程基于一个或多个输入集成电路设计数据结构生成1720当前集成电路设计数据结构;确定1730当前集成电路设计数据结构的一个或多个参数;当(在操作1735)需要另一次迭代时,将一个或多个参数输入1740到机器学习模块以获得一个或多个反馈参数作为机器学习模块的输出;基于一个或多个反馈参数,生成1750下一个设计流程,以开始设计流程的下一次迭代;以及当(在操作1735)不需要另一次迭代时,以当前设计流程作为最终设计流程结束1760迭代。例如,过程1700可以由集成电路设计服务基础设施110实现。例如,过程1700可以由图1的系统100实现。例如,流程1700可以由图1的物理设计服务模块160实现。例如,流程1700可以由图1的寄存器传输逻辑服务模块130实现。例如,流程1700可以由图1的软件开发工具包服务模块170实现。例如,过程1700可以由图1的文档服务模块150实现。例如,流程1700可以由图1的fpga设计服务模块170实现。例如,流程1700可以由图1的验证服务模块180实现。例如,过程1700可以由图3的系统300实现。
141.过程1700包括基于设计流程配置数据结构生成1710第一设计流程。第一设计流程可以生成1710作为包括所选流程模块作为顶点的有向无环图。例如,第一设计流程可以被编码为make文件。例如,第一设计流程可以被编码为make 文件。例如,第一设计流程可以被编码为scons python脚本。
142.过程1700包括使用当前设计流程(例如,第一设计流程或下一个设计流程)基于一个或多个输入集成电路设计数据结构生成1720当前集成电路设计数据结构。可以使用当前设计流程控制所选流程模块的相应电子设计自动化工具来生成1720当前集成电路设计数据结构。在一些实施方式中,输出的集成电路设计数据结构包括用于集成电路的物理设计数据结构。例如,当前集成电路设计数据结构可以包括用于集成电路的gdsii文件。在一些实施方式中,一个或多个输入的集成电路设计数据结构包括寄存器传输级数据结构。
143.过程1700包括确定1730当前集成电路设计数据结构的一个或多个参数(例如,一个或多个参数1652)。例如,当前集成电路设计数据结构(例如,第一集成电路设计数据结构)的一个或多个参数包括由当前集成电路设计数据结构描述的集成电路的功率、性能和/或面积的估计。例如,eda工具可以为当前集成电路设计数据结构提供功率、性能和/或面积的估计。
144.过程1700包括:当(在操作1735)未达到性能目标并且未超过迭代计数时,将一个或多个参数输入1740到机器学习模块(例如,机器学习模块1650)以获得一个或多个反馈参数作为机器学习模块的输出。机器学习模块将当前集成电路设计数据结构的一个或多个参数作为输入。机器学习模块还可以将附加信息作为输入,诸如例如一个或多个参数的性能目标;基于输入到当前设计流程的集成电路设计数据结构的一个或多个参数的对应估计;和/或用于配置当前设计流程的设计流程配置数据结构。例如,一个或多个反馈参数可以对用于配置当前设计流程的设计流程配置数据结构的调整进行编码。例如,一个或多个反馈参数可以是可以用于重新配置当前设计流程的调整后的设计流程配置数据结构(例如,包括工具控制语言文件)。例如,一个或多个反馈参数可以指定对当前设计流程的拓扑结构的改变,例如在当前设计流程中添加、移除或换出任务(例如,流程模块)。例如,一个或多个反
馈参数可以指定当前设计流程中的任务(例如,流程模块)的顺序的变化。例如,一个或多个反馈参数可以指定对当前设计流程中的单个任务(例如,流程模块)的配置的改变。例如,机器学习模块可以包括神经网络,该神经网络已经被训练来标识导致集成电路的一个或多个参数的改变的对设计流程的设计流程配置数据结构的调整。
145.过程1700包括基于一个或多个反馈参数生成1750下一个设计流程。下一个设计流程可以生成1750作为包括所选流程模块作为顶点的有向无环图。例如,下一个设计流程可以被编码为make文件。例如,下一个设计流程可以被编码为make 文件。例如,下一个设计流程可以被编码为scons python脚本。
146.虽然已经结合某些实施例描述了本公开,但应当理解,本公开不限于所公开的实施例,而是相反,旨在涵盖包括在所附权利要求范围内的各种修改和等效布置,该范围被赋予最宽泛的解释以涵盖所有这种修改和等效结构。
147.附录a
148.149.150.151.152.153.154.155.
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献