CN115136116A - 用于可编程逻辑设备的快速引导***和方法 - Google Patents

用于可编程逻辑设备的快速引导***和方法 Download PDF

Info

Publication number
CN115136116A
CN115136116A CN202080095823.0A CN202080095823A CN115136116A CN 115136116 A CN115136116 A CN 115136116A CN 202080095823 A CN202080095823 A CN 202080095823A CN 115136116 A CN115136116 A CN 115136116A
Authority
CN
China
Prior art keywords
pld
read
configuration
value
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202080095823.0A
Other languages
English (en)
Other versions
CN115136116B (zh
Inventor
张甫龙
J·G·汉兹
韩伟
M·埃弗哈德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Lattice Semiconductor Corp
Original Assignee
Lattice Semiconductor Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Lattice Semiconductor Corp filed Critical Lattice Semiconductor Corp
Priority to CN202211201503.6A priority Critical patent/CN115454516A/zh
Publication of CN115136116A publication Critical patent/CN115136116A/zh
Application granted granted Critical
Publication of CN115136116B publication Critical patent/CN115136116B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/24Resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7871Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Logic Circuits (AREA)

Abstract

提供了各种技术,以实施可编程逻辑设备(PLD)的快速引导。在一个示例中,一种方法包括:对非易失性存储器执行读取操作,以获得第一值。所述方法还包括:将所述值与预定值进行比较以获得比较结果。所述方法还包括:至少基于所述第一比较结果来确定存储在所述非易失性存储器上的引导映像是否要被读取。所述方法还包括:基于所述确定,对所述引导映像执行读取操作,以获得与设备的引导相关联的数据。所述方法还包括:至少基于所述数据来引导所述设备。提供了相关***和设备。

Description

用于可编程逻辑设备的快速引导***和方法
相关申请的交叉引用
本申请要求作为于2019年12月6日提交的标题为“FAST BOOT SYSTEMS ANDMETHODS FOR PROGRAMMABLE LOGIC DEVICES”的美国专利申请号16/706,591的延续的权益和优先权,该申请通过引用全部并入本文。
美国专利申请号16/706,591与于2018年12月20日提交的标题为“FAST BOOTSYSTEMS AND METHODS FOR PROGRAMMABLE LOGIC DEVICES”的美国专利申请号16/228,647相关,该申请要求于2017年12月29日提交的标题为“FAST BOOT SYSTEMS AND METHODS FORPROGRAMMABLE LOGIC DEVICES”的美国临时专利申请号62/612,265的权益和优先权,其中每一个均通过引用全部并入本文。
技术领域
本发明大体上涉及可编程逻辑设备,更具体地涉及用于这种设备的快速引导技术。
背景技术
可编程逻辑设备(PLD)(例如现场可编程门阵列(FPGA)、复杂可编程逻辑设备(CPLD)、片上现场可编程***(FPSC)或其他类型的可编程设备)可以利用各种用户设计进行配置,以实施期望的功能性。通常,用户设计被合成并且映射到可配置资源中,包括通过非限制性示例可编程逻辑门、查找表(LUT)、嵌入式硬件、互连和/或在特定PLD中可用的其他类型的资源。然后针对合成和映射的用户设计的物理放置和路由可以被确定,以生成针对特定PLD的配置数据。所生成的配置数据被加载到PLD的配置存储器中,以实施可编程逻辑门、LUT、嵌入式硬件、互连和/或其他类型的可配置资源。配置数据的加载可能需要相当长的时间。因此,需要用于配置数据的加载和PLD操作的改进技术。
附图说明
图1图示了根据本公开的实施例的PLD的框图。
图2图示了根据本公开的实施例的具有输入/输出结构和逻辑结构以及关联的处理电路的PLD的框图。
图3A至3C图示了根据本公开的实施例的PLD的框图,其中输入/输出部分被指定用于在配置和唤醒的各个阶段的快速引导。
图4图示了根据本公开的实施例的PLD的框图,其中输入/输出部分被指定用于快速引导。
图5和6图示了根据本公开的实施例的PLD的框图,其中输入/输出和逻辑核部分被指定用于快速引导。
图7图示了根据本公开的实施例的用于激活和提供输入/输出功能性的输入/输出控制电路的框图。
图8图示了根据本公开的实施例的PLD的示例设计过程的流程图。
图9图示了根据本公开的实施例的用于促进PLD的快速引导功能性的示例过程的流程图。
图10图示了根据本公开的实施例的具有PLD以及PLD从其引导的外部设备的***。
图11图示了根据本公开的实施例的PLD的引导序列和用户阶段。
图12图示了根据本公开的实施例的用于促进PLD的引导的示例过程的流程图。
图13图示了根据本公开的实施例的用于促进PLD的引导的示例过程的流程图。
图14图示了根据本公开的一个或多个实施例的PLD的引导序列和用户阶段。
本公开的实施例及其优点通过引用以下详细描述得到最好的理解。应当理解,相似的附图标记被用于标识一个或多个附图中图示的相似元件。
具体实施方式
提供了各种技术来促进针对PLD的快速引导。在一些实施例中,PLD可以被实施为具有快速引导能力,以允许PLD的输入/输出(I/O)结构的至少一部分提供I/O功能性。快速引导也可以被称为快速唤醒、快速激活、早期引导、早期唤醒、早期激活或其变型。在一些情况下,备选地或另外,逻辑结构的一部分和/或PLD的其他组件可以被指定用于快速引导。为此,PLD的一些功能性(例如I/O和/或逻辑功能性)可以被指定用于快速引导。
在实施例中,为了促进快速引导,与被指定用于快速引导的I/O结构的一部分相关联的配置数据可以被加载到与I/O结构的该部分相关联的配置存储器单元中。一旦配置存储器单元已经被配置(例如被编程、被加载有配置数据),唤醒信号就可以被提供以唤醒(例如也称为激活)与I/O结构的该部分相关联的I/O功能性。在唤醒I/O功能性时,I/O功能性从配置模式转换到快速引导操作模式。
在I/O结构的部分已经被激活之后,PLD的剩余配置存储器单元(可以包括逻辑结构和I/O结构的任何剩余部分)可以被配置有对应的配置数据并且被激活。一旦所有配置数据都被加载到PLD中,PLD就可以唤醒并且提供功能性。在唤醒PLD的剩余功能性时,功能性转换到全***操作模式(例如,也称为正常操作模式)。在一个方面中,被指定用于快速引导的I/O功能性可以从快速引导操作模式转换到全***操作模式,而剩余功能性(例如,未被指定用于快速引导的功能性)可以从配置模式转换到全***操作模式。备选地或除了指定至少一些I/O功能性用于快速引导之外,PLD的逻辑功能性和/或其他组件可以被指定用于快速引导。
配置数据可以被提供为配置位流。用于配置(例如将配置数据加载到)PLD的配置时间可以基于配置方法、位流源、要被写入到PLD中的位流(例如包括配置位流)的链路速度和/或其他因素。在使用配置位流配置PLD之前,PLD的I/O结构和逻辑结构可能处于未知状态或三态状态(例如除了通常处于定义状态的PLD的任何硬编码组件通电之外)。
在提供I/O功能性的快速引导时,PLD可以在使设备通电后不久提供可预测的I/O行为(例如I/O功能性),而无需等待整个PLD在提供这种I/O行为之前配置和激活。这种设备可以包括PLD和/或可以由PLD控制。设备的示例可以是风扇或发光二极管(LED)。在这方面,被激活的I/O功能性可以将具有期望驱动器特点(例如I/O类型、驱动强度、上拉/下拉特征等)的正确极性(例如打开或关闭、1或0)驱动到由PLD控制的设备。
在一些用户指定的应用中,与提供I/O行为相关的延迟可能会对用户和/或消费者体验产生不利影响和/或在其他方面是不期望的。例如,由PLD控制的LED可能具有未定义的行为(例如,由于未定义的I/O功能性),在功能性被激活(例如,置于定义状态中)之前,该行为可能会被体验为LED的闪烁或通常任何不当行为。通过提供快速引导以允许提前唤醒与LED相关联的PLD的I/O行为,LED可以接收适当的控制信号来定义LED的行为。在这些用户指定的应用中,PLD的其他功能性可能被认为不太关键、对时间不太敏感和/或不太明显,因此可以在稍后时间被激活。作为示例,在整个PLD在数十或数百毫秒内被配置和激活的情况下,被指定用于快速引导的PLD部分可以在微秒范围内(例如1μs至1,000μs)进行配置和激活。与快速引导操作的配置和激活相关联的时间可以至少部分地基于被指定用于快速引导的I/O和/或逻辑功能性的数量。
在一些方面中,由PLD提供的这种I/O功能性可以被称为静态控制,并且这种I/O功能性的快速引导可以被称为快速引导静态控制。静态控制可以为被耦合至PLD的组件提供控制,该组件通常独立于PLD的逻辑结构。在一些情况下,快速引导可以被应用于控制I/O功能性的PLD的逻辑结构的一部分。在这些情况下,快速引导可以促进静态控制(例如独立于逻辑结构的基于I/O结构的控制)和/或逻辑结构控制的I/O。
在实施例中,安全性可以针对配置数据的至少一部分启用。为了启用安全性,一个或多个认证证书可以被生成。在一些情况下,一个或多个认证证书可以被提供用于配置数据,该配置数据与被指定用于快速引导的结构(例如I/O和/或逻辑功能性)相关联,和/或一个或多个认证配置可以被提供用于未被指定用于快速引导的配置数据。认证可以在对应的配置数据已被加载到PLD之前或之后基于(多个)认证证书执行。例如,当I/O结构的一部分被指定用于快速引导时,配置数据的一部分可以被加载到与I/O结构的该部分相关联的配置存储器单元中。认证可以基于与配置数据的该部分相关联的(多个)认证证书来执行。如果认证成功,则与I/O结构的该部分相关联的功能性可以被激活,并且剩余的配置数据被加载到PLD中。如果认证不成功,则PLD的配置和激活可能会被中止。
使用各种实施例,PLD的I/O和/或逻辑功能性的部分可以在配置和激活其他功能性之前进行配置和激活,以提供稳定的,受控的状态。在一些情况下,至少一些I/O功能性可以被指定用于快速引导,以实现PLD相对于这种I/O功能性的低I/O唤醒时间。在一些方面中,一旦PLD的剩余部分被配置和被激活,从快速引导操作模式到全***操作模式的无缝(例如无故障)转换就可以被提供。
现在参照附图,图1图示了根据本公开的实施例的PLD 100的框图。PLD 100(例如FPGA、CPLD、FPSC或其他类型的可编程设备)通常包括I/O块102和可编程逻辑块(PLB)104。在一些情况下,PLD 100通常可以是具有分布式配置的任何类型的可编程设备(例如可编程集成电路),这可能涉及通过引脚加载配置数据,移位到关联结构中的适当地点,并且配置配置存储器单元。PLB也可以被称为逻辑块、可编程功能单元(PFU)或可编程逻辑单元(PLC)。在一个方面中,PLB 104可以共同形成PLD 100的集成电路(IC)核或逻辑核。I/O块102提供PLD 100的I/O功能性(例如以支持一个或多个I/O和/或存储器接口标准),而PLB104为PLD 100提供逻辑功能性(例如基于LUT的逻辑)。附加的I/O功能性可以由串行器/解串行器(SERDES)块150和物理编码子层(PCS)块152提供。PLD 100还可以包括硬知识产权核(IP)块160以提供附加功能性(例如在硬件中提供的基本上预定的功能性,它可以利用比PLB 104更少的编程配置)。
PLD 100可以包括存储器块106(例如可擦除可编程只读存储器(EEPROM)块、块静态RAM(SRAM)和/或闪存)、时钟相关电路***108(例如时钟源、锁相环(PLL)电路和/或延迟锁定环(DLL)电路)和/或各种路由资源180(例如互连和适当的切换电路,以提供用于在整个PLD 100中路由信号的路径,诸如用于时钟信号、数据信号、控制信号、唤醒信号或其他),视情况而定。PLD 100可以包括配置和激活逻辑,以接收配置数据,配置PLD 100的各种可编程元件,并且激活与这些可编程元件相关联的功能性。通常,PLD 100的各种元件可以被用于执行其预期功能以用于期望应用,如本领域技术人员将理解的。
例如,某些I/O块102可以被用于对存储器106进行编程或将信息(例如各种类型的用户数据和/或控制信号)传送给PLD 100/从PLD 100传送信息。其他I/O块102包括第一编程端口(可以表示中央处理单元(CPU)端口、***数据端口、串行***接口(SPI)接口和/或sysCONFIG编程端口)和/或第二编程端口,诸如联合测试行动组(JTAG)端口(例如通过采用诸如电气和电子工程师协会(IEEE)1149.1或1532标准等标准)。在各种实施例中,I/O块102可以被包括在内以接收配置数据和命令(例如通过一个或多个连接),以配置PLD 100以用于其预期用途,并且利用SERDES块150、PCS块152、硬IP块160和/或PLB 104支持串行或并行设备配置和信息传送,视情况而定。
应当理解的是,各种元件的数量和放置不是限制性的,并且可以取决于期望的应用。例如,针对期望的应用或设计规范(例如,针对所选择的可编程设备的类型),可能不需要各种元件。
此外,应当理解的是,为了清晰起见,元件以块形式被图示,并且各种元件通常被分布在整个PLD 100中,诸如在PLB 104、硬IP块160和路由资源180中和之间以执行它们的常规功能(例如存储配置PLD 100的配置数据或提供PLD 100内的互连结构)。例如,路由资源180可以被用于每个PLB 104内和/或不同PLB 104之间的内部连接。还应当理解,本文公开的各种实施例不被限于可编程逻辑设备,诸如PLD 100,并且可以被应用于各种其他类型的可编程设备,如本领域技术人员将理解的。
外部***130可以被用于创建PLD 100的期望用户配置或设计,并且生成对应的配置数据以对PLD 100进行编程(例如配置)。例如,为了配置PLD 100,***130可以将这种配置数据提供给I/O块102、PLB 104、SERDES块150和/或PLD 100的其他部分中的一个或多个。在这方面,外部***130可以包括连接至PLD 100的编程端口(例如SPI、JTAG)的链路140,以便于将配置数据从外部***130传送给PLD 100。因此,I/O块102、PLB 104、各种路由资源180和PLD 100的任何其他适当的组件可以被配置为根据用户指定的应用来操作。在一些情况下,I/O块102或其部分可以被指定用于快速引导。在一些情况下,PLB 104或其部分可以被指定用于快速引导。
在所图示的实施例中,***130被实施为计算机***。在这方面,***130包括例如一个或多个处理器132,该处理器132可以被配置为执行指令,诸如软件指令,该指令被提供在一个或多个存储器134中和/或以非瞬态形式被存储在一个或多个非瞬态机器可读介质136(例如可以在***130内部或外部)中。例如,在一些实施例中,***130可以运行PLD配置软件,诸如可从莱迪思半导体公司获得的莱迪思钻石***规划软件,以允许用户创建期望的配置,并且生成对应的配置数据以对PLD 100进行编程。
在一些实施例中,PLD 100的存储器106可以包括非易失性存储器(例如闪存),它被用于存储由外部***130生成并且提供给存储器106的配置数据。在PLD 100的配置期间,非易失性存储器可以经由配置路径和相关联的数据线提供配置数据,以配置PLD 100的各个部分(例如I/O块102、PLB 104、SERDES块150、路由资源180和/或其他部分)。在一些情况下,配置数据可以被存储在PLD 100外部的非易失性存储器中(例如在诸如***130中的存储器134等外部硬盘驱动器上)。在配置期间,配置数据可以从外部非易失性存储器提供(例如加载)到PLD 100中以配置PLD 100。
***130还包括例如用于向用户显示信息的用户界面135(例如屏幕或显示器)以及用于接收用户命令或设计键入以准备PLD 100的期望配置的一个或多个用户输入设备137(例如键盘、鼠标、轨迹球、触摸屏和/或其他设备)。
图2图示了根据本公开的实施例的具有I/O结构和逻辑结构以及关联的处理电路230的PLD 200的框图。PLD 200的I/O结构可以由I/O部分205、210、215和220提供。PLD 200的逻辑结构可以由逻辑核225(例如也称为IC核)提供。I/O部分205、210、215和/或220可以包括逻辑、资源(例如路由资源)、可用于存储配置数据的配置存储器和/或通常与促进提供I/O结构的功能性相关联的任何组件。类似地,逻辑核225可以包括逻辑、资源(例如路由资源)、可用于存储配置数据的配置存储器和/或通常与促进提供逻辑结构的功能性相关联的任何组件。
在实施例中,PLD 200可以是PLD 100,可以包括PLD 100或可以是PLD 100的一部分。在一个方面中,PLD 200的I/O结构可以包括I/O块102、SERDES块150、PCS块152和关联的电路***(例如路由资源180、时钟相关电路***108和/或其连接等)。在一个方面中,逻辑结构可以包括PLB 104、硬IP块160和关联电路***。
PLD 200的配置存储器可以包括可用于存储配置数据的配置存储器单元阵列(例如每个配置存储器单元可以存储一位)。配置存储器单元阵列可以被布置为行和列。在一个方面中,I/O部分205、210、215和/或220以及逻辑核225可以包括配置存储器单元(例如被布置为行和列),并且形成阵列的一部分。配置存储器单元可以是易失性存储器单元(例如RAM单元,诸如SRAM单元)。在一些情况下,配置存储器单元可以被称为配置RAM(CRAM)单元。尽管本公开通常引用对行和/或列执行的各种操作,但是行可以被用作列并且列可以被用作行,视情况而定。在一个方面中,与I/O和逻辑相关联的配置存储器单元可以被称为I/O块配置存储器单元和逻辑块配置存储器单元。
为了配置(例如编程)PLD 200(例如I/O结构和逻辑结构),配置数据可以被提供为配置位流,该配置位流被串行或并行加载到配置存储器单元中。在一些情况下,移位可以被串行执行,诸如使用JTAG或SPIx1模式。例如,备选地或另外,在一些情况下,移位可以是并行的,然后是内部移位并行/串行,诸如使用SPIx4模式或并行x8模式。PLD 200的处理电路230可以包括地址逻辑电路235和数据写入电路240,地址逻辑电路235用于断言PLD 200的地址(例如列地址),数据写入电路240用于将对应的配置数据加载到与该断言地址相关联的一个或多个配置存储器单元。例如,地址逻辑电路235可以被用于使用相应的地址线(未示出)选择性地断言阵列的列,以允许配置数据使用数据写入电路240被加载到配置存储器单元中。
在图2中,地址逻辑电路235可以是或者可以被用于控制(例如使用控制信号)地址移位器,以跨PLD 200的列实现逐列地址移位(例如由地址移位250表示)。数据写入电路240可以是或可以被用于控制(例如使用控制信号)数据移位器,以接收对应于断言列的配置数据的一部分并且将该配置数据的一部分加载到PLD 200的对应配置存储器单元中(例如由数据移位255表示)。在这方面,通过推送数据以被写入到由数据写入电路240控制的数据移位器中,使用地址逻辑电路235断言列地址以允许数据被写入到与断言的列地址相关联的配置存储器单元中,并且将数据加载到这些配置存储器单元中,配置数据可以被一次一列加载到PLD 200中。配置数据的这种推送、列地址的断言以及配置数据的加载可以针对PLD200的每个后续列执行,直到配置存储器的列已被加载有它们的对应配置数据为止。
在一些情况下,配置数据可以包括配置存储器帧,配置数据被逐帧写入到配置存储器中。例如,每个配置存储器帧可以包括针对PLD 200的一列的配置数据,每个配置存储器帧被移位到配置存储器的对应列中。
PLD 200的处理电路230可以包括唤醒电路245,以在配置数据已被加载到与(例如被用于实施)I/O结构和逻辑结构相关联的配置存储器单元中之后唤醒(例如激活)I/O结构和逻辑结构的功能性。在一方面中,唤醒可以指将PLD 200从配置模式转换到功能模式(例如也称为操作模式),在配置模式中配置数据被加载到PLD 200中,在功能模式中PLD 200提供I/O和逻辑功能性。在这方面,在PLD 200的唤醒完成之后,PLD 200被配置为使用其I/O和逻辑结构操作,以根据用户指定的应用提供I/O和逻辑功能性。这种I/O和逻辑功能性可以通过使用关联的逻辑、资源(例如路由资源)、存储的配置数据和/或其他关联组件来实现。在一些情况下,I/O结构的一部分可以提供静态控制,而I/O结构的另一部分可以由逻辑结构驱动(例如由其控制)。
在实施例中,处理电路230可以是配置和激活逻辑电路***,可以包括配置和激活逻辑电路***,或者可以是配置和激活逻辑电路***的一部分,以接收配置数据,配置PLD200的配置存储器单元,并且激活与配置存储器单元相关联的I/O结构和/或逻辑结构的功能性。在一些情况下,这种电路***的至少一部分在PLD 200中被硬编码。例如,地址逻辑电路235、数据写入电路240和唤醒电路245可以在PLD 200中被硬编码。
在一个或多个实施例中,配置数据可以被加载到PLD的一部分中,并且PLD的这些配置部分的唤醒可以被执行以促进PLD的一些功能性的快速引导。在这方面,PLD的配置部分(例如也被称为编程部分)可以指PLD的配置存储器单元阵列的配置数据的对应部分已经被加载到其中的部分。快速引导可以允许指定的功能性由PLD的配置部分提供,而PLD的其他部分仍在配置中(例如配置数据正被加载到这些未配置部分中)。在一些方面中,被指定用于快速引导的功能性可以包括指定的I/O功能性以及在一些情况下的指定的核心逻辑功能性,与PLD等待整个PLD在唤醒PLD的任何部分之前被配置的情况相比,它以更快的速度由PLD提供。
在一些方面中,PLD的制造商可以定义PLD的被指定用于快速引导的(多个)部分(例如物理位置)。PLD的被指定用于快速引导的部分可以对应于PLD的配置存储器单元阵列的子集。因此,子集中的配置存储器单元可以在配置存储器单元不是子集的一部分之前被加载有配置数据,以允许与子集相关联的功能性的早期配置和唤醒。在一些情况下,制造商可以指示(例如在数据表上)PLD的哪些部分被指定用于快速引导。用户(例如设计者)可以根据来自制造商的这些指定生成用户设计,以利用快速引导能力。例如,针对给定的用户指定应用,用户可以标识被用户认为是最时间敏感和/或最关键的功能性的I/O和/或逻辑功能性,以导致生成布局,该布局具有在被指定用于快速引导(例如在PLD的其他部分之前配置和激活)的PLD部分中提供的这种功能性。
在实施快速引导时,部分PLD(诸如I/O结构的部分并且在一些情况下为逻辑结构)可以被配置为已知状态,并且与整个PLD在唤醒之前被配置的情况相比更快地被激活。在一些情况下,一旦配置位流的几帧被加载到PLD中并且关联的唤醒被执行以激活关联的功能性,PLD的被指定用于快速引导的部分就可以被配置为已知状态。例如,由于快速引导而激活的I/O结构部分可能会驱动到正确的极性,并且具有期望的驱动器特点(例如I/O类型、驱动强度、上拉/下拉特征等),诸如通过PLD实现对组件(例如风扇、LED)的控制。
图3A至3C图示了根据本公开的实施例的PLD 300的框图,其中I/O部分205和210被指定用于在配置和唤醒的各个阶段的快速引导。PLD 300还包括未被指定用于快速引导的I/O部分215和220以及逻辑核225。在实施例中,PLD 300可以与PLD 200相同,除了被指定用于快速引导的I/O部分205和210之外。在一些情况下,I/O部分205和210可以由PLD 200的制造商指定用于快速引导。为了利用快速引导能力,用户可以基于准则(例如时间敏感性和/或功能性的重要性)将I/O功能性与I/O部分205和/或210相关联,并且将其他I/O功能性(例如对时间不太敏感和/或不太关键)与I/O部分215和/或220相关联。
通过将(例如使用地址逻辑电路235和数据写入电路240)配置数据提供到I/O部分205和210的配置存储器单元,并且在配置I/O部分205和210时使用唤醒电路245激活与I/O部分205和210相关联的I/O结构部分,处理电路230实现快速引导。在唤醒I/O结构的部分时,I/O结构的部分可以提供其关联的I/O功能性。在与I/O部分205和210相关联的功能性被激活之后,处理电路230可以配置并且激活PLD 200的其他部分215、220和225。
作为示例,为了配置PLD 300,与I/O部分205相关联的地址可以一次一个地被断言(例如从最左边的列开始),并且配置存储器帧被加载到断言的列中,直到I/O部分205的所有列都被配置为止。在一些情况下,列地址可以被断言,使得连续列从一次迭代到下一迭代被断言。与I/O部分210相关联的地址可以一次被断言一个,并且配置存储器帧被加载到断言列中,直到I/O部分210的所有列都被配置为止。在一些情况下,与I/O部分205和210的配置相关联的配置时间可以通过逐帧写入配置位流来促进(例如使时间效率更高)。例如,配置位流的第一帧集合(例如位流中较早的帧)可以被加载到I/O部分205中,并且位流的最后一个帧集合(例如朝向位流末端的帧)可以被加载到I/O部分210中。
如图3B所示,一旦I/O部分205和210被配置,唤醒电路245可以生成和提供唤醒信号以唤醒与I/O部分205和210相关联的I/O结构的部分,使得I/O结构的这些部分可以提供其功能性。在唤醒I/O结构的部分时,I/O结构的部分从配置模式转换到快速引导操作模式,使得I/O结构的部分执行I/O功能性(例如由用户所定义的)。在这方面,这种I/O功能性可以被称为快速引导静态控制。与这种I/O功能性相关联的配置数据被存储在I/O部分205和210的配置存储器单元中。
作为示例,I/O功能性可以包括使由PLD 300的I/O结构控制的LED导通。在该示例中,通过指定这种I/O功能性用于快速引导,与I/O功能性在整个PLD 300被配置之后提供的情况相比,用于由PLD 300控制LED的I/O功能性被更早地定义,从而在I/O功能性被置于定义状态以控制LED之前减少LED的任何闪烁或违规行为(misbehavior)。
为了配置PLD 300的剩余部分,处理电路230可以使用地址逻辑电路235和数据写入电路240,以将配置数据加载到I/O部分215和220以及逻辑核225的配置存储器单元中。在一些情况下,与I/O部分205和210相关联的I/O功能性可能正处于被唤醒的过程中,同时配置数据开始被加载到PLD 300的剩余部分215、220和225的剩余配置存储器中。在其他情况下,I/O功能性在配置数据开始被加载到PLD 300的剩余配置存储器之前完成唤醒。
在一些实施例中,I/O部分215和220以及逻辑核225可以以任何顺序和/或使用任何定向(例如逐行、逐列或任何其他方式)来配置。作为示例,在配置逻辑核225时,视情况而定,地址逻辑电路235和数据写入电路240可以被配置为基于逻辑核225中的配置存储器单元的行或列的数量来断言行或列并且加载关联的配置数据。在一些情况下,在图3B中,由于共享在配置被指定用于快速引导的I/O部分205和210时使用的地址和数据移位单元(例如250、255),逐列移位可能更有效(例如更快,使用更少的地址移位等)。
在一些情况下,I/O部分215和220的配置可以是分段的。例如,在图3B中,I/O部分205的一些列与I/O部分215和220的列重叠,并且类似地,I/O部分210的一些列与I/O部分215和220的列重叠。处理电路230可以使用地址逻辑电路235和数据写入电路240,以将配置数据逐列加载到I/O部分215和220中。在一个示例中,地址移位250和数据移位255可以被使用,使得I/O部分215和220的列被断言,并且针对断言的列,关联的配置数据被加载到I/O部分215和220的配置存储器单元(例如而不是I/O部分205和210的配置存储器单元)中。在另一示例中,地址移位250和数据移位255可以被用于断言I/O部分215的每列,并且将关联配置数据加载到I/O部分215中,并且然后地址移位250和数据移位255可以被用于断言I/O部分220的每列,并且将关联的配置数据加载到I/O部分215中。在其他情况下,地址逻辑电路235和数据写入电路240可以旋转它们的定向,使得地址逻辑电路235逐行断言I/O部分215和220,并且数据写入电路240加载断言行的配置数据。
配置剩余部分215、220和225的其他方式可以被使用,并且可以基于诸如速度考虑、复杂性(例如操作的数量)等准则来选择。PLD 300的不同部分可以使用处于不同定向(例如旋转)和/或具有分段数据移位的数据和地址移位来配置。
如图3C所示,在配置数据被加载到PLD 300的剩余部分215、220和225的配置存储器单元中之后,唤醒电路245为PLD 300生成和提供唤醒信号,允许唤醒PLD 300的I/O和逻辑功能性。在这方面,与快速引导相关联的I/O结构部分可以从快速引导操作模式转换到与PLD 300相关联的***操作模式。逻辑结构和I/O结构的剩余部分可以从配置模式转换到PLD 300的全***操作模式。在一些情况下,相对于整个PLD 300被配置的时间,与快速引导相关联的I/O结构部分在快速引导时可能具有不同的功能性。例如,I/O结构的一部分可以在快速引导操作模式下提供静态控制,然后在全***操作模式下转换到逻辑控制的I/O。在这方面,I/O结构的这种部分可以基于从逻辑结构提供给I/O结构的信号来提供I/O功能性。
尽管以上给出了关于将配置数据加载到I/O部分205和210中以用于快速引导配置和激活以及加载到剩余部分215、220和225中以用于正常配置和激活的示例,但是配置数据可以以任何方式被加载到I/O部分205和210,使得I/O部分205和210被配置,并且随后配置数据可以以任何方式被加载到剩余部分215、220和225中,使得剩余部分215、220和225被配置。例如,配置数据不需要被一次一列或一行加载到这些部分205、210、215、220和225中。另外,尽管图3A至3C示出了地址移位250和数据移位255,但是可以操作多个地址移位和多个数据移位(例如串行或并行、同步或独立),以配置用于快速引导的I/O部分205和210和/或之后的剩余部分215、220和225。
图4图示了根据本公开的实施例的PLD 400的框图,其中I/O部分205、210、215和220被指定用于快速引导。图3A至3C的描述通常适用于图4,具有本文提供的差异和其他描述的示例。在实施例中,PLD 400通常可以与PLD 200相同,除了I/O部分205、210、215和220被指定用于快速引导之外。
为了将PLD 400配置用于快速引导操作,可以利用各种地址移位和数据移位(由415、420、425、430、435、440、445和450表示)配置I/O部分205、210、215和220。在配置I/O部分205、210、215和220时,PLD 200的I/O结构可以被激活以提供PLD 400的I/O功能性,从而将PLD 400的I/O结构从配置模式转换到快速引导操作模式。结合激活I/O功能性或在激活I/O功能性之后,地址移位和数据移位(由405和410表示)可以被用于配置逻辑核225。与PLD400的逻辑结构相关联的逻辑功能性可以被激活,以从PLD 400的配置模式转换到全***操作模式。I/O功能性可以从快速引导操作模式转换到全***操作模式。
各种地址移位和数据移位可以是地址逻辑电路235和数据写入电路240,或者可以由地址逻辑电路235和数据写入电路240控制。为了清晰起见,在图4中未示出来自地址逻辑电路235和数据写入电路240的控制信号。在图4中,各种地址移位和数据移位彼此垂直。定向的不同组合可以被用于地址移位和数据移位。作为一个示例,移位415可以是地址移位(例如列地址移位),并且移位420可以是数据移位(例如一次一列地将数据移位)。作为另一示例,移位420可以是地址移位(例如行地址移位),并且移位415可以是数据移位(例如一次一行地将数据移位)。
在一些情况下,一个或多个地址移位器和数据移位器可以被用于配置I/O部分205、210、215和220以及逻辑核225。作为示例,当I/O部分215和220被逐列配置时,移位435和445可以通过单个列地址移位来实施,并且移位440和450可以是用于加载所断言的列的配置数据的单个数据移位器。作为另一示例,当I/O部分215和220被逐列配置时,移位435和445可以由两个(或多个)列地址移位器实施,并且移位440和450可以是两个(或多个)数据移位器,用于加载两个(或多个)同时断言的列的配置数据。在该后一示例中,移位435和445可以彼此独立地操作(例如移位435和445可以断言不同的列)。除了图4所示的那些移位之外,可以利用更少、更多和/或不同的偏移。
图5图示了根据本公开的实施例的PLD 500的框图,其中I/O部分205和210以及逻辑核部分505和510被指定用于快速引导。图3A至3C的描述通常适用于图5,具有本文提供的差异和其他描述的示例。在实施例中,PLD 500通常可以与PLD 200相同,除了I/O部分205和210以及逻辑核部分505和510被指定用于快速引导之外。
逻辑核225可以包括逻辑核部分505、510和515。为了配置PLD 500用于快速引导,可以利用地址移位(例如520)和数据移位(例如525)以配置I/O部分205和210以及逻辑核部分505和510。在一个示例中,地址移位可以通过断言I/O部分205的最左边的列并且向右移动到逻辑核部分505的最右边的列来开始配置,并且然后开始I/O部分210和逻辑核部分510的配置。
在配置部分205、210、505和510时,PLD 500的I/O结构和逻辑结构的关联部分可以被激活以提供PLD 500的关联的I/O和逻辑功能性,从而将I/O结构和逻辑结构的该部分从配置模式转换到快速引导操作模式。在这种情况下,I/O结构的部分可以提供静态控制和/或逻辑控制的I/O。结合唤醒I/O和逻辑功能性的部分或在唤醒I/O和逻辑功能性的部分之后,可以利用一个或多个地址移位和/或数据移位以将配置数据加载到逻辑核部分515和I/O部分215和220的配置存储器单元中,以配置部分215、220和515。PLD 500的I/O和逻辑功能性可以被激活以转换到PLD 500的全***操作模式。可以利用配置I/O部分205、210、215和220以及逻辑核部分505、510和515的其他方式(例如顺序、定向)。
图6图示了根据本公开的实施例的PLD 600的框图,其中I/O部分205、210、215和220以及逻辑核部分505、510、655和660被指定用于快速引导。图3A至3C的描述通常适用于图6,具有本文提供的差异和其他描述的示例。在实施例中,PLD 600通常可以与PLD 200相同,除了I/O部分205、210、215和220以及逻辑核部分505、510、655和660被指定用于快速引导之外。
为了将PLD 600配置用于快速引导操作,可以利用各种地址移位和数据移位(由615、620、625、630、635、640、645和650表示)配置I/O部分205、210、215和220以及逻辑部分655和660。结合唤醒与部分205、210、215、220、655和660相关联的I/O和逻辑功能性的部分或者在唤醒与部分205、210、215、220、655和660相关联的I/O和逻辑功能性的部分之后,移位605和610可以被用于配置逻辑核部分665。然后可以激活PLD 600的I/O和逻辑功能性,以转换到PLD 600的全***操作模式。
虽然图3A至3C和图4至6示出了具有被指定用于快速引导的I/O部分和/或逻辑部分的PLD的示例,在一些情况下,不同的I/O和逻辑部分可以在PLD中定义。例如,I/O部分205可以包括被指定用于快速引导的第一部分和未被指定用于快速引导的第二部分。如先前指示的,可以利用更多、更少和/或不同的地址移位和/或数据移位来配置PLD。另外,尽管前面按照行和列描述了I/O部分和/或逻辑核部分的配置存储器单元,其中被指定用于快速引导的配置存储器单元由连续的行/列提供,但在一些情况下,被指定用于快速引导的配置存储器单元可以以其他方式分布,并且不需要在连续的列/行中。
图7图示了根据本公开的实施例的用于激活和提供I/O功能性的I/O控制电路700的框图。图7的I/O控制电路700主要参照图3A至3C的PLD 300进行描述,其中I/O部分205和210被指定用于快速引导,尽管I/O控制电路700也可以与I/O和/或控制功能性的其他指定一起使用,诸如图4至6中的那些指定。出于讨论的目的,I/O控制电路700与被指定用于快速引导的PLD 300的I/O结构的一部分相关联。
I/O控制电路700包括经由输出路径或输入路径被耦合至逻辑结构710的I/O焊盘705。在一个方面中,逻辑结构710可以由逻辑核225提供。在一些情况下,I/O控制电路700的一部分可以被硬编码到PLD 200中,诸如I/O引导控制逻辑电路715、输出驱动器740和/或输入逻辑电路750的逻辑。
参照PLD 300,一旦I/O部分205和210被配置(例如加载有配置数据),I/O引导控制逻辑电路715可以接收唤醒信号(例如来自唤醒电路245),并且响应于唤醒信号生成控制信号以唤醒与I/O部分205和210相关联的I/O功能性。控制信号可以被用作选择器信号以控制复用器720和725的操作。在这方面,复用器720被耦合至四个输入线:三态直接数据(DD)线、触发器线、三态双倍数据速率(DDR)线和恒定值线。复用器725被耦合至三个输入线:输出DD线、输出触发器线和输出DDR线。在一些情况下,复用器720和725的DD线和DDR线允许逻辑驱动的I/O功能性。在图7中,I/O引导控制逻辑电路715的控制信号可以是选择器信号,以选择复用器720的四个输入线中的一个输入线和复用器725的三个输入线中的一个输入线。
在一些方面中,为了促进快速引导操作,I/O引导控制逻辑电路715可以生成控制信号,以导致选择复用器720和725的触发器线或复用器720的恒定值线。被存储在触发器730和735中的值(例如0或1)被提供在触发器线上。在一些情况下,触发器730和/或735可以存储配置位流的位(例如0或1值)。在其他情况下,触发器730和/或735可以存储被硬编码到PLD 300的存储器中的位(例如0或1)。在一个方面中,当被指定用于快速引导操作的逻辑结构(例如PLD 500和600)的一部分被配置时,I/O引导控制逻辑电路715可以生成控制信号以引起对触发器线、恒定值线(例如用于复用器720)、DDR线或DD线的选择,诸如基于由逻辑结构的部分提供的逻辑,以允许逻辑驱动的I/O功能性。
复用器720的输出(例如被存储在触发器730中的值)可以使输出驱动器740能够将值驱动到I/O焊盘705上或禁用(例如置于三态)输出驱动器740。当输出驱动器740被启用以用于驱动时,输出驱动器740将由复用器725的输出提供的值(例如被存储在触发器735中的值)驱动到输出驱动器740到I/O焊盘705上。例如,当触发器730存储1时,输出驱动器740可以被启用,并且被存储在触发器735中的值(例如0或1)被提供给输出驱动器740并且由输出驱动器740驱动(例如到逻辑低或逻辑高)到I/O焊盘705上。当触发器730存储0时,输出驱动器740可以被禁用,并且由输出驱动器740从触发器735接收的任何值不被输出驱动器740驱动到I/O焊盘705上。在一个方面中,当输出驱动器740被禁用时,输出驱动器740可以被称为处于三态或高阻抗模式。
作为示例,I/O焊盘705可以被耦合至由PLD 300的I/O结构控制的组件(例如风扇、LED)。当值0(例如被转换为逻辑低)被驱动到I/O焊盘705上时,组件可以断开(例如如果组件被接通则断开,或者如果组件已经断开,则保持断开)。当值1(例如被转换为逻辑高)被驱动到I/O焊盘705上时,组件也可以接通(例如如果组件被断开则接通,或者如果组件已经接通则保持接通)。
在输入侧,I/O焊盘705可以从被连接至PLD 300的外部组件接收信号。输入缓冲器745可以经由I/O焊盘705从外部组件接收信号,并且将信号提供给输入逻辑电路750。输入逻辑电路750可以处理接收到的信号,并且将处理后的信号提供给逻辑结构710以执行关联的逻辑。在一些情况下,诸如当逻辑功能性未被指定用于快速引导时,由于由PLD 300提供的逻辑功能性尚未被激活,因此输入路径通常未在快速引导操作期间使用。在其他情况下,诸如当逻辑功能性的一部分被指定用于快速引导时,输入路径可以被用于从外部组件接收信号并且提供给逻辑结构710用于处理。
一旦整个PLD 300被配置,唤醒电路245就可以提供唤醒信号以将I/O和逻辑结构转换到全***操作模式。在从快速引导操作模式转换到全***操作模式时,I/O引导控制逻辑电路715可以生成控制信号,以使复用器720和/或725根据用户指定的应用从相应输入线中的一个输入线中选择,如表1所示。在这方面,I/O引导控制逻辑电路715可以但不必选择触发器输入线。
表1
Figure BDA0003784189800000201
在一种情况下,通过使用I/O焊盘705和I/O逻辑控制电路700的其他组件实现的I/O功能性可以在快速引导操作模式和全***操作模式之间保持不变。在这种情况下,例如I/O引导控制逻辑电路715可以生成控制信号,以使复用器720和725在快速引导操作模式和全***操作模式期间选择触发器线。这种I/O功能性可以在快速引导和全***操作模式下提供静态控制。
在另一情况下,通过使用I/O焊盘705实现的I/O功能性在快速引导操作模式和全***操作模式之间可能不同。在这种情况下,I/O引导控制逻辑电路715可以生成控制信号,以使复用器720和/或725从选择触发器线转换到其他输入线中的一个输入线,诸如DD、触发器、DDR或恒定值线中的一者。在实施例中,为了促进从快速引导操作模式到全***操作模式的转换(例如无缝转换、无故障转换),由逻辑结构710在复用器720和/或725的对应输入线上提供的DD或DDR值可以被重置为与触发器730和735中存储的值相同的值。在重置之后,逻辑结构710可以根据用户指定的应用在DD或DDR线上提供值,其中DD或DDR线上的这种值可能不同于被存储在触发器730和735中的值。例如,这种逻辑控制的I/O可以在转换到全***操作模式之后的预定(例如阈值)时间量已经过去之后实现,以促进转换。
虽然图7是相对于被指定用于快速引导的I/O描述的,在一些情况下,I/O控制电路700可以与未被指定用于快速引导的I/O一起使用。在这种情况下,I/O引导控制逻辑电路715不接收或不响应与快速引导相关联的唤醒信号。I/O引导控制逻辑电路715可以响应于在整个PLD已被配置之后接收到的唤醒信号而生成控制信号,以控制复用器720和725(并且因此控制输出侧和输入侧)。
图8图示了根据本公开的实施例的PLD的示例设计过程800的流程图。注意,一个或多个操作可以根据需要以不同的顺序被组合、省略和/或执行。例如,图8的过程可以通过运行莱迪思钻石软件以配置PLD的外部***130执行。
在框805,外部***130接收指定PLD(例如300)的期望功能性的设计。例如,用户可以与外部***130交互(例如通过用户输入设备137和表示设计的硬件描述语言(HDL)代码),以标识设计的各种特征(例如高级逻辑操作、硬件配置和/或其他特征)。例如,HDL表示可以利用基于寄存器传送级(RTL)的设计。在用户设计中,用户可以设置属性以指定I/O结构的快速引导部分、逻辑结构的部分和/或其他组件。
在框810,外部***130将设计合成为可以被用于实施该设计的网表组件集合。例如,外部***130可以提供通过PLD标识各种类型的组件及其关联信号的网表。外部***130可以执行一个或多个规则检查以确认该设计描述了PLD的有效配置。例如,外部***130可以拒绝无效配置和/或请求用户提供新的设计信息,视情况而定。
在框815,外部***130执行映射过程,其中网表组件的集合被分组(例如打包)在一起。在一些情况下,网表组件的集合可以包括与I/O功能性相关联的集合和与逻辑功能性相关联的集合。
在框820,外部***130执行放置过程,以将与I/O功能性相关联的分组网表组件指派给驻留在PLD的具体物理位置的特定物理组件。例如,参照图3A,放置过程可以将与快速引导I/O功能性相关联的分组网表组件放置在被指定用于I/O功能性的快速引导的PLD 300的物理位置(例如存储体)中,诸如I/O部分205和210的物理位置。放置过程可以将不与快速引导I/O功能性相关联的分组网表组件放置在其他物理位置中,诸如放置在I/O部分215和220中。
在框825,外部***130执行放置过程,以将与逻辑功能性相关联的分组网表组件指派给驻留在PLD的具体物理位置的特定物理组件(例如指派给特定逻辑块和/或逻辑块内的特定物理组件)。例如,放置过程可以将与快速引导逻辑功能性(如果有的话)相关联的分组网表组件放置在被指定用于逻辑功能性的快速引导的PLD的物理位置(例如存储体)中。
尽管框820和825在图8中被提供为单独的框,框820和825可以被单独或一起执行。例如,I/O放置可能与逻辑放置一起发生。在另一示例中,任何快速引导功能性(例如快速引导I/O和/或逻辑功能性)的放置可以在放置任何剩余的I/O和/或逻辑功能性之前执行。
在框830,外部***130在指派的物理组件之间路由连接(例如使用路由资源),以实现物理互连。通过执行框820、825和835,外部***130确定布局(与接收到的设计相关联),该布局包括要被配置和激活以提供功能性(例如I/O和逻辑功能性)和相关联的路由的PLD组件的位置。
在框835,外部***130为确定的布局(例如放置路由设计)生成配置数据。例如,参照图3A,配置数据可以包括与快速引导I/O相关联的I/O部分205和210的I/O配置数据、I/O部分215和220的I/O配置数据以及逻辑核225的逻辑配置数据。
在框840,外部***130启用配置数据的安全性。在一个方面中,外部***130可以生成一个或多个认证证书,以允许认证在被加载到配置存储器单元之后对配置数据执行。在一些情况下,认证证书可以为快速引导功能性生成一个或多个认证证书,并且可以为剩余功能性生成另一个或多个认证证书。在没有认证的情况下,不执行框840。
在一些方面中,安全性可以基于密钥散列消息认证码(HMAC)(例如通常更快)、椭圆曲线数字签名算法(EDCSA)(例如非对称密钥)和/或其他。在一些情况下,凭证创建者具有私钥,并且设备持有公钥。每个认证证书可以是或可以包括基于配置位流或其部分生成的位流摘要。作为示例,位流摘要可以通过对配置位流或其部分操作安全散列算法(SHA)引擎(诸如SHA-256引擎)来生成。在一种情况下,认证证书可以结合快速引导功能性生成一个或多个认证证书,并且可以结合剩余功能性生成一个或多个认证证书。
在框845,外部***130提供生成的配置数据,以促进PLD的配置和唤醒。在一个方面中,配置数据可以作为配置位流被提供到位线上,以被写入到对应的配置存储器单元(例如配置SRAM单元)中。在配置PLD时,配置数据可以被存储在非易失性存储器(例如闪存)中,然后从非易失性存储器加载到PLD的电压存储器中。非易失性存储器可以在PLD中和/或PLD外部(例如外部硬盘驱动器、外部闪存驱动器)。配置和唤醒PLD的示例相对于图9提供。
图9图示了根据本公开的实施例的用于促进PLD的快速引导功能性的示例过程900的流程图。出于解释的目的,示例过程900在本文中参照图3A至3C的PLD 300来描述,尽管示例过程900可以与其他PLD一起使用。注意,一个或多个操作可以根据需要以不同的顺序被组合、省略和/或执行。
在框905,处理电路230接收与PLD 300相关联的配置数据。配置数据可以由外部***130生成。在一个方面中,处理电路230可以从在PLD 300中和/或在PLD 300外部的PLD300的非易失性存储器获得配置数据(例如由外部***130加载到非易失性存储器中)。处理电路230可以接收配置数据作为位流的一部分。在一些情况下,前同步码可以在紧接配置位流之前或作为配置位流的初始位序列的一部分提供前同步码。前同步码可以是预定的位序列,其被用作PLD 300的配置数据的开始的指示。当安全性被启用时,认证证书可以与配置数据一起提供,或作为配置数据的一部分被提供。
在框910,处理电路230对与快速引导功能性相关联的PLD 300的配置存储器单元的子集编程。在断言地址并且加载与PLD 300的剩余功能性(例如非快速引导功能性)相关联的配置数据之前,处理电路230可以使地址逻辑电路235断言与快速引导功能性相关联的地址,并且使数据写入电路240加载关联的配置数据。例如,在图3A中,在前同步码之后,配置数据可以包括用于I/O部分205和210的配置数据帧。作为另一示例,在图5中,在前同步码之后,配置数据可以包括用于I/O部分205、逻辑核部分505、逻辑核部分510和I/O部分210的配置数据帧。在一些情况下,配置数据帧被加载到各个部分(例如205、210)中的顺序和/或移位定向(例如逐行或逐列)可以基于速度考虑、复杂性(例如数据移位和/或地址移位操作的数量)和/或其他考虑。
在框915,处理电路230基于(多个)对应的认证证书对被存储在存储器单元子集中的配置数据执行认证。在一个方面中,可以在框915之前(例如在将配置数据存储在存储器单元子集中之前)执行认证。例如,通过通过认证引擎运行传入位流,然后将配置数据写入到存储器单元的子集,可以执行认证。在一些情况下,可以执行回读和认证(例如重新认证),尽管这种过程可能会增加时延。在这方面,任何技术可以被用于认证配置数据,通过该技术被存储或将被存储在存储器单元子集中的配置数据可以被确定为完整的。在框920中,处理电路230确定认证是否成功。在安全性未针对配置数据启用的情况下,框915和920未被执行。
如果认证不成功,则过程900进行到框950。在框950中,处理电路230中止PLD 300的配置和唤醒。在一些情况下,指示可以被提供(例如显示)给用户,以指示PLD 300的配置和唤醒已被中止。
如果认证成功,则过程900进行到框925。处理电路230提供唤醒信号以激活快速引导功能性。唤醒信号可以由处理电路230的唤醒电路245生成。当快速引导功能性被激活时,PLD 300可以提供快速引导I/O功能性,从而将PLD 300的关联I/O结构从配置模式转换到快速引导操作模式。在其他PLD中,诸如图5的PLD 500,当快速引导功能性被激活时,PLD 500可以提供快速引导I/O和逻辑功能性。
在框930,处理电路230对PLD 300的剩余配置存储器单元编程。这些剩余配置单元是与快速引导功能性不关联的那些配置单元。如图3A至3C所示,这些剩余的配置存储器单元可以是I/O部分215和220以及逻辑核225中的那些配置存储器单元。
在框935,处理电路230基于(多个)对应的认证证书执行被存储在这些剩余存储器单元中的配置数据的认证。在一个方面中,认证可以在框930之前(例如在将配置数据存储在剩余存储器单元中之前)被执行。更一般地,在一些情况下,上面参照框915描述的认证程序也可以适用于框935。在框940中,处理电路230确定认证是否成功。在针对配置数据不启用安全性的情况下,框935和940未被执行。
如果认证不成功,则过程900进行到框950。在框950中,处理电路230中止PLD 300的配置和唤醒。如果认证成功,则过程900进行到框945。处理电路230提供唤醒信号以激活PLD 300的功能性。快速引导I/O功能性可以从快速引导操作模式转换到全***操作模式。逻辑功能性和剩余的I/O功能性可以从配置模式转换到全***操作模式。
在一个或多个实施例中,提供技术,以促进从被存储在外部设备上(例如被存储在外部设备的非易失性存储器上)的映像(例如引导映像)快速且可靠地引导PLD,诸如FPGA。在一些方面中,外部设备可以是外部串行***接口(SPI)设备。使用各种实施例,与可编程设备和外部设备之间的通电重置(PoR)跳变点差异相关联的影响可以被减轻。例如,可编程设备和外部设备可以在不同的时间(例如稍微不同的时间)通电。如果常规PLD过早地开始获取与映像相关联的位流(例如当外部设备仍处于PoR时)以开始引导PLD,则PLD可能会因获取位流失败而最终导致引导失败。如果常规PLD使用定时器/计数器来设置何时开始从外部设备引导(例如为了避免过早获取位流),可能会导致时延损失,并且引导时间可能是次优的。例如,定时器/计数器可以被设置为适应最大可能延迟(例如由标准、用户和/或应用允许的最大时延)。尽管用于从映像引导的实施例主要关于PLD描述,但是从存储器(例如非易失性存储器)读取引导映像以进行引导的任何设备(例如处理器设备)可以利用本文描述的技术。
图10图示了根据本公开的实施例的具有PLD 1005以及PLD 1005从其引导的设备1010的***。然而,并非所有描绘的组件都是必需的,并且一个或多个实施例可以包括附图中未示出的附加组件。在不脱离本文陈述的权利要求的精神或范围的情况下,可以进行组件的布置和类型的变化。可以提供附加的组件、不同的组件和/或更少的组件。在实施例中,PLD 1005可以是PLD 100或200,可以包括PLD 100或200或者可以是PLD 100或200的一部分。
PLD 1005包括引导引擎1015、安全性引擎1020和存储器1025(例如非易失性存储器)。存储器1025包括安全性密钥1065和指令1070。设备1010包括存储数据1035和映像1040(例如引导映像)的存储器1030(例如非易失性存储器)。映像1040包括引导数据1045。数据1035和映像1040可以被用于促进PLD 1005的引导。设备1010可以是SPI设备,诸如闪存设备。设备1010可以被称为外部设备(例如相对于PLD 1005外部的)。在这方面,映像1040可以被称为外部映像。注意,存储器1025可以表示PLD 1005的用于存储数据的单个存储器设备或多个存储器设备,和/或存储器1030可以表示设备1010的用于存储数据的单个存储器设备或多个存储器设备。例如,在一种情况下,数据1035和映像1040可以被存储在设备1010的单个存储器设备中。在另一情况下,数据1035可以被存储在与映像1040不同的设备1010的存储器设备中。
PLD 1005和设备1010分别使用电源1050和电源1055来供电。尽管电源1050和1055在图10中被表示为两个单独的电源,电源1050和1055可以是由PLD 1005和设备1010共享的单个电源。例如,单个电源可以是单个片上电源。PLD 1005和设备1010可以包括用于接收链路1060的对应端口。PLD 1005和设备1010可以经由链路1060进行通信。例如,PLD 1005可以使用链路1060对设备1010执行读取操作(例如获得数据1035)。在这方面,读取操作可以对映像1040执行以获得引导数据1045。在一个示例中,链路1060可以是SPI总线。
数据1035被存储在设备1010的存储器1030中,并且可以包括可以被PLD 1005读取以向PLD 1005标识设备1010的预编程(例如硬编码)数据。在一些方面中,预编程数据可以是或者可以包括通常预定的任何数据。在一些情况下,预编程数据可以是或可以包括与标准相关联的(例如由标准要求的、在标准中定义的)(多个)预期值。在一个方面中,预编程数据可以是或可以包括与串行闪存可发现参数(SFDP)标准相关联的(多个)预期值。例如,具有与硬编码的SFDP标准相关联的(多个)预期值的设备通常是符合SFDP的设备(例如或等效地支持SFDP的设备)。在一些实施例中,预编程数据的多次连续成功读取可以指示映像1040已准备好被读取。如本文进一步描述的,成功读取可以指对数据1035的读取操作,其中由读取操作返回的(多个)值与预期值相匹配。在一些方面中,映像1040的引导数据1045包括配置数据(例如用于配置PLD 1005)。
引导引擎1015可以在PLD 1005被配置有配置数据之前处置设备1010的读取(例如包括数据1035和映像1040的读取)。指令1065可以是要由引导引擎1015执行以促进使用映像1040引导PLD 1005的硬编码指令。在这方面,引导引擎1015和存储器1025可以共同实施引导加载器或其他持久性引导功能。
图11图示了根据本公开的实施例的PLD的引导序列1100和用户阶段1105。在实施例中,PLD可以是PLD 1005,可以包括PLD 1005,或者可以是PLD 1005的一部分,和/或用于引导PLD的外部设备可以是设备1010,可以包括设备1010或者可以是设备1010的一部分。引导序列1100包括框1110、1115、1120、1125和1130。
在框1110,PLD执行通电序列。在框1115,外部设备执行通电序列。在框1120中,PLD在PLD通电完成后读取外部设备的一部分。在一个方面中,PLD在框1120中读取数据1035。在一些情况下,在框1120中,PLD可以对外部设备的某个部分/地点(例如(多个)预定地址)执行读取操作。参照图10,例如PLD可以对设备1010的存储器1030的(多个)某个预定地址执行读取操作,以获得数据1035。在一些情况下,在框1120,PLD可以根据具体读取指令(诸如读取SFDP命令)执行读取操作。
在实施例中,为了读取外部设备的一部分(例如读取外部设备的(多个)具体地址或者根据具体指令/命令读取外部设备)而被执行的操作和要被执行的指令可以由在PLD中实施/硬编码的引导加载器或其他持久性引导功能来处置(例如在PLD没有使用配置数据进行编程的情况下发挥功能)。在一个方面中,引导加载器和/或其他持久性引导功能可以使用PLD的引导引擎(例如引导引擎1015)和非易失性存储器(例如用于存储指令1070的存储器1025)来实施。在一些情况下,PLD可能会在PLD通电后立即开始读取外部设备。在其他情况下,PLD可以在预定时间延迟(例如由PLD的制造商、PLD的用户和/或标准设置)之后开始读取外部设备的部分。如图11所示,PLD可以在外部设备(例如外部设备的其他部分)被通电的同时开始读取外部设备的一部分。
当PLD的任何给定电路***的通电完成时,则该电路***可以被激活以执行其功能。激活的电路***可以被称为被释放。在一些情况下,PLD可以包括用于检测/监测与由PLD提供的不同电路***相关联的电压电平的电路***。当给定电路***处于其阈值电压电平(例如一些电路***为1.8V)时,该电路***可以被激活以执行其功能。由PLD提供的不同电路***可能与不同的阈值电压电平相关联。给定电路***的激活可能会在当达到电路***的阈值电压电平时或在取决于应用、用户偏好、标准和/或其他考虑的期望延迟之后就立即发生。如此,PLD可以被实施为一旦PLD被通电就继续读取外部设备,尽管可以实施在通电和读取外部设备之间的延迟。
在一个实施例中,外部设备是SFDP兼容的。在PLD通电时(例如在通电后立即或在通电后的某个时间),PLD可能会尝试使用读取SFDP指令/命令来读取外部设备的一部分。如果外部设备尚未被通电(例如通电序列尚未完成),则外部设备不向PLD的读取操作提供响应。如果外部设备被通电(例如电源序列完成),则外部设备会响应于PLD的读取操作向PLD提供值。这些值可以是或者可以包括被存储在设备1010上的数据1035。PLD确定由外部设备提供的值是否是SFDP兼容设备所期望的预定值。在一个方面中,SFDP兼容设备的预期预定值由SFDP标准定义,并且被SFDP兼容的任何设备普遍已知/使用(例如硬编码)。在一些情况下,PLD可以在外部设备的一部分上执行多个读取操作(例如由箭头1135描绘),以促进PLD的引导。例如,如果预期值至少连续多次从外部设备读取(例如使用读取SFDP指令),则PLD可以确定引导映像要被读取(例如准备好被读取)。
在一个方面中,引导映像要被读取的确定也可以被称为启动引导映像的读取的确定。在一些情况下,一旦PLD在连续读取操作中接收到预期值,则PLD被确定为能够(例如很有可能)从映像中成功读取整个引导数据,使得PLD可以使用映像成功引导(例如没有错误地读取映像,并且需要中止并且重新引导/重试/恢复引导)。作为示例,如果外部设备的该部分的两次连续读取(例如N=2,其中N是所需的连续读取次数)返回相同的预期值,则PLD可以确定引导映像要被读取。作为另一示例,如果外部设备的该部分的四次连续读取(例如N=4)返回相同的预期值,则PLD可以确定引导映像要被读取。如果预期值未被接收到,则计数器可以被重置(例如被设置为0)。N的其他值可以被使用。N的较高数字可能与正确确定引导映像已准备好被读取的较高概率以及较高的时延相关联。
相对于单次读取,多次读取可能有助于避免误报确定(例如确定引导映像已准备好被读取,而事实上它尚未准备好被读取)。多次读取可能会避免因从引导映像读取的值出现故障而产生的影响。例如,PLD(或其部分)的突然功率电平变化(例如与电源相关联的功率骤降和/或功率尖峰)可能导致某个位在位为0时被解释为1,或反之亦然。预期值需要由PLD经由读取操作从外部设备接收的连续次数可能基于应用、PLD制造商的设置和/或PLD用户的设置。在一些情况下,具有高复杂性的功率分配结构可能与将N设置为更高的值相关联。
在一个实施例中,外部设备不是SFDP兼容的。在PLD通电后,PLD可能会尝试读取引导映像的一部分。例如,PLD可以从外部设备(例如设备1010的存储器1030)的已知地址(例如地址0)读取预编程的已知数据值。读取操作可以由引导加载器或在PLD中硬编码的其他持久性引导功能来处置。已知地址和已知数据值(例如要被用于与从外部设备读取的值进行比较的预期数据值)可以在PLD中被硬编码。如果外部设备尚未被通电,则外部设备不向PLD的读取操作提供响应。如果外部设备被通电,则外部设备会响应于PLD的读取操作向PLD提供值。由PLD读取的值可以是或者可以包括被存储在设备1010上的数据1035。PLD确定由外部设备提供的值是否是PLD所期望的已知数据值。在这方面,PLD可以被设计为与具有存储在特定地址的特定数据值的外部设备一起使用。预定值通常可以是任何值,只要这些值与其他预定值不同(例如由诸如SFDP标准等其他标准设置的预定值)。例如,如果通过连续多次从外部设备的已知地址读取来获得预期值,则PLD可以确定引导映像要被读取(例如准备好被读取)。
在一个实施例中,PLD(例如引导引擎和配置引擎)支持SFDP兼容设备以及不兼容SFDP的设备。当PLD通电时,PLD可能会尝试读取外部设备的部分。读取操作可以由引导加载器或在PLD中硬编码的其他持久性引导功能来处置。如果外部设备尚未被通电,则外部设备不向PLD的读取操作提供响应。如果外部设备被通电,则外部设备会根据不同类型的读取操作提供值。每种类型的读取操作都可以与相应的(多个)预期值相关联。作为示例,在第一类型的读取操作中,PLD可以从已知地址(例如地址0)读取经预编程的已知数据值。在第二类型的读取操作中,PLD可以通过执行读取SFDP指令/命令来读取外部设备。如果从已知地址的连续读取返回预编程的已知数据值,则PLD可以确定引导映像要被读取(例如准备好被读取)。如果连续读取SFDP指令/命令返回与SFDP标准相关联的预期值,则PLD还可以确定引导映像要被读取(例如准备好被读取)。在一些情况下,PLD可能会在从已知地址读取与执行读取SFDP指令之间交替。尽管前面描述了具有两种类型的读取操作的示例,但是PLD可以执行多于两种类型的读取操作。
在框1125中,在引导映像被确定为准备好被读取(例如N=2次连续读取返回预期值)之后,PLD继续从引导映像读取(例如下载)配置数据,并且使用配置数据配置。为了配置(例如编程)PLD(例如其I/O结构和逻辑结构),配置数据可以被提供为配置位流,它被串行或并行加载到PLD的配置存储器单元中。在框1130中,提供唤醒信号以激活PLD的功能性。在PLD的功能性被激活后,PLD处于用户阶段(例如功能模式),并且可以被用于执行预期的I/O和逻辑功能性。
图12图示了根据本公开的实施例的用于使用存储在外部设备上的引导映像来促进PLD的引导的示例过程1200的流程图。出于解释的目的,示例过程1200在本文中参照图2的PLD 200来描述,尽管示例过程1200可以与其他PLD一起使用。注意,一个或多个操作可以根据需要以不同的顺序被组合、省略和/或执行。
在框1205,处理电路230针对PLD 200执行通电序列。在框1210中,处理电路230在PLD 200的通电完成后读取外部设备(例如设备1010)的一部分。例如,处理电路230可以在外部设备的(多个)某个预定地址(例如设备1010的存储器1030的(多个)某个预定地址)执行读取操作,以获得数据1035。作为另一示例,处理电路230可以执行读取SFDP指令/命令,以获得数据1035。预期值可以是由SFDP标准要求的值或其他预编程值(例如在已知地址处)。在一个方面中,为了读取外部设备的一部分而被执行的操作和被执行的指令可以由在PLD 200中实施/硬编码的引导加载器或其他持久性引导功能来处置。在一些情况下,处理电路230可以在PLD 200通电后立即开始读取外部设备的部分。在一些情况下,处理电路230可以在预定的时间延迟后开始读取引导映像的一部分。处理电路230可以在外部设备(例如外部设备的其他部分)被通电的同时开始读取外部设备的一部分。
在框1215中,处理电路230确定预期值是否已经从读取外部设备接收到。确定可以基于将预期值与从外部设备的该部分读取的值进行比较来进行。如果在框1215中确定预期值已被接收到,则过程1200进行到框1220。在框1220中,处理电路230递增计数器值。计数器值可以被用于追踪预期值已被接收到的连续次数。计数器值可以由PLD 200的计数器实施(例如在引导引擎中)。在框1225中,处理电路230确定计数器值是否超过N-1,其中N是响应于在框1210中执行的读取操作而需要已经接收到预期值以使引导映像被确定为要被读取(例如确定为准备好被读取)的连续次数。如果计数器值不超过N-1,则过程1200进行到框1210,其中外部设备的相同部分被再次读取。
如果计数器超过N-1(例如计数器处于值N),则过程1200进行到框1230。在框1230中,处理电路230读取引导映像,以接收与PLD 200相关联的配置数据。处理电路230可以接收配置数据作为被串行或并行加载到PLD 200的配置存储器单元中的位流的一部分。在一些情况下,前同步码可以在配置位流之前被立即提供,或者作为配置位流的初始位序列的一部分被提供。前同步码可以是被用作PLD 200的配置数据的开始的指示的预定位序列。在一些情况下,从引导映像读取/下载配置数据可以由状态机控制。
在框1235,处理电路230对PLD 200的配置存储器单元进行编程。这种编程可以是PLD 200的预编程、PLD 200的动态编程、PLD 200的重新编程或者通常对PLD 200进行任何编程以使用引导映像的配置数据对PLD 200进行编程的一部分。处理电路230可以使地址逻辑电路235断言地址,并且使数据写入电路240加载关联的配置数据。在一些情况下,配置数据帧被加载到PLD 200的各个部分中的顺序和/或移位定向(例如逐行或逐列)可以基于速度考虑、复杂性(例如数据移位和/或地址移位操作的数量)和/或其他考虑。在框1240中,处理电路230提供唤醒信号以激活PLD 200的功能性。唤醒信号可以由处理电路230的唤醒电路245生成。当PLD 200被激活时,PLD 200从配置模式转换到功能模式以提供I/O和逻辑功能性。
如果在框1215中确定预期值未被接收到,则过程1200进行到框1245。在框1245,处理电路230确定失败读取条件是否已被满足。在一个方面中,当处理电路230在一定次数的尝试之后无法确定引导映像准备好被读取时,可能会出现失败读取条件。例如,每次计数器值被重置都可以计数为一次尝试。在另一方面中,处理电路230可以无限期地读取外部设备的部分。在这种方面中,当处理电路230对外部设备的一部分的读取被中止(例如由用户手动中止)时,可以满足失败读取条件。如果在框1245中确定失败读取条件未被满足,则过程1200进行到框1250。在框1250,处理电路230将计数器值重置为0。过程1200然后进行到框1210,其中处理电路230再次读取外部设备的部分。如果在框1245中确定失败读取条件已被满足,则过程1200进行到框1255。在框1255,处理电路230中止读取外部设备。在这方面,失败读取条件被满足指示处理电路230无法确定引导映像准备好被读取。
在一些实施例中,配置数据可以使安全性被启用。当安全性被启用时,认证证书可以与配置数据一起提供或作为配置数据的一部分被提供。处理电路230可以基于对应的(多个)认证证书对存储在存储器单元中的配置数据执行认证。在一些情况下,通过通过认证引擎运行传入位流,然后将配置数据写入到存储器单元,认证可以被执行。在一些情况下,可以执行回读和认证(例如重新认证),尽管这种过程可能会增加时延。如果认证不成功,则处理电路230可以中止PLD 200的配置和唤醒。在一些情况下,指示可以被提供(例如显示)给用户,以指示PLD 200的配置和唤醒已被中止。如果认证成功,则处理电路230可以提供唤醒信号来激活PLD 200的功能性。
图12的过程1200提供了引导序列,其中单个计数器值被用于追踪预期值已从外部设备成功读取的连续次数。在一个示例中,计数器值可以被用于追踪与SFDP标准相关联的预期值已从外部设备成功读取的连续次数。在另一示例中,计数器值可以被用于追踪特定地址处的预期值已从外部设备成功读取的连续次数。
在一个实施例中,可以利用多个计数器值以允许PLD支持不同类型的设备。例如,PLD(例如引导引擎和配置引擎)可以支持SFDP兼容设备以及不兼容SFDP的设备。
图13图示了根据本公开的实施例的用于使用存储在外部设备上的引导映像来促进PLD的引导的示例过程1300的流程图。出于解释的目的,示例过程1300在本文中参照图2的PLD 200来描述,尽管示例过程1300可以与其他PLD一起使用。注意,一个或多个操作可以根据需要以不同的顺序被组合、省略和/或执行。图12的描述通常适用于图13,具有图12和13之间的差异以及本文提供的其他描述的示例。
在框1305,处理电路230执行PLD 200的通电序列。在框1310中,处理电路230在PLD200的通电完成后读取外部设备(例如设备1010)的第一部分。例如,读取操作的预期值可能是由SFDP标准要求的值。在一个方面中,读取外部设备的第一部分可以被称为对外部设备执行第一类型的读取操作。在框1315,处理电路230确定预期值是否已被接收到。
如果在框1315中确定预期值已被接收到,则过程1300进行到框1320。在框1320中,处理电路230递增第一计数器值。第一计数器值可以被用于追踪预期值已被接收到的连续次数。在框1325中,处理电路230确定第一计数器值是否超过N1-1,其中N1是响应于在框1310中执行的读取操作而需要已经接收到预期值以使引导映像被确定为准备好基于外部设备的第一部分读取的连续次数。如果第一计数器值不超过N1-1,则过程1300进行到框1310,其中再次读取外部设备的第一部分。
如果第一计数器值超过N1-1,则过程1300进行到框1380。在框1380中,处理电路230读取存储在外部设备上的引导映像,以接收与PLD 200相关联的配置数据。处理电路230可以接收配置数据,作为被串行或并行加载到PLD 200的配置存储器单元中的位流的一部分。在框1385中,处理电路230使用配置数据对PLD 200的配置存储器单元进行编程。在框1390,处理电路230提供唤醒信号以激活PLD 200的功能性。当PLD 200被激活时,PLD 200从配置模式转换到功能模式以提供I/O和逻辑功能性。
如果在框1315中确定预期值未被接收到,则过程1300进行到框1330。在框1330中,处理电路230确定失败读取条件是否已被满足。在一个方面中,当处理电路230在一定次数的尝试之后无法确定引导映像准备好关于第一计数器值将被读取时,可能会出现失败读取条件。例如,每次第一计数器值被重置都可以被计数为一次尝试。在另一方面中,处理电路230可以无限期地读取外部设备的第一部分。在这种方面中,当处理电路230对外部设备的第一部分的读取被中止(例如由用户手动中止)时,失败读取条件可以被满足。如果在框1330中确定失败读取条件未被满足,则过程1300进行到框1335。在框1335中,处理电路230将第一计数器值重置为0。过程1300然后进行到框1310,其中处理电路230再次读取外部设备的第一部分。如果在框1330中确定失败读取条件已被满足,则过程1300进行到框1340。在框1340中,处理电路230中止读取外部设备的第一部分(例如中止执行第一类型的读取操作)。在这方面,失败读取条件被满足指示处理电路230无法确定引导映像准备好基于引导映像的第一部分读取。例如,如果第一计数器值与SFDP预期值被读取的次数相关联(例如使用读取SFDP指令),则如果失败读取条件被满足,则设备可以被确定为不符合SFDP。在该示例中,读取外部设备的第一部分可以包括使用读取SFDP指令/命令,以尝试找到SFDP标准需要存储在外部设备上的预期值。
在框1345,处理电路230在PLD 200通电完成后读取外部设备的第二部分。例如,读取操作的预期值通常可以是任何预编程值。在一个方面中,读取外部设备的第二部分可以被称为对外部设备执行第二类型的读取操作。在框1350,处理电路230确定预期值是否已被接收到。
如果在框1350中确定预期值已被接收到,则过程1300进行到框1355。在框1355中,处理电路230递增第二计数器值。第二计数器值可以被用于追踪预期值已被接收到的连续次数。在框1355中,处理电路230确定第二计数器值是否超过N2-1,其中N2是响应于在框1345中执行的读取操作而需要已经接收到预期值以使引导映像被确定为基于外部设备的第二部分有效读取(例如确定为准备好被读取)的连续次数。在一些情况下,N1=N2。如果第二计数器值不超过N2-1,则过程1300进行到框1345,其中外部设备的第二部分被再次读取。如果计数器超过N2-1,则过程1300进行到框1380。
如果在框1360中确定预期值未被接收到,则过程1300进行到框1365。在框1365,处理电路230确定与第二计数器值相关联的失败读取条件是否已被满足。在一个方面中,当处理电路230在一定次数的尝试之后无法确定引导映像准备好关于第二计数器值读取时,可能会出现失败读取条件。在另一方面中,处理电路230可以无限地读取外部设备的第二部分。在这种方面中,当处理电路230对外部设备的第二部分的读取被中止(例如由用户手动中止)时,可以满足失败读取条件。如果在框1365中确定失败读取条件未被满足,则过程1300进行到框1370。在框1370,处理电路230将第二计数器值重置为0。过程然后从框1370进行到框1345,其中处理电路230再次读取外部设备的第二部分。如果在框1365中确定失败读取条件已被满足,则过程1300进行到框1375。在框1375,处理电路230中止读取外部设备的第二部分(例如中止执行第二类型的读取操作)。
在实施例中,第一计数器值可以与来自符合SFDP的设备的预期值被接收到的连续次数相关联,并且第二计数器值可以与已知地址处的预编程值被接收到的连续次数相关联。处理电路230可以在读取外部设备的第一部分与读取外部设备的第二部分之间交替。因此,在该实施例中,PLE 200支持SFDP兼容设备和不兼容SFDP的设备。
尽管过程1300允许PLD 200支持两种不同类型的设备(例如符合SFDP的设备和不符合SFDP的设备),但在其他实施例中,可以由PLD 200支持多于两种不同类型的设备。例如,可以使用多于两个的计数器值,使得每个计数器值与一种类型的设备相关联。此外,虽然过程1200和1300描述了被分别递增并且与相应的预定数量(例如图13中的N1和N2)进行比较以确定计数器值是否超过相应预定数量的计数器值,但是使用/实施计数器值的其他方式可以被使用。例如,不是将计数器值递增1,调整计数器值的其他方式可以包括从最大计数器值(例如图13中的N1和N2)开始递减1,并且将计数器值与0进行比较以确定是否发生连续成功读取。
图14图示了根据本公开的一个或多个实施例的PLD的引导序列1400和用户阶段1405。在实施例中,PLD可以是PLD 1005,可以包括PLD 1005,或者可以是PLD 1005的一部分,和/或用于引导PLD的外部设备可以是设备1010,可以包括设备1010或者可以是设备1010的一部分。引导序列1400包括框1410、1415、1420、1425、1430、1435和1440。图11的描述通常适用于图14,具有图11和图14之间的差异以及本文提供的其他描述的示例。
在框1410中,PLD执行通电序列。在框1415中,外部设备执行通电序列。在框1420中,PLD在PLD通电完成后读取外部设备(例如设备1010)的一个或多个部分。在一个示例中,PLD可以读取第一部分和第二部分,以确定存储引导映像的外部设备是否是SFDP兼容的。
在框1425,在引导映像被确定为准备好要被读取(例如N=2次连续读取返回预期值)之后,PLD继续从引导映像读取(例如下载)配置数据的一部分,并且使用配置数据的该部分来配置。在实施例中,配置数据的该部分可以对应于被指定用于快速引导的PLD的I/O结构和/或逻辑结构的一部分。在框1430中,提供唤醒信号,以激活与配置数据的该部分相关联的PLD的功能性。
在框1435,PLD继续从引导映像读取(例如下载)配置数据的(多个)剩余部分,并且使用配置数据的(多个)剩余部分进行配置。在框1440,提供唤醒信号,以激活与配置数据的(多个)剩余部分相关联的PLD的功能性。在一些方面中,在框1440中,在快速引导操作模式下操作的I/O结构和/或逻辑结构的部分可以转换到全***操作模式。剩余的功能性可以从配置模式转换到全***操作模式。在实施例中,框1425、1430、1435和1440可以使用图9的过程900的一个或多个框来实施。
在适用的情况下,由本公开提供的各种实施例可以使用硬件、软件或硬件和软件的组合来实施。而且在适用的情况下,本文陈述的各种硬件组件和/或软件组件可以被组合为包括软件、硬件和/或两者的复合组件,而不脱离本公开的精神。在适用的情况下,本文陈述的各种硬件组件和/或软件组件可以被分离为包括软件、硬件和/或两者的子组件,而不脱离本公开的精神。另外,在适用的情况下,可以设想软件组件可以被实施为硬件组件,反之亦然。
根据本公开的软件(诸如程序代码和/或数据)可以被存储在一个或多个非瞬态机器可读介质上。还可以设想,本文中标识的软件可以使用联网的和/或其他方式的一个或多个通用或专用计算机和/或计算机***来实施。在适用的情况下,本文描述的各种步骤的顺序可以被改变、组合为复合步骤和/或分离为子步骤,以提供本文描述的特征。
上述实施例说明但不限制本发明。还应该理解,根据本发明的原理,许多修改和变化都是可能的。因此,本发明的范围仅由以下权利要求限定。

Claims (20)

1.一种方法,包括:
对非易失性存储器执行第一读取操作,以获得第一值;
将所述第一值与第一预定值进行比较,以获得第一比较结果;
至少基于所述第一比较结果来确定存储在所述非易失性存储器上的引导映像是否要被读取;
基于所述确定,对所述引导映像执行第二读取操作,以获得与设备的引导相关联的数据;以及
至少基于所述数据来引导所述设备。
2.根据权利要求1所述的方法,其中所述第一预定值包括与所述串行闪存可发现参数(SFDP)标准相关联的值。
3.根据权利要求1所述的方法,其中所述第一预定值被存储在所述非易失性存储器的预定地址处。
4.根据权利要求1所述的方法,还包括:启动所述设备的通电,其中所述第一读取操作由所述设备在所述设备的通电完成之后立即执行。
5.根据权利要求1所述的方法,还包括:
对所述非易失性存储器执行第三读取操作,以获得第二值;以及
将所述第二值与所述第一预定值进行比较,以获得第二比较结果,
其中确定所述引导映像是否要被读取还基于所述第二比较结果。
6.根据权利要求5所述的方法,其中所述第一读取操作和所述第三读取操作是所述非易失性存储器的所述相同部分上的连续读取操作。
7.根据权利要求1所述的方法,其中当从所述非易失性存储器上的至少多个连续读取操作中的每个读取操作获得的值与所述第一预定值相匹配时,所述引导映像被确定为要被读取。
8.根据权利要求1所述的方法,其中所述第一读取操作在所述非易失性存储器的第一部分上被执行,所述方法还包括:
对所述非易失性存储器的第二部分执行第三读取操作以获得第二值,其中所述第二部分不同于所述第一部分;以及
将所述第二值与第二预定值进行比较,以获得第二比较结果,
其中所述确定还基于所述第二比较结果。
9.根据权利要求8所述的方法,其中所述第一读取操作和所述第三读取操作是所述非易失性存储器上的连续读取操作。
10.根据权利要求1所述的方法,其中:
所述设备是可编程逻辑设备(PLD);
所述数据包括配置数据;
所述引导包括:
利用所述配置数据对所述PLD的至少一部分编程;以及
提供至少一个唤醒信号以唤醒与所述PLD相关联的功能性。
11.根据权利要求9所述的方法,其中所述编程包括:
利用所述配置数据的第一部分对所述PLD的第一部分编程;
利用所述配置数据的第二部分对所述PLD的第二部分编程;
提供第一唤醒信号以唤醒与所述PLD的所述第一部分相关联的功能性;以及
提供第二唤醒信号以唤醒与所述PLD的所述第二部分相关联的功能性。
12.一种可编程逻辑设备(PLD),包括:
配置存储器单元阵列;
处理电路,被配置为:
对非易失性存储器执行第一读取操作,以获得第一值;
将所述第一值与第一预定值比较,以获得第一比较结果;
至少基于所述第一比较结果来确定存储在所述非易失性存储器上的引导映像是否要被读取;
基于确定所述引导映像是否要被读取,对所述引导映像执行第二读取操作以获得与所述PLD的引导相关联的数据;以及
至少基于所述数据来引导所述PLD。
13.根据权利要求12所述的PLD,其中所述第一预定值包括与所述串行闪存可发现参数(SFDP)标准相关联和/或存储在所述非易失性存储器的预定地址处的值,其中所述处理电路还被配置为启动所述PLD的通电,并且其中所述处理电路被配置为在所述PLD的通电完成之后立即执行所述第一读取操作。
14.根据权利要求12所述的PLD,其中所述处理电路还被配置为:
对所述非易失性存储器执行第三读取操作,以获得第二值;以及
将所述第二值与所述第一预定值进行比较,以获得第二比较结果,
其中所述确定所述引导映像是否要被读取还基于所述第二比较结果。
15.根据权利要求14所述的PLD,其中所述第一读取操作和所述第三读取操作是所述非易失性存储器的所述相同部分上的连续读取操作。
16.根据权利要求12所述的PLD,其中当从所述非易失性存储器上的至少多个连续读取操作中的每个读取操作获得的值与所述第一预定值相匹配时,所述引导映像被确定为要被读取。
17.根据权利要求12所述的PLD,其中所述第一读取操作在所述非易失性存储器的第一部分上被执行,其中所述处理电路还被配置为:
对所述非易失性存储器的第二部分执行第三读取操作以获得第二值,其中所述第二部分不同于所述第一部分;以及
将所述第二值与第二预定值进行比较,以获得第二比较结果,
其中所述处理电路被配置为还基于所述第二比较结果来确定所述引导映像是否要被读取。
18.根据权利要求17所述的PLD,其中所述第一读取操作和所述第三读取操作是所述非易失性存储器上的连续读取操作。
19.根据权利要求12所述的PLD,其中:
所述数据包括配置数据;
所述处理电路被配置为通过以下操作来引导所述PLD:
利用所述配置数据对所述配置存储器单元的至少子集编程;以及
提供至少一个唤醒信号以唤醒与所述PLD相关联的功能性。
20.根据权利要求19所述的PLD,其中所述编程包括:
利用所述配置数据的第一部分对所述配置存储器单元的第一子集编程;
利用所述配置数据的第二部分对所述配置存储器单元的第二子集编程;
提供第一唤醒信号以唤醒与所述配置存储器单元的所述第一子集相关联的功能性;以及
提供第二唤醒信号以唤醒与所述配置存储器单元的所述第二子集相关联的功能性。
CN202080095823.0A 2019-12-06 2020-12-03 用于可编程逻辑设备的快速引导***和方法 Active CN115136116B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211201503.6A CN115454516A (zh) 2019-12-06 2020-12-03 用于可编程逻辑设备的快速引导***和方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/706,591 2019-12-06
US16/706,591 US11681536B2 (en) 2019-12-06 2019-12-06 Fast boot systems and methods for programmable logic devices
PCT/US2020/063163 WO2021113547A1 (en) 2019-12-06 2020-12-03 Fast boot systems and methods for programmable logic devices

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202211201503.6A Division CN115454516A (zh) 2019-12-06 2020-12-03 用于可编程逻辑设备的快速引导***和方法

Publications (2)

Publication Number Publication Date
CN115136116A true CN115136116A (zh) 2022-09-30
CN115136116B CN115136116B (zh) 2024-04-09

Family

ID=76209737

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202080095823.0A Active CN115136116B (zh) 2019-12-06 2020-12-03 用于可编程逻辑设备的快速引导***和方法
CN202211201503.6A Pending CN115454516A (zh) 2019-12-06 2020-12-03 用于可编程逻辑设备的快速引导***和方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202211201503.6A Pending CN115454516A (zh) 2019-12-06 2020-12-03 用于可编程逻辑设备的快速引导***和方法

Country Status (4)

Country Link
US (2) US11681536B2 (zh)
EP (1) EP4070191A4 (zh)
CN (2) CN115136116B (zh)
WO (1) WO2021113547A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12008109B2 (en) * 2022-01-18 2024-06-11 Dell Products L.P. Cloud based boot integrity

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7424398B2 (en) * 2006-06-22 2008-09-09 Lexmark International, Inc. Boot validation system and method
US7631223B1 (en) * 2006-06-06 2009-12-08 Lattice Semiconductor Corporation Programmable logic device methods and system for providing multi-boot configuration data support
US20140075169A1 (en) * 2012-09-07 2014-03-13 Apple Inc. Accessory booting over usb
US20150356299A1 (en) * 2014-06-04 2015-12-10 Dell Products L.P. Bios secure data management system
CN106030525A (zh) * 2014-03-28 2016-10-12 英特尔公司 用于硬件平台的固件的***内供应
CN110018853A (zh) * 2017-12-29 2019-07-16 美国莱迪思半导体公司 用于可编程逻辑器件的快速启动***和方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100206600B1 (ko) * 1996-06-03 1999-07-01 김영환 싱크로노스 디램의 리프레쉬 카운터 테스트 모드방법 및 그 장치
JPH1174360A (ja) 1997-08-27 1999-03-16 Nec Kansai Ltd 半導体論理回路装置
US7518396B1 (en) 2007-06-25 2009-04-14 Xilinx, Inc. Apparatus and method for reconfiguring a programmable logic device
US9543956B2 (en) 2011-05-09 2017-01-10 Intel Corporation Systems and methods for configuring an SOPC without a need to use an external memory
WO2013095387A1 (en) 2011-12-20 2013-06-27 Intel Corporation Secure replay protected storage
US8786310B1 (en) 2012-08-17 2014-07-22 Xilinx, Inc. Partially programming an integrated circuit using control memory cells
US9536094B2 (en) * 2014-01-13 2017-01-03 Raytheon Company Mediated secure boot for single or multicore processors
US9703973B2 (en) * 2015-04-28 2017-07-11 International Business Machines Corporation Customer load of field programmable gate arrays
EP3360039B1 (en) * 2015-10-06 2021-03-24 Xilinx, Inc. Multistage boot image loading and configuration of programmable logic devices
US9590635B1 (en) 2015-12-03 2017-03-07 Altera Corporation Partial reconfiguration of programmable devices
US11321466B2 (en) 2018-03-09 2022-05-03 Qualcomm Incorporated Integrated circuit data protection

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7631223B1 (en) * 2006-06-06 2009-12-08 Lattice Semiconductor Corporation Programmable logic device methods and system for providing multi-boot configuration data support
US7424398B2 (en) * 2006-06-22 2008-09-09 Lexmark International, Inc. Boot validation system and method
US20140075169A1 (en) * 2012-09-07 2014-03-13 Apple Inc. Accessory booting over usb
CN106030525A (zh) * 2014-03-28 2016-10-12 英特尔公司 用于硬件平台的固件的***内供应
US20150356299A1 (en) * 2014-06-04 2015-12-10 Dell Products L.P. Bios secure data management system
CN110018853A (zh) * 2017-12-29 2019-07-16 美国莱迪思半导体公司 用于可编程逻辑器件的快速启动***和方法

Also Published As

Publication number Publication date
EP4070191A1 (en) 2022-10-12
US20210173669A1 (en) 2021-06-10
EP4070191A4 (en) 2023-04-26
US11681536B2 (en) 2023-06-20
CN115136116B (zh) 2024-04-09
CN115454516A (zh) 2022-12-09
WO2021113547A1 (en) 2021-06-10
US20230367610A1 (en) 2023-11-16

Similar Documents

Publication Publication Date Title
US11847471B2 (en) Fast boot systems and methods for programmable logic devices
US9722612B2 (en) Configuration sequence for programmable logic device
US8415974B1 (en) Methods and circuits enabling dynamic reconfiguration
US7576561B1 (en) Device and method of configuring a device having programmable logic
US7652500B1 (en) Reconfiguration of programmable logic devices
USRE37195E1 (en) Programmable switch for FPGA input/output signals
US7301822B1 (en) Multi-boot configuration of programmable devices
US7489163B2 (en) FPGA powerup to known functional state
KR102400967B1 (ko) 집적 회로 내에서 파워를 제어하기 위한 회로들 및 방법들
US9584130B1 (en) Partial reconfiguration control interface for integrated circuits
US6976160B1 (en) Method and system for controlling default values of flip-flops in PGA/ASIC-based designs
JP2004056716A (ja) 半導体装置
CN108983945B (zh) 用于可编程逻辑器件的布线资源配置位的选择性功率门控
KR101981723B1 (ko) 설정가능 로직 어레이를 구비한 마이크로컨트롤러
US20230367610A1 (en) Fast boot systems and methods for programmable logic devices
US7924051B2 (en) Programmable logic device with a microcontroller-based control system
US7268582B1 (en) DPRIO for embedded hard IP
US7358762B1 (en) Parallel interface for configuring programmable devices
US20210011636A1 (en) Logic fabric based on microsector infrastructure with data register having scan registers
US10541686B1 (en) Circuit and method for ensuring a stable IO interface during partial reconfiguration of a reprogrammable integrated circuit device
US7876125B1 (en) Register data retention systems and methods during reprogramming of programmable logic devices
US20240185908A1 (en) Dual power supplied memory cells and deterministic reset thereof for programmable logic devices
US7868654B1 (en) Reading an external memory device to determine its interface characteristics for configuring a programmable logic device
JP2001186010A (ja) フィールド・プログラマブル・ゲートアレイ
CN115428340A (zh) 用于可编程逻辑器件的输入/输出总线保护***和方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant