用于可编程逻辑的存储器的虚拟化的制作方法

文档序号:11160910阅读:782来源:国知局
用于可编程逻辑的存储器的虚拟化的制造方法与工艺

本公开大体涉及集成电路(IC),并且具体涉及存储器的虚拟化。



背景技术:

可编程集成电路(IC)是可以被编程以执行指定逻辑功能的设备。一种类型的可编程IC——现场可编程门阵列(FPGA)通常包括可编程片(tile)的阵列。这些可编程片包括各种类型的逻辑块,其可以包括例如输入/输出模块(IOB)、可配置逻辑模块(CLB)、专用随机存取存储器模块(BRAM)、乘法器、数字信号处理模块(DSP)、处理器、时钟管理器、延迟锁定环(DLL)、总线或网络接口(如快速外围组件互连(PCIe)和以太网等)等。

每个可编程片可以包括可编程互连和可编程逻辑。可编程互连通常包括通过可编程互连点(PIP)互连的不同长度的大量互连线。可编程逻辑使用可编程元件实现用户设计的逻辑,可编程元件可以包括例如函数发生器、寄存器、算术逻辑等。

可编程互连和可编程逻辑通常通过将配置数据流加载到定义可编程元件的配置方式的内部配置存储器单元中来实现编程。配置数据可以从存储器(例如,从外部PROM)读取或通过外部设备写入FPGA。然后,各个存储器单元的集合状态确定FPGA的功能。

一些可编程IC包括能够执行程序代码的嵌入式处理器。处理器可以被制造成包括可编程逻辑电路和可编程互连电路(也被统称为IC的“可编程电路”)的同一裸片的一部分。应当理解,执行处理器内的程序代码与在IC上可用的对可编程电路进行“编程”或“配置”是不同的。编程或配置IC的可编程电路的行为会导致可编程电路内由配置数据指定的不同物理电路的实现。

在一些实现中,可编程IC的处理器可以利用存储器虚拟化来向程序提供更多可用的存储器。在处理器上执行的每个程序运行就好像它可以访问大部分连续的计算机存储器(例如随机存取存储器(RAM))一样。即使一个程序使用的物理存储器可能是碎片化的和/或溢出到磁盘存储器上,该程序也可以使用虚拟存储器地址来操作,就像它正在访问存储器地址的连续集合一样。虚拟存储器还允许每个正在执行的程序运行就像它可以在任何给定时间都可以访问主机计算机的整个物理存储器一样,尽管其只能访问物理存储器的一部分。

虚拟存储器的实现需要硬件组件,其帮助处理器将由程序使用的虚拟存储器地址(虚拟地址)转换成由硬件使用以用于代表程序读取和写入存储器的物理存储器地址(物理地址)。存储器管理单元负责将虚拟存储器地址转换为物理存储器地址。存储器管理单元处理由处理器请求的存储器访问。



技术实现要素:

本申请公开了一种系统,其包括处理子系统和可编程逻辑子系统。处理子系统被配置为执行程序,所述程序使用一组虚拟存储器地址以引用用于存储所述程序的变量的存储器位置。可编程逻辑子系统被配置为实现配置数据流中指定的一组电路。该组电路中的每一个都包括多个输入/输出(I/O)电路,每个电路具有相应的标识符(ID)并且被配置为访问变量中一个相应的变量。该系统还包括存储器和存储器管理电路,存储器管理电路被配置为将该组虚拟存储器地址映射到存储器的物理存储器地址。对于所述多个I/O电路中的每一个,存储器管理电路还将I/O电路的ID映射到物理存储器地址,其被映射到I/O电路被配置以访问的相应变量的虚拟存储器地址。该系统还包括耦接到至少一个I/O电路的至少一个转换后备缓冲器(“translation look-aside buffer”,TLB)。响应于接收到指示ID的存储器访问请求,TLB被配置为向存储器提供指示映射到ID的物理存储器地址的存储器访问请求。

本申请还公开了一种用于操作具有处理子系统和可编程逻辑子系统的可编程IC的方法。在处理子系统上执行程序,该程序使用一组虚拟存储器地址来引用用于储存所述程序的变量的存储器的位置。可编程逻辑子系统被编程以实现配置数据流中指定的一组电路。该组电路包括多个I/O电路,每个I/O电路具有相应的ID并且被配置为访问变量中一个相应的变量。对于每个I/O电路,通过从输入/输出电路向连接到存储器的多个TLB中的一个提供指示I/O电路的ID和虚拟存储器地址的存储器访问请求,来访问相应的变量。通过使用所述TLB中的一个,基于ID和虚拟存储器地址来确定存储对应变量的物理存储器地址。将包括所确定的物理存储器地址的存储器访问请求从所述TLB中的一个提供到存储器。

通过考虑具体实施方式和权利要求将认识到其它特征。

附图说明

所公开的方法和电路的各个方面和特征将在阅读下面的详细描述并参考附图时变得显而易见,其中:

图1示出根据一个或多个实施例的被配置为对处理子系统和可编程逻辑子系统执行地址转换的示例可编程IC;

图2示出根据一个或多个实施例的用于在可编程IC启动时配置处理子系统和可编程逻辑子系统的过程;

图3示出根据一个或多个实施例的用于转换包括在由可编程逻辑子系统发出的存储器访问请求中的虚拟存储器地址的过程;

图4示出根据一个或多个实施例的被配置为对处理子系统和可编程逻辑子系统执行地址转换的另一示例性可编程IC;并且

图5示出了可以根据一个或多个实施例配置的另一可编程IC。

具体实施方式

虚拟存储器地址的使用可能对在可编程集成电路的处理子系统中执行的电路设计的软件部分和在可编程逻辑子系统中实现的电路设计的硬件部分之间的数据通信构成挑战。例如,通过访问存储变量的存储器地址,在处理子系统中执行的程序的变量可以被可编程逻辑访问。但是,当处理子系统使用虚拟存储器地址时,可编程逻辑子系统难以确定哪些物理地址对应于要访问的变量。在某些方法中,可以在处理子系统上执行软件来执行虚拟存储器地址的转换。然而,这种方法可能会很低效,增加了软件的复杂性,并降低了软件的可移植性。

本申请公开了有效地将可编程逻辑子系统发出的存储器访问请求映射和路由到与要访问的程序变量对应的物理存储器地址的方法和电路。在一些实施例中,可编程IC包括处理子系统,其被配置为执行程序,该程序使用一组虚拟存储器地址以引用用于存储程序的变量的存储器位置。可编程IC还包括可编程逻辑子系统,其被配置为实现配置数据流中指定的一组电路,该组电路通过访问程序的一个或多个变量与该程序交互操作。例如,该组电路可以包括多个输入/输出(I/O)电路,每个I/O电路具有相应的标识符(ID)并被配置为读取和/或修改多个程序变量中一个相应的程序变量。

可编程IC包括存储器管理电路,其被配置为当处理子系统被初始化以执行该程序时将该组虚拟存储器地址映射到存储器的物理存储器地址。存储器管理电路还将I/O电路的ID映射到与要访问的变量对应的物理存储器基地址(base physical memory address)。在对可编程IC的后续操作过程中,从可编程逻辑子系统向用于地址转换的一个或多个转换后备缓冲器(TLB)提供存储器访问请求。每个TLB被配置为确定与接收的存储器访问请求中指示的ID和/或虚拟存储器地址对应的物理存储器地址。在确定物理存储器地址后,TLB代表I/O电路,向存储器提供指示物理存储器地址的存储器访问请求。

在一些实施例中,TLB被配置为响应于指示ID和/或虚拟存储器地址的存储器访问请求的第一实例,检索ID和/或虚拟存储器地址到物理存储器地址的映射。例如,可以从存储器管理电路请求该映射。TLB可缓存被检索到的ID和/或虚拟存储器地址到物理存储器地址的映射,以供以后使用。缓存地址映射有助于减少存储器管理电路必须执行的地址转换的负担。在一些其它的实施例中,在可编程逻辑子系统生成存储器地址请求之前,存储器管理电路可以被配置为于启动时向每个TLB提供地址映射表。

TLB可以使用各种电路实现。在一些实施例中,TLB可以使用内容可寻址存储器(CAM)来缓存地址映射条目(address mapping entry)。与使用存储器地址访问数据的随机存取存储器(RAM)不同,CAM可以搜索存储数据以寻找包括指定的虚拟存储器地址和/或ID的条目。如果在CAM内未找到指定的ID和/或虚拟存储器地址,则可以生成导致从存储器映射电路中检索物理存储器地址的异常(exception)。

在一些实施例中,TLB是被耦接到可编程IC上的可编程逻辑和存储器的硬连线电路。可选地或另外地,可编程逻辑子系统中的可编程资源可被编程以形成一些或所有TLB。使用可编程资源来实现TLB可以允许设计者专门配置可编程IC以满足用户设计的要求。例如,对于一些应用,可以仅生成少量的存储器访问请求以在处理和可编程逻辑子系统之间交换数据。对于这样的应用,可以使用单个TLB来执行用于存储器访问请求的地址转换。对于其它一些应用,可能需要大量的TLB来为更大数量的存储器访问请求执行地址转换。

现在转到附图,图1示出了根据一个或多个实施例的被配置为执行地址转换的示例性可编程IC。可编程IC 100包括处理子系统110,可编程逻辑子系统120和存储器190。处理子系统110可以被配置为执行程序112,程序112使用一组虚拟存储器地址来引用用于存储软件程序的变量的存储器190的位置。可编程逻辑子系统120还可以被配置为实现包括多个I/O电路124和126的电路设计122,I/O电路124和126被配置为通过访问用于存储程序变量的存储器190的物理位置与程序112交换数据。

可编程IC包括存储器管理电路170,其被配置为将程序使用的虚拟存储器地址映射到存储器190的存储程序变量的物理存储器地址。存储器管理电路170还被配置为将I/O电路124和126的ID映射到与要访问的变量对应的物理存储器地址。

在操作过程中,I/O电路124和126使用存储器访问请求(如读请求或写请求)来访问存储在存储器190中的变量。存储器访问请求可以指示例如作为源地址的I/O电路的ID和与作为目标地址的对应于程序变量的虚拟存储器地址。由I/O电路124和126发出的存储器访问请求被提供给TLB 144和146以用于地址转换。在该示例中,可编程IC还包括TLB 140,其被配置为在程序112执行期间,转换虚拟存储器地址以用于处理子系统110发出的存储器访问请求。

当接收到存储器访问请求时,TLB 140、144和146确定与存储器访问请求中指示的虚拟存储器地址和/或ID对应的物理存储器地址。例如,可以从存储器管理电路请求对应于虚拟存储器地址和/或ID的物理存储器地址。在各种实施例中,物理存储器地址可以被确定为ID、虚拟存储器地址或这两者的函数。然后使用所确定的物理存储器地址作为目标地址将存储器访问请求提供给存储器。如上所述,在确定用于ID和虚拟存储器地址的物理存储器地址之后,TLB可以缓存指示物理存储器地址到ID和/或虚拟存储器地址的映射的条目。被缓存的条目稍后可以用于确定与ID和/或虚拟存储器地址对应的物理存储器地址,而不用联系存储器管理电路170。

图2示出根据一个或多个实施例的用于在可编程IC启动时配置处理子系统和可编程逻辑子系统的过程。在可编程IC的启动202时,在框204处操作系统(OS)被载入处理子系统。在框206处,可编程逻辑子系统被编程以实现在配置数据流中指定的电路。在框208,将程序的实例加载到OS中。作为程序实例的加载的一部分,被程序使用以用于执行的虚拟存储器地址被映射到物理存储器地址。在框210,该过程确定被实现在可编程逻辑子系统中的电路所访问的程序变量。在一些实施例中,例如,配置数据流可以指定被在可编程逻辑子系统中形成的电路访问的变量或虚拟存储器地址。在框212,访问变量的电路的ID被映射到存储变量的对应的物理存储器基地址。

图3示出根据一个或多个实施方式的用于转换包括在由可编程逻辑子系统发出的存储器访问请求中的虚拟存储器地址的过程。当TLB接收到存储器访问请求302时该过程启动。如果用于存储器访问请求302中指示的ID和/或虚拟存储器地址的物理存储器地址被缓存,则判定块304将过程引导框块306。在框306,使用缓存的物理存储器地址作为目标地址,将存储器访问请求提供给存储器。否则,在框308处将转换请求发送到存储器管理电路。一旦从存储器管理电路接收到物理存储器地址,则过程进行到框310,其中物理存储器地址到虚拟存储器地址以及ID的映射被缓存。在框312,使用缓存的物理存储器地址作为目标地址,将存储器访问请求提供给存储器。

图4示出根据一个或多个实施例的被配置为对处理子系统和可编程逻辑子系统执行地址转换的另一示例性可编程IC。可编程IC 400包括处理子系统410,其可以被配置为执行用户程序414,用户程序414使用一组虚拟存储器地址来以引用用于存储软件程序的变量的存储器490的位置。如该示例所示,处理子系统410可以包括用于执行程序414的一个或多个处理器412。在该示例中,处理子系统410还包括缓存416,用于存储由程序414使用的存储器位置的本地副本。在一些实施例中,可编程IC 400包括缓存一致性互连(cache coherent interconnect)450,其被配置为维持存储在缓存416中的被缓存的存储器位置的值与存储在存储器490中的被缓存的存储器位置的值之间的一致性。

可编程IC 400还包括可编程逻辑子系统420,其可以被配置为实现电路设计424。电路设计424包括多个I/O电路426和428,其通过访问用于存储程序的变量的存储器490的位置与程序414交换数据。

类似于图1所示的可编程IC,IC 400包括存储器管理电路470,其被配置为将程序使用的虚拟存储器地址映射到存储程序变量的存储器490的物理存储器地址。存储器管理电路470还将I/O电路426和428的ID映射到与要访问的变量相对应的物理存储器基地址。在操作期间,I/O电路426和428使用存储器访问请求(如读取请求或写入请求)来访问存储在存储器490中的变量。

在该示例中,可编程逻辑子系统420包括一组接口电路430、432、434和436。接口电路430、432、434和436中的每一个都可以被配置为通过交换网络460或其它数据总线将数据传送到一个或多个I/O电路426和428和/或从一个或多个I/O电路426和428接收数据。作为一个示例,接口电路可以是AXI Fabric接口(AFI),其被配置为根据AXI通信协议缓冲和传送数据。

在一些实施例中,I/O电路426和428的ID还可以标识接口电路430、432、434和436中的哪一个被用于传送数据。在一个示例性实施例中,可以使用10位ID(xxxxyyyyyy),其中4个最高有效比特(xxxx)唯一地标识接口电路。6个最低有效比特(yyyyyy)可以唯一地标识经由每个接口电路通信的用户设计的多达64个不同的电路。这种ID还可以用于标识可编程IC中的其他电路。例如,4个最高有效标识(xxxx)可以用于唯一地标识包括在处理子系统中的处理器(例如,412)。6个最低有效比特(yyyyyy)可以被用于区分在处理器上执行的不同程序实例。

在该示例中,接口电路430、432、434和436通过TLB 442、444和446连接到交换网络。参考前面图1中的TLB 144和146所描述的,TLB 442、444和446被配置为对从接口电路430、432、434和436接收的存储器访问请求执行地址转换。地址转换可以与TLB和存储器管理电路470一起执行(例如,使用图3所示的过程)。在通过地址转换为存储器访问请求确定了物理存储器地址之后,TLB 442、444或446修改存储器访问请求以使用所确定的物理存储器地址作为目标地址。TLB 442、444或446向存储器490(经由交换网络460)和/或缓存一致性互连450提供修改后的存储器访问请求,以访问期望的存储器位置。如上所述,在一些实施例中,可以使用可编程逻辑子系统420的可编程资源来实现一个或多个TLB(例如,422)。

在该示例中,可编程IC 400还包括一个或多个外部I/O电路480,其可以用于经由可编程IC 400的一个或多个外部数据端口来传送数据。数据可以在处理子系统410和/或可编程逻辑子系统420之间经由核心交换网络(core switching network)462通信。在一些实施例中,外部I/O电路480还可以通过使用指示虚拟存储器地址的存储器访问请求访问程序的变量,来与处理子系统410通信。TLB 440被配置为对这种存储器访问请求执行地址转换,如参考TLB 442、444和446所描述的。

图5示出了可以根据一个或多个实施例配置的可编程IC 502。可编程IC还可以被称为片上系统(SOC),其包括处理子系统510和可编程逻辑子系统530。处理子系统510可以被编程以通过执行用户程序实现用户设计的软件部分。程序可以被指定为配置数据流的一部分,或者可以从片上或片外数据存储设备取回。处理子系统510可以包括用于执行一个或多个软件程序的各种电路512、514、516和518。电路512、514、516和518可以包括例如一个或多个处理器核、浮点单元(FPU)、中断处理单元、片上存储器、存储器缓存和/或缓存一致性互连。

可编程IC 502的可编程逻辑子系统530可以被编程以实现用户设计的硬件部分。例如,可编程逻辑子系统可以包括多个可编程资源532,其可以被编程以实现配置数据流中指定的一组电路。可编程资源532包括可编程互连电路,可编程逻辑电路和配置存储器单元。可编程逻辑使用可编程元件实现用户设计的逻辑,可编程元件可以包括例如函数发生器、寄存器、算术逻辑等。可编程互连电路可以包括通过可编程互连点(PIP)互连的不同长度的大量互连线。

可编程资源532可以通过将配置数据流加载到配置存储器单元中被编程,配置存储器单元定义可编程互连电路和可编程逻辑电路的配置方式。然后,各个存储器单元的集体状态确定可编程资源532的功能。配置数据可以从存储器(例如,从外部PROM)读取,或者通过外部设备写入可编程IC 502。在一些实施例中,配置数据可由包括在可编程逻辑子系统530中的配置控制器534加载到配置存储器单元中。在其它一些实施例中,可通过处理子系统510执行的启动过程将配置数据加载到配置存储器单元中。

可编程IC 502可以包括各种电路以将处理子系统510与在可编程逻辑子系统530内实现的电路互连。在该示例中,可编程IC 502包括核心交换器526,其可以在处理子系统510和可编程逻辑子系统530的各种数据端口之间路由数据信号。核心交换器526还可以在可编程逻辑或处理子系统510和530中的任一个与可编程IC的各种其它电路(例如内部数据总线)之间路由数据信号。可选地或另外地,处理子系统510可以包括直接与可编程逻辑子系统连接的接口——绕过核心交换器526。这样的接口可以使用例如由ARM公布的AMBA AXI协议规范(AXI)来实现。

在一些实施例中,处理子系统510和可编程逻辑子系统530还可以经由存储器控制器521读取或写入片上存储器522或片外存储器(未示出)的存储器位置。存储器控制器521可以被实现为与一个或多个不同类型的存储器电路通信,包括但不限于双倍数据速率(DDR)2、DDR3、低功率(LP)DDR2存储器类型,无论是16比特、32比特还是具有ECC的16比特等。能够与存储器控制器521通信的不同存储器类型的列表仅是为了说明的目的而提供,而不旨在作为限制或穷举。如图5中所示,可编程IC 502可以包括存储器管理单元520和转换后备缓冲器524,以将子系统510和530所使用的虚拟存储器地址转换为由存储器控制器521使用的物理存储器地址以访问特定存储器位置。

可编程IC可以包括用于与外部电路进行数据通信的输入/输出(I/O)子系统550。I/O子系统550可以包括各种类型的I/O设备或接口,包括例如闪存(flash memory)类型I/O设备、高性能I/O设备、低性能接口、调试I/O设备和/或RAM I/O设备。

I/O子系统550可以包括被示为560A和560B的一个或多个闪存接口560。例如,一个或多个闪存接口560可以被实现为四串行外设接口(QSPI),其被配置用于4比特通信。一个或多个闪存接口560可以被实现为并行8比特NOR/SRAM类型的接口。一个或多个闪存接口560可以被实现为NAND接口,其被配置用于8比特和/或16比特通信。应当理解,所描述的特定接口是出于说明而非限制的目的提供的。具有不同比特宽度的其他接口也可以被使用。

I/O子系统550可以包括提供比存储器接口560更高级别性能的接口562中的一个或多个。接口562A-562C中的每一个可以分别耦接到DMA控制器564A-564C。例如,接口562中的一个或多个可以被实现为通用串行总线(USB)类型的接口。接口562中的一个或多个可以实现为千兆以太网类型的接口。接口562中的一个或多个可以实现为安全数字(SD)类型的接口。

I/O子系统550还可以包括提供比接口562更低级别性能的一个或多个接口566,例如接口566A-566D。例如,接口566中的一个或多个可以被实现为通用I/O(GPIO)类型的接口。接口566中的一个或多个可以被实现为通用异步接收器/发射器(UART)类型的接口。接口566中的一个或多个可以被实现为串行外围接口(SPI)总线类型的接口。接口566中的一个或多个可以被实现为控制器局域网(CAN)类型的接口和/或I2C类型的接口的形式。接口566中的一个或多个还可以被实现为三重定时器计数器(Triple Timer Counter,TTC)和/或看门狗定时器(WDT)类型的接口。

I/O子系统550可以包括一个或多个调试接口568,例如处理器JTAG(PJTAG)接口568A和跟踪接口568B。PJTAG接口568A可以为可编程IC 502提供外部调试接口。跟踪接口568B可以提供端口以从处理子系统510或可编程逻辑子系统530接收调试(例如跟踪)信息。

如图所示,接口560、562、566和568中的每一个都可以耦接到多路复用器570。多路复用器570提供多个输出,这些输出可以被直接路由或耦接到可编程IC 502的外部引脚,例如,其中布置有可编程IC 502的封装的焊球。例如,可编程IC 502的I/O引脚可以在接口560、562、566和568之间共享。用户可以通过配置数据流配置多路复用器570,以选择使用接口560-568中的哪一个,以及,因此经由多路复用器570将其耦接到可编程IC 502的I/O引脚。I/O子系统550还可以包括结构多路复用I/O(fabric multiplexer I/O,FMIO)接口(未示出),用于将接口562-568连接到可编程逻辑子系统的可编程逻辑电路。附加地或替代地,可编程逻辑子系统530可以被配置为实现可编程逻辑内的一个或多个I/O电路。在一些实施例中,可编程IC 502还可以包括具有用于电源和/或安全管理的各种电路的子系统540。例如,子系统540可以包括电源管理单元546,其被配置为监控和维持用于为可编程IC 502的各个子系统供电的一个或多个电压域。在一些实施例中,电源管理单元546在可以禁止单个子系统在空闲时的供电,以减少功率消耗,而不禁用对正在使用的子系统的供电。

子系统540还可以包括安全电路以监视子系统的状态,以确保正确的运行。例如,子系统540可以包括被配置为监视各种子系统的状态(例如,如状态寄存器544中所指示的)的一个或多个实时处理器542。实时处理器542可以被配置为响应于检测到错误而执行多个任务。例如,对于一些错误,实时处理器542可以响应于检测到错误而生成警报。作为另一示例,实时处理器542可以重置子系统以尝试恢复子系统以校正操作。子系统540包括可用于互连各种子系统的交换网络548。例如,交换网络548可以被配置为将各种子系统510、530和540连接到I/O子系统550的各种接口。在一些应用中,交换网络548还可以用于将实时处理器542与要被监视的子系统隔离。这种隔离可能是某些应用标准(例如,IEC-61508SIL3或ISO-26262标准)所要求的,以确保实时处理器542不受在其它子系统中发生的错误的影响。

这些方法和电路被认为可应用于各种系统和应用中。考虑本说明书,其他方面和特征对于本领域技术人员将是显而易见的。例如,虽然在一些情况下一些方面和特征可以在单个附图中被描述,但是应当理解,来自一个附图的特征也可以与另一个附图的特征组合,即使该组合没有被明确地示出或明确地描述为组合。本说明书和附图仅旨在作为示例,本发明的真实范围由所附权利要求书指示。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1