具体实施方式
一个示例性的实施例利用直接存储器访问(DMA)来初始化可编程逻辑器件(PLD)。结合少量附加逻辑来使用系统内的DMA控制器以对现场可编程PLD进行编程(初始化/加载)。在处理器上执行的软件可以通过DMA控制器和关联的逻辑来开始PLD编程序列。对DMA控制器和关联的逻辑的使用保证了在PLD编程过程期间在提供主动控制时处理器不被占用。结果,在PLD被编程而不是顺序执行初始化任务时,处理器可以并行执行其他系统初始化操作(例如,内置测试、将存储器初始化到已知状态等等)。对系统初始化的并行执行可以减少系统初始化时间并增加响应度。在处理器上执行的软件可以控制PLD编程过程何时开始,以及决定PLD编程数据源,提供比使用例如直接串行EEPROM编程之类的静态编程/加载器方法所能够实现的更大的灵活性。
现在转到更详细的附图,可以看到在图1中示出了根据示例性实施例的可以在其上实现使用DMA来初始化PLD的系统100的框图。图1的系统100包括组件102。组件102可以是卡、板、模块或更大系统内的子系统。在一个示例性实施例中,组件102包括集成电路(IC)104,该集成电路(IC)104通过总线108可操作地连接到PLD 106,使得该IC 104能够执行诸如将PLD 106配置为编程模式、对PLD 106进行编程以及监视PLD 106的状态之类的操作。尽管只示出了一个PLD 106,但应当理解,多个PLD(1和N之间)可以连接到IC 104。PLD 106可以是本领域中已知的任意类型的可编程逻辑器件,诸如可编程逻辑阵列(PLA)、可编程阵列逻辑(PAL)、通用阵列逻辑(GAL)、复杂可编程逻辑器件(CPLD)或现场可编程门阵列(FPGA)。在一个示例性实施例中,PLD 106是在PLD 106的每个上电周期上利用PLD程序配置代码(PLD编程数据)初始化的易失性PLD。PLD 106还在其他时间被重新编程,诸如在复位时或在更新的PLD编程数据可用时被重新编程。在一个示例性实施例中,PLD 106通过编程端口107被编程。编程端口107还可以包括控制、状态和时钟信号连接。总线108可以是适合于支持IC 104和PLD 106之间的通信的并行总线。总线108可以包括本领域中已知的各种硬件单元,诸如缓冲器、上拉或下拉电阻器、以及支持各种总线格式和多个PLD(1...N)106的一个或多个复用器。总线108可以组织为地址、数据、控制、状态、中断和时钟线路。在另一个示例性实施例中,多个总线108在IC 104和多个PLD 106之间并行存在,以支持并行PLD编程并在故障情况下提供增强的隔离。
在一个示例性实施例中,IC 104通过网络/总线112与非易失性存储器(NVM)110进行接口连接。NVM 110为PLD 106存储编程和配置数据。NVM 110可以是本领域中已知的能够在整个上电/断电周期内保存数据的任意类型的非易失性存储器,诸如EEPROM、闪速存储器、硬盘驱动器或非易失性随机访问存储器(NVRAM)。在一个示例性实施例中,NVM 110位于组件102的远程位置。通过使NVM 110位于组件102外部,组件102的总成本、大小、功耗和重量可以相对于包括位于PLD本地的串行EEPROM作为组件上的附加部件的系统减少。此外,NVM 110可以是多个组件102的共享资源,提供公共资源以进行更新而不需要对系统100中的每个组件102单独更新。使NVM 110位于组件102的外部还减少了组件102部分报废的风险(也就是,由于诸如串行EEPROM之类的部件的减少的可用性或不可用性而产生的制造/购买问题)。作为使NVM 110位于组件102的外部的结果,还减少了重新制作板和对板的废弃。网络/总线112可以是本领域中已知的任意网络或总线体系结构。例如,网络/总线112可以是外围部件互连(PCI)总线、PCI快速总线、高速串行总线或专有总线格式。在另一个示例性实施例中,网络/总线112是内网、外网或诸如因特网之类的互联网,或者其组合,并且实现为无线或有线网络。
在一个示例性实施例中,IC 104是片上系统(SOC),包括处理器114、PLD接口(I/F)逻辑116、输入/输出(I/O)接口120、DMA控制器124和I/O接口126。IC 104可以是本领域中已知的任意集成电路技术,诸如专用集成电路(ASIC)或PLD。处理器114可以是本领域中已知的任意能够执行指令的处理电路,诸如嵌入式微处理器、微控制器、状态机、数字信号处理器(DSP)或逻辑器件。此外,处理器114可以分布或分割成IC 104内的多个处理单元(例如多内核处理)。处理器114可以包括用于存储可执行指令的可读存储介质。在一个示例性实施例中,处理器114通过总线118可操作地连接到DMA控制器124和PLD I/F 116。总线118为诸如寄存器访问之类的非DMA数据提供路径,使得DMA控制器124和PLD I/F 116能够在不必阻止DMA传送的情况下出现在处理器114的寄存器映射内。总线118可以包括地址、数据、控制、状态、中断和时钟线路。在另一个示例性实施例中,总线118是串行总线。IC 104内的其他逻辑或存储器(没有示出)也可操作地连接到总线118。
PLD I/F 116通过总线122可操作地连接到I/O接口120。总线122可以以并行或串行配置包括地址、数据、控制、状态、中断和时钟线路。I/O接口120在总线122和总线108之间提供信号调整和电缓冲。例如,总线122和总线108可以工作于不同的电压电平(例如1.5伏、1.8伏、2.5伏、3.3伏等等),其中I/O接口120在IC 104和PLD 106之间转换信号格式(例如单端、差分、电压参考)和电压电平。
DMA控制器124通过总线128可操作地连接到PLD I/F 116。总线128为在DMA控制器124和PLD I/F 116之间传送数据提供独立的路径。在一个示例性实施例中,总线128提供对IC 104的存储器映射单元的访问,支持可由能够控制(主控)总线128的单元寻址的总线访问。在一个示例性实施例中,总线128主要用于传递数据,而总线118主要用于配置和状态。总线128和118的分离使得DMA控制器124能够在不占用总线118的情况下以最大带宽将数据传递到PLD I/F 116。因此,一旦处理器114开始DMA传送,处理器114就可以继续执行其他任务并访问总线118,而不会产生与DMA控制器124的总线竞争问题。从处理器114移除主动加载PLD编程数据的负担使得处理器114能够执行系统初始化过程中较早的其他系统初始化任务,这样可以减少总的系统初始化时间,增加复位后的系统响应度。在一个示例性实施例中,处理器114通过可选总线129访问总线128。可选总线129在处理器114和DMA控制器124之间提供另一条路径,使得处理器114能够访问附接到总线128的存储器映射单元。IC 104内的其他逻辑或存储器(没有示出)也可连接到DMA总线128,为通过DMA控制器124或处理器114读取或写入提供备用源或目的地。在一个示例性实施例中,DMA控制器124是可由处理器114配置的,使得处理器114可以控制诸如DMA源地址、DMA目的地地址、传送字计数和诸如处理器中断等触发事件之类的特征。处理器114可以通过总线118配置并读取DMA控制器124的状态。在一个示例性实施例中,当检测到错误条件时,处理器114停止DMA控制器124。
DMA控制器124通过总线140与I/O接口126进行接口连接。总线140可以以并行或串行配置包括地址、数据、控制、状态、中断和时钟线路。I/O接口126在总线140和网络/总线112之间提供信号调整和电缓冲。I/O接口126可以包括应用特定驱动器和逻辑以支持网络/总线112,诸如PCI、以太网、内部集成电路(I2C)、通用串行总线(USB)、IEEE-1394(FireWire)、控制局域网络总线(CAN)、专有网络或总线格式,以及本领域中已知的其他网络或总线标准。在一个示例性实施例中,一旦处理器114配置并命令DMA控制器124启动,DMA控制器124就通过网络/总线112、I/O接口126和总线140从NVM 110获得PLD编程数据。然后,DMA控制器124通过DMA总线128将所获得的PLD编程数据传递到PLD I/F 116。
在一个示例性实施例中,PLD I/F 116包括配置和状态寄存器130、数据缓冲器132和调步逻辑134。PLD I/F 116可以进一步包括总线选择器136、存储器映射控制器138和复用器142。配置和状态寄存器130可以作为单个寄存器出现在处理器114的存储器映射或寄存器映射中,或者可以分布在多个寄存器(1到Y)之间。在一个示例性实施例中,将配置和状态寄存器130映射到PLD 106的一个或多个控制和状态线路。配置和状态寄存器130还可以提供对PLD 106的编程端口107的访问。例如,可以使用普通地址解码通过配置和状态寄存器130来将命令写入PLD 106并且读取PLD 106的状态。在一个示例性实施例中,配置和状态寄存器130包括可分别寻址的单元,使得可以与PLD 106的状态相分离地读回写入PLD 106的命令。在处理器114上执行的软件可以对配置和状态寄存器130执行写入和读取操作,使得可以操纵PLD 106的控制线路,以开始编程周期以及检查成功编程的完成。当PLD 106的控制和状态线路的数量大于IC 104的寄存器宽度时,多个配置和状态寄存器(1到Y)130可以存在于PLD I/F 116内。多个配置和状态寄存器13还可用于支持对多个PLD 106的单独编程。
配置和状态寄存器130的内容和功能依赖于PLD 106的厂商和产品族。例如,如果PLD 106是Alter Stratix II设备,那么可以输出“nCONFIG”’信号以开始配置(PLD编程)周期。使用一个或多个配置和状态寄存器130来操纵诸如PLD 106之类的PLD的完整上电序列为在大量PLD器件上的操作提供了模块性,而不需要新硬件或硬件修改。配置和状态寄存器130还可以在PLD I/F 116内部提供其他配置设置,诸如配置调步逻辑134的时序。
在一个示例性实施例中,数据缓冲器132是用于从DMA控制器124接收的数据的临时保存位置。向数据缓冲器132写入数据的速度可以不同于从数据缓冲器132读取数据的速度。数据缓冲器132可以包括RAM、FIFO和/或一个或多个寄存器。在一个示例性实施例中,调步逻辑134控制通过I/O接口120以及总线122和108发送到PLD 106的数据的速率和格式。调步逻辑134可以通过在处理器114上执行的软件命令来配置或者通过DMA控制器124来写入。在另一个示例性实施例中,调步逻辑134在固件中配置。调步逻辑134可以控制从数据缓冲器132读取并写入I/O接口120的数据的时序、字节顺序(例如大端模式与小端模式)和数据字宽度用于输出到PLD 106。在一个示例性实施例中,调步逻辑134控制复用器142以从数据缓冲器132中选择数据。
一些PLD族支持利用压缩或加密数据来进行编程,每字节需要多个时钟周期,而其他PLD族支持每时钟周期对一个字节进行编程。调步逻辑134与数据缓冲器132的组合可以处理对大量PLD 106的编程需求。在一个示例性实施例中,数据缓冲器132以DMA速度从DMA控制器124接收突发形式(例如16字节)的PLD编程数据,并且调步逻辑134读取PLD编程数据并使用由PLD 106支持的编程时序(例如每时钟周期1字节)以PLD编程速度将其发送到PLD 106上的编程端口107。IC 104和PLD 106可以在不同时钟上和/或以不同速度(例如逐步下降(stepped down)或逐步上升(stepped up)的时钟速度)运行。在一个示例性实施例中,调步逻辑134利用计数器、锁相环(PLL)和/或本领域中已知的其他技术来建立并调节发送到PLD 106的PLD编程数据的时序序列。调步逻辑134在不需要处理器114干预的情况下最大化可用的编程带宽以监视和调节编程序列。PLD I/F 116中支持的字节顺序可以进一步实现各种系统配置,包括大端和小端寻址/排序方案。此外,由于在PLD编程端口和DMA控制器124之间总线宽度可以变化,所以PLD I/F 116可以支持各种配置(例如32比特DMA数据到8比特PLD编程端口)。在一个示例性实施例中,存储器映射控制器138提供寻址支持、字节排序和总线宽度转换。存储器映射控制器138还可以仲裁对总线128的访问。
在一个示例性实施例中,诸如配置和状态寄存器130、数据缓冲器132和调步逻辑134之类的PLD I/F 116的单元对处理器114和DMA控制器124来说是可访问的。总线选择器136可以使得总线118或128能够访问配置和状态寄存器130。支持多条访问路径可以通过备份或备选路径提供增强的灵活性和可配置性以优化系统100的性能以及增加抗故障能力。使用总线选择器136以及总线128和118时,存在很多选项支持编程PLD 106。例如,处理器114或DMA控制器124可以设置配置和状态寄存器130中的值以将PLD 106配置为编程模式。在一个示例性实施例中,PLD 106的PLD编程端口107是可通过数据缓冲器132和复用器142或通过配置和状态寄存器130来访问的。这样,处理器114或DMA控制器124可以通过数据缓冲器132和复用器142或者通过配置和状态寄存器130将PLD编程数据发送到PLD 106。尽管提供多条路径以对PLD 106进行编程可能是优选的,但在一个示例性实施例中,移除总线选择器136和可选总线129以减少IC 104中使用的资源数量。如果数据缓冲器132是单个单元或者连接到总线122,那么复用器142也可以被从IC 104移除。尽管总线选择器136和存储器映射控制器138示出在PLD I/F 116内,但可以理解,这些单元可以在PLD I/F 116外部。
在一个示例性实施例中,当PLD 106处于PLD编程(初始化)模式时,对PLD 106的PLD编程端口107的数据写入访问是可用的。在PLD 106不处于PLD编程模式时,对PLD 106上的编程端口的访问可以通过存储器映射控制器138来阻断(例如,不可访问或者通过存储器映射从处理器114和DMA控制器124隔开),使得编程的PLD 106不可能被无意中破坏,这样就增加了整个系统的可靠性和可用性。PLD编程模式可以通过读取配置和状态寄存器130来确定。配置和状态寄存器130还可以表明在PLD编程期间错误情形何时发生。
本领域的普通技术人员应当理解,IC 104和组件102包含图1中没有示出的本领域中已知的其他单元。例如,组件102可以包括其他接口和电路,包括一个或多个时钟、电源、变压器、噪声抑制/过滤单元、去耦电容、电源和接地连接、散热片和分立部件。IC 104可以包括图1中没有示出的其他逻辑块或单元,诸如先入先出(FIFO)缓冲器、随机访问存储器(RAM)块、只读存储器(ROM)、电压轨、时钟、PLL、寄存器、模数(A/D)转换器、数模(DAC)转换器、I/O管脚驱动器以及其他这种单元。
总而言之,系统100使用DMA来初始化PLD 106。在一个示例性实施例中,系统100包括PLD 106,PLD 106包括带有控制线路的编程端口107,PLD 106位于组件102上。系统100可以进一步包括可操作地连接到PLD 106上的编程端口107的IC 104,IC 104位于组件102上。在一个示例性实施例中,IC 104包括用于在IC 104和PLD 106之间转换信号格式的I/O接口120。IC 104可以进一步包括PLD接口116,PLD接口116包括配置和状态寄存器130、数据缓冲器132和调步逻辑134。在一个示例性实施例中,配置和状态寄存器130适合于通过I/O接口120来操纵PLD 106的编程端口107的控制线路。数据缓冲器132可以临时保存以DMA速度从DMA控制器124接收的PLD编程数据。调步逻辑134可以控制以PLD编程速度通过I/O接口120将PLD编程数据发送到PLD106上的编程端口107的速度。
现在转到图2,现在描述根据一个示例性实施例的可以在其上实现使用DMA来初始化PLD的组件200。组件200可以是卡、板、模块或更大系统内的子系统。与图1的组件102类似,图2中的组件200包括集成电路(IC)204,该集成电路(IC)204通过总线108可操作地连接到PLD 106的编程端口107,使得该IC 204能够执行诸如将PLD 106配置为编程模式、对PLD 106进行编程以及监视PLD 106的状态之类的操作。尽管只示出了一个PLD 106,但应当理解,可以将多个PLD(1和N之间)连接到IC 204。在一个示例性实施例中,IC 204是片上系统(SOC),包括处理器114、PLD接口(I/F)116和输入/输出(I/O)接口120、DMA控制器224和NVM 210。IC 204可以是本领域中已知的任意集成电路技术,诸如ASIC或PLD。图2中组件200的编号相同的单元提供了基本上与前面参考图1的组件102所描述的类似的特征和优势。由于一些IC技术可以包括诸如NVM 210之类的内部非易失性存储器,所以图2示出的IC 204会影响这样的IC的存储能力,这样就排除了对诸如图1的NVM 110之类的远程存储单元的需要。
如图2所示,DMA控制器224通过总线240直接访问存储在NVM210内的PLD编程数据。总线240可以以并行或串行配置包括地址、数据、控制、中断和时钟线路。DMA控制器224以与图1的DMA控制器124类似的方式运行,只不过图2的DMA控制器224可以直接访问PLD编程数据。在一个示例性实施例中,通过移除到外部网络/总线112的连接,图2的DMA控制器224与图1中示出的MDA控制器124相比提供了对PLD编程数据的更快访问。组件200对于支持更快的编程速度和更小的PLD编程文件的PLD 106来说可能是优选的,因为NVM210的大小可能会被限制为IC 204的内部单元。
现在转到图3,现在描述根据一个示例性实施例的可以在其上实现使用DMA来初始化PLD的系统300。与图1的系统100类似,系统300包括集成电路(IC)304,该集成电路(IC)304通过总线108可操作地连接到PLD 106的编程端口107,使得该IC 304能够执行诸如将PLD 106配置为编程模式、对PLD 106进行编程以及监视PLD 106的状态之类的操作。尽管只示出了一个PLD 106,但应当理解,可以将多个PLD(1和N之间)连接到IC 304。IC 304可以是本领域中已知的任意集成电路技术,诸如ASIC或PLD。在一个示例性实施例中,图3的IC 304与图1的IC 104相比包括减少的单元和功能。系统300的编号相同的单元提供了基本上与前面参考图1的系统100所描述的类似的特征和优势。在一个示例性实施例中,IC 304包括可操作地连接到I/O接口120、326和336的PLD接口116。系统300进一步包括通过总线338可操作地连接到I/O接口336的处理器314。系统300还包括通过总线340可操作地连接到I/O接口326的DMA控制器324。在一个示例性实施例中,DMA控制器324通过总线312可操作地连接到NVM 110。总线312、338和340利用本领域中已知的任意总线格式,如前面参考图1中其他这种总线所描述的。总线312、338和340可以以并行或串行配置包括地址、数据、控制、状态、中断和时钟线路。在一个示例性实施例中,总线340通过总线仲裁支持DMA数据和非DMA数据。在另一个示例性实施例中,总线340包括用于DMA和非DMA数据的独立路径。类似地,总线338可以包括用于对IC 304进行存储器映射和寄存器映射访问的并行结构,或者作为替代,可以在总线338上采用总线仲裁方案。
处理器314可以是本领域中已知的能够执行指令的任意处理电路,诸如微处理器、微控制器、状态机、数字信号处理器(DSP)和/或逻辑器件。处理器314可以包括用于存储可执行指令的可读存储介质。在一个示例性实施例中,处理器314与IC 304位于同一组件或子系统上。在另一个示例性实施例中,处理器314位于相对于IC 304的远程组件或子系统上。类似地,DMA控制器324可以与IC 304位于同一组件或子系统上,或者DMA控制器324可以位于相对于IC 304的远程位置。在一个示例性实施例中,NVM 110位于相对于IC 304的远程位置(例如,在单独的组件或子系统上)。
在一个示例性实施例中,IC 304内的总线318在PLD I/F 116、I/O接口326和I/O接口336之间为非DMA数据提供路径。总线318可以以并行或串行配置包括地址、数据、控制、状态、中断和时钟线路。总线318通过I/O接口336为处理器314提供对PLD I/F 116的读取/写入访问,以及通过I/O接口326和总线340提供对DMA控制器324的读取/写入访问。DMA控制器324和PLD I/F 116可以直接出现在处理器314的寄存器映射和/或存储器映射内。在一个示例性实施例中,IC 304内的总线328在PLD I/F 116和I/O接口326之间提供用于存储器映射访问的路径。总线328可以以并行或串行配置包括地址、数据、控制、状态、中断和时钟线路。在一个示例性实施例中,处理器314通过可选总线329访问总线328。可选总线329在处理器314和DMA控制器324之间提供另一条路径,使得处理器314能够访问附接到总线328的存储器映射单元。在一个示例性实施例中,总线328主要用于传递数据,而总线318主要用于配置和状态。在一个示例性实施例中,I/O接口326和336执行与前面参考图1中的I/O接口120所描述的类似的总线到总线转换的功能。I/O接口326可以在内部总线318和328与总线340之间执行总线仲裁。类似地,I/O接口336可以在内部总线318和329与总线338之间执行总线仲裁。
当在系统中利用诸如处理器314和DMA控制器324之类的现有处理器和DMA控制器,期望采用使用DMA来初始化PLD的低成本IC实现时,图3中所示出的IC 304可能是优选的。由于与图1的IC 104和图2的IC 204相比具有减少的设备复杂度,图3所示的IC 304可能成本更低。
现在转到图4,现在描述根据一个示例性实施例的可以在其上实现使用DMA来初始化PLD的系统400。与图1的系统100类似,系统400包括组件402,其进一步包括集成电路(IC)404,该集成电路(IC)404,通过总线108可操作地连接到PLD 106的编程端口107,使得该IC 304能够执行诸如将PLD 106配置为编程模式、对PLD 106进行编程以及监视PLD 106的状态之类的操作。组件402可以是卡、板、模块或更大系统内的子系统。尽管只示出了一个PLD 106,但应当理解,可以将多个PLD(1和N之间)连接到IC 404。IC 404可以是本领域中已知的任意集成电路技术,诸如ASIC或PLD。与图3的系统300类似,组件404进一步包括通过I/O接口336和总线338可操作地连接到IC 404的处理器314。系统400的编号相同的单元提供了基本上与前面参考图1-3的系统100-300所描述的类似的特征和优势。在一个示例性实施例中,IC404包括通过总线418可操作地连接到I/O接口336和DMA控制器124的PLD接口116。与图1的IC 104类似,IC 404包括通过总线122可操作地连接到PLD I/F 116的I/O接口120;通过总线140可操作地连接到DMA控制器124的I/O接口126;将PLD I/F接口116可操作地连接到DMA控制器124的总线428;以及将I/O接口336可操作地连接到总线428使得处理器314能够访问总线428的可选总线429。系统400进一步包括在组件402外部的NVM 110,NVM 110通过网络/总线112可操作地连接到IC 404的I/O接口126。
IC 404的总线418在PLD I/F 116、DMA控制器124和I/O接口336之间为寄存器访问提供路径。总线418可以以并行或串行配置包括地址、数据、控制、状态、中断和时钟线路。总线418通过I/O接口336为处理器314提供对PLD I/F 116和对DMA控制器124的读取/写入访问。DMA控制器124和PLD I/F 116可以直接出现在处理器314的存储器和/或寄存器映射内。在一个示例性实施例中,图4的总线428提供与图1的总线128基本类似的特征和优势。在一个示例性实施例中,总线428主要用于传递数据,而总线318主要用于配置和状态。
当诸如图4中所示的IC 404之类的IC不包括嵌入的处理器时,系统400可能是优选的,并且处理器与共同组件上的IC进行接口连接,诸如组件402的处理器314。在一个示例性实施例中,处理器314支持组件402上的多个IC 404。
现在转到图5,现在描述根据一个示例性实施例的可以在其上实现使用DMA来初始化PLD的系统500。与图3的系统300类似,系统500包括集成电路(IC)504,该集成电路(IC)504通过总线108可操作地连接到PLD 106的编程端口107,使得该IC 504能够执行诸如将PLD 106配置为编程模式、对PLD 106进行编程以及监视PLD 106的状态之类的操作。系统500进一步包括处理器314,该处理器314通过I/O接口336和总线338可操作地连接到IC 504,使得该处理器314能够执行诸如读取并将数据写入IC 504之类的任务。尽管只示出了一个PLD 106,但应当理解,可以将多个PLD(1和N之间)连接到IC 504。IC 504可以是本领域中已知的任意集成电路技术,诸如ASIC或PLD。IC 504与图2的IC 204类似,只不过IC 204的处理器114已经被移动到IC 504的外部作为处理器314。系统500的编号相同的单元提供了基本上与前面参考图1-图4的系统100、系统300和系统400以及组件200所描述的类似的特征和优势。当诸如图5中所示出的IC 504之类的IC包含NVM但是不包含处理器时,诸如包含NVM 210但是不包含处理器314,系统500可能是优选的。
现在转到图6,现在描述根据一个示例性实施例描述的可以在其上实现使用DMA来初始化PLD的系统600。在一个示例性实施例中,系统600包括通过总线340可操作地连接到DMA控制器324以及通过总线338可操作地连接到处理器314的多个组件(1到M)。这些多个组件(1到M)可以是卡、板、模块、子系统或者它们的任意组合。图6中示出了两个示例性的组件602和组件604(组件1和组件M),没有示出可变数量的中间组件(组件2到组件M-1)。在一个示例性实施例中,每个组件602-组件604都包括通过总线108可操作地连接到PLD 106的集成电路(IC)304,如前面参考图3的系统300所描述的。每个组件602-组件604可以包括不同数量的PLD 106(1到N)。
DMA控制器324通过总线312可操作地连接到NVM 110并且通过总线606可操作地连接到处理器314。系统600的编号相同的单元提供了基本上与前面参考图3的系统300所描述的类似的特征和优势。总线606可以以并行或串行配置包括地址、数据、控制、状态、中断和时钟线路。在一个示例性实施例中,DMA控制器324和处理器314位于普通设备中,诸如微控制器、DSP或PLD。当多个PLD 106分布在多个组件(诸如组件602到组件604)中,并且每个组件不包括独立的处理器(诸如处理器314)时,图6中示出的系统600可能是优选的。
现在转到图7,现在描述根据一个示例性实施例的用于使用DMA来初始化PLD的处理700。在一个示例性实施例中,处理700通过使用DMA控制器初始化PLD来增加处理器的吞吐量并减少板面积。尽管处理700可以应用于图1-图6的系统和组件100-600,但为了易于说明,可以参考图1的系统100来描述该处理。在方框702中,操纵PLD 106的控制线路以将PLD 106配置为编程模式。在一个示例性实施例中,处理器114通过将命令通过总线118写入PLD I/F116的配置和状态寄存器130来开始操纵总线108的PLD控制线路。处理器114还可以配置PLD I/F 116以便与PLD 106兼容,包括诸如时序、字节顺序和数据字宽度之类的特征。在另一个示例性实施例中,DMA控制器124通过将命令通过总线128和总线选择器136写入PLD I/F 116的配置和状态寄存器130开始操纵总线108的PLD控制线路。
在方框704中,DMA控制器124配置为从NVM 110读取PLD编程数据。在一个示例性实施例中,处理器114通过总线118来控制对DMA控制器124的配置。处理器114可以选择源地址、目的地地址、字计数并配置DMA控制器124内的其他设置。
在方框706中,处理器114使得DMA控制器124开始从NVM读取PLD编程数据。在一个示例性实施例中,DMA控制器124基于由处理器114编程的DMA控制器124的配置而在网络/总线112上主控或进行对存储在NVM 110中的PLD编程数据的请求。通过总线128将在DMA控制器124处从NVM 110接收的PLD编程数据传递到PLD I/F116。
在方框708中,以DMA速度从DMA控制器接收PLD编程数据。在一个示例性实施例中,PLD I/F 116支持各种DMA数据总线宽度、格式和速度。在方框710中,将PLD编程数据写入数据缓冲器132。可以由DMA控制器124或存储器映射控制器138控制对数据缓冲器132的写入。在一个示例性实施例中,数据缓冲器132是FIFO、RAM或基于寄存器的缓冲器。数据缓冲器132的大小可以足够大以保存整个PLD编程数据文件,或足够大以保存相对于DMA速度和PLD编程速度之间的速度差异按大小排列的数据块。在另一个示例性实施例中,将PLD编程数据写入配置和状态寄存器130。配置和状态寄存器130可以为以PLD编程速度将PLD编程数据发送到PLD 106上的编程端口107提供另一条路径。PLD编程数据可以由DMA控制器124或者处理器114写入数据缓冲器132或者配置和状态寄存器130。
在方框712中,从数据缓冲器132读取PLD编程数据。在一个示例性实施例中,可以改变从数据缓冲器132读取的数据的字节顺序以支持大端格式或小端格式。存储器映射控制器138可以控制数据缓冲器132中的值的字节排序和寻址。从数据缓冲器132读取数据的过程可以调节数据缓冲器132中的内部指针以维持数据缓冲器132内的PLD编程数据的顺序。在一个示例性实施例中,当从数据缓冲器132读取PLD编程数据时,修改写入数据缓冲器132的PLD编程数据的数据字宽度。数据字宽度修改可以使得各种DMA控制器124和PLD编程端口107能够支持不同的总线宽度(例如8比特、16比特、24比特、32比特、64比特等等)。字一个示例性实施例中,调步逻辑134将输入切换到复用器142以访问数据缓冲器132内的不同位置。调步逻辑134可以选择用于以PLD编程速度读取的数据缓冲位置。在一个示例性实施例中,DMA速度不同于PLD编程速度。在另一个示例性实施例中,DMA速度与PLD编程速度相同。当DMA速度等于或低于PLD编程速度时,PLD编程数据可以不必进行累积就经过数据缓冲器132,或者经过配置和状态寄存器130。
在方框714中,以PLD编程速度将PLD编程数据发送到PLD 106上的编程端口107。在一个示例性实施例中,PLD 106的编程端口107通过总线108与IC 104进行接口连接。在一个示例性实施例中,由调步逻辑134管理发送速度。
在方框716中,读取PLD 106的状态以验证使用PLD编程数据对PLD 106的成功编程。可以由处理器114通过配置和状态寄存器130来读取PLD 106的状态。在一个示例性实施例中,周期性地读取PLD 106的状态以检查错误或PLD编程的完成。在另一个示例性实施例中,通过一个或多个中断信号来向处理器114通知错误或PLD编程的完成。
在方框718中,当PLD 106不处于编程模式时,阻断对PLD 106上的编程端口107的访问。当PLD 106不处于编程模式时,可以拒绝对处理器114或DMA控制器124或者两者的访问。可以由存储器映射控制器138阻断对PLD 106上的编程端口107的访问。存储器映射控制器138可以通过配置和状态寄存器130来确定PLD编程模式状态。在一个示例性实施例中,存储器映射控制器138通过调步逻辑134来访问配置和状态寄存器130。在另一个示例性实施例中,存储器映射控制器138通过总线选择器136来访问配置和状态寄存器130。
在一个示例性实施例中,方框708-方框714以管道或流的方式并发地执行,而方框702-方框706和方框716-方框718顺序执行。使用管道或流的方法可以进一步最大化可用带宽以减少利用PLD编程来对PLD
106进行编程所需要的总时间。在处理700期间的任意点,处理器114可能因为各种原因暂停或终止PLD编程序列,这些原因诸如错误、对系统资源的更高优先级的请求或用户请求。在错误情况下,处理器114可以尝试重复处理700。作为替代,处理器114可以发送消息、引发信号或向外部资源通知错误情况以便可以采取校正措施。
示例性实施例的技术效果和益处包括使用DMA控制器来初始化PLD。DMA控制器将PLD编程数据从NVM流式传送到PLD I/F,释放系统处理器以在对PLD进行编程时执行其他任务。示例性实施例使得NVM能够位于PLD位于其上的组件或子系统的外部。将NVM移动到远程位置可以减少组件或子系统成本、重量、功耗、板面积、热量,并且提供其他优势和益处。通过使用可用的或嵌入的系统资源,不会有板面积损失或典型地与使用串行EEPROM设备来对PLD进行编程关联的增加的成本。通过使用DMA控制器及关联的逻辑,可以通过并行编程路径快速加载PLD编程数据。示例性实施例在DMA控制器与PLD之间调整时序、字节顺序和数据字宽度方面进一步提供了灵活性。对PLD编程过程进行初始化的处理器能够获得PLD控制和状态信息,使得处理器能够监视成功传送、错误情况,以及开始或停止PLD编程序列。此外,在DMA控制器发生故障时,PLD I/F中的控制和状态寄存器可以提供为PLD加载PLD编程数据的另一条路径。
如上所述,本发明的实施例可以体现为计算机实现的处理和用于实现这些处理的设备的形式。本发明的实施例还可以体现为包含指令的计算机程序代码的形式,这些指令包含在诸如软盘、CD-ROM、硬盘驱动器或任意其他计算机可读存储介质之类的有形介质中,其中,当计算机程序代码被加载到计算机中并由计算机执行时,计算机变成用于实现本发明的设备。本发明还可以体现为计算机程序代码的形式,这些代码例如存储在存储介质中,加载到计算机中和/或由计算机执行,或者通过一些传输介质来发送,诸如通过电线或电缆、通过光纤或者经由电磁辐射来发送,其中,当计算机程序代码被加载到计算机中并由计算机执行时,计算机变成用于实现本发明的设备。当在通用微处理器上实现时,计算机程序代码段配置微处理器以创建特定逻辑电路。
尽管已经参考示例性实施例描述了本发明,但本领域的普通技术人员应当理解,在不偏离本发明范围的情况下,可以进行各种改变并且可以用等同的单元来替换本发明的单元。另外,在不偏离本发明的本质范围的情况下,可以进行很多修改以使特定环境或材料适应本发明的阐述。因此,本发明并非旨在限于作为所考虑的用于执行本发明的最佳模式所公开的特定实施例,相反,本发明将包括在所附权利要求书范围内的所有实施例。而且,术语“第一”、“第二”等等的使用不是表示任何顺序或重要性,而是用于区别一个单元和另一个单元。