具体实施方式
下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种逻辑器件在线加载的方法,将逻辑器件本身的I/O接口连接至该逻辑器件的JTAG接口,处理器通过总线连接至逻辑器件的总线接口,并通过总线控制该逻辑器件实现逻辑器件的在线加载。本发明实施例中的总线可以为处理器与逻辑器件之间的任意总线,例如:控制总线。
图1为本发明逻辑器件在线加载的方法一个实施例的流程图,如图1所示,该实施例包括:
步骤101,接收在线加载命令。
步骤102,根据该在线加载命令,通过处理器和逻辑器件之间的总线去使能该逻辑器件所在单板的JTAG链路,并使能该逻辑器件的I/O接口与JTAG接口之间的链路。具体地,可以通过上述总线去使能该逻辑器件所在单板的JTAG链路上的第一缓冲器,并使能该逻辑器件的I/O接口与JTAG接口之间链路上的第二缓冲器。
步骤103,通过上述总线控制该逻辑器件,使该逻辑器件通过该逻辑器件的I/O接口与JTAG接口之间的链路,对该逻辑器件进行在线加载。
本实施例中的逻辑器件为可编程逻辑器件,例如CPLD等;本实施例中的执行主体可以为处理器,例如:CPU等。
上述实施例中,处理器在接收到在线加载命令之后,通过该处理器与逻辑器件之间的总线去使能逻辑器件所在单板的JTAG链路,并使能该逻辑器件的I/O接口与JTAG接口之间的链路,通过该逻辑器件的I/O接口与JTAG接口之间的链路对逻辑器件进行在线加载,从而在不额外占用I/O接口的前提下,实现了逻辑器件的在线加载,并且无需外扩额外的逻辑器件。
图2为本发明逻辑器件在线加载的方法另一个实施例的流程图,本实施例以处理器为CPU、逻辑器件为CPLD为例进行说明,如图2所示,该实施例包括:
步骤201,CPU接收在线加载命令,清空在线加载完成事件。
步骤202,根据该在线加载命令,CPU通过该CPU与CPLD之间的总线去使能CPLD所在单板的JTAG链路,并使能该CPLD的I/O接口与JTAG接口之间的链路。具体地,CPU可以通过上述总线去使能CPLD所在单板的JTAG链路上的第一缓冲器(Buffer),并使能CPLD的I/O接口与JTAG接口之间链路上的第二Buffer。本实施例中,JTAG链路包括CPLD,可选地,该JTAG链路还可以包括至少一个JTAG器件;当JTAG链路仅包括CPLD时,第一Buffer位于该CPLD的JTAG接口与外部加载设备之间;当JTAG链路包括CPLD和至少一个JTAG器件时,第一Buffer位于CPLD的JTAG接口与JTAG器件之间。
本实施例中,单板加工出来之后,可以连接JTAG加载线到JTAG插座,通过外部加载设备对CPLD进行首次加载,该JTAG加载线可以为JTAG下载电缆。首次加载之后,CPLD的逻辑功能正常运行,CPLD的寄存器默认控制CPLD所在单板的JTAG链路使能,CPLD的I/O接口与JTAG接口之间的链路去使能。
在CPU接收到在线加载命令之后,该CPU通过该CPU与CPLD之间的总线去使能CPLD所在单板的JTAG链路,并使能该CPLD的I/O接口与JTAG接口之间的链路。
步骤203,CPU通过上述总线控制CPLD通过该CPLD的I/O接口与JTAG接口之间的链路,对该CPLD进行在线加载。
在使能CPLD的I/O接口与JTAG接口之间的链路之后,CPU通过上述总线控制CPLD通过该CPLD的I/O接口与JTAG接口之间的链路,对该CPLD进行在线加载,此时CPLD的逻辑功能正常运行,不影响CPLD所在单板的其他功能。
步骤204,判断在线加载是否完成。如果在线加载已完成,则执行步骤205;如果在线加载尚未完成,则返回执行步骤203。
步骤205,CPU通过上述总线使能CPLD所在单板的JTAG链路,并去使能该CPLD的I/O接口与JTAG接口之间的链路;记录在线加载完成事件。具体地,CPU可以通过上述总线使能CPLD所在单板的JTAG链路上的第一Buffer,并去使能该CPLD的I/O接口与JTAG接口之间链路上的第二Buffer。此时,新程序已加载到CPLD的片上闪存(Flash),CPU可以在任意合适时间控制CPLD所在单板重新上电,对CPLD进行逻辑更新。
本实施例中,在线加载完成之后,CPU记录在线加载完成事件,CPU在每次接收到在线加载命令之后,均需清空在线加载完成事件,因此步骤201~步骤205可以在单板重新上电之前反复进行,有效程序为单板重新上电之前最后一次加载的程序。
步骤206,CPU通过上述总线控制CPLD所在单板重新上电,对CPLD进行逻辑更新。
本实施例中,在线加载完成之后,CPLD运行的逻辑功能还是未更新之前的逻辑功能,在完成在线加载后的任意合适时间,CPU可以通过该CPU与CPLD之间的总线控制CPLD所在单板重新上电,对该CPLD进行逻辑更新。
上述实施例中,CPU在接收到在线加载命令之后,通过该CPU和CPLD之间的总线去使能CPLD所在单板的JTAG链路,并使能该CPLD的I/O接口与JTAG接口之间的链路,通过该CPLD的I/O接口与JTAG接口之间的链路对该CPLD进行在线加载,从而在不额外占用I/O接口的前提下,实现了CPLD的在线加载,并且无需外扩额外的逻辑器件。另外,上述实施例提供的方法同样适用于对不包括处理器但包括总线接口的单板上的逻辑器件进行在线加载。
本发明图1或图2所示实施例中,提供了“去使能逻辑器件所在单板的JTAG链路,并使能该逻辑器件的I/O接口与JTAG接口之间的链路”,以及“使能逻辑器件所在单板的JTAG链路,并去使能该逻辑器件的I/O接口与JTAG接口之间的链路”的一种实现方式,但本发明实施例并不仅限于此,也可以采用一个缓冲器,该缓冲器中的两条通道分别连接上述两条链路,处理器通过该处理器和逻辑器件之间的总线控制该缓冲器的两条通道,达到“去使能逻辑器件所在单板的JTAG链路,并使能该逻辑器件的I/O接口与JTAG接口之间的链路”,以及“使能逻辑器件所在单板的JTAG链路,并去使能该逻辑器件的I/O接口与JTAG接口之间的链路”的目的;本发明实施例对“去使能逻辑器件所在单板的JTAG链路,并使能该逻辑器件的I/O接口与JTAG接口之间的链路”,以及“使能逻辑器件所在单板的JTAG链路,并去使能该逻辑器件的I/O接口与JTAG接口之间的链路”的实现方式不作限定,任何可以实现上述目的的方式均应落入本发明实施例的保护范围。
本发明实施例提供的逻辑器件在线加载的方法可以用于对包括CPU的单板上的CPLD进行在线加载,图3为本发明应用场景一个实施例的示意图,图3中,CPU通过总线与CPLD连接,该总线可以为控制总线或其他任意一种总线。由于本发明实施例提供的逻辑器件在线加载的方法不会影响单板上的CPLD和其他器件的正常工作,因此CPU可以通过总线与CPLD直接连接,也可以经过其他器件与CPLD连接。在图3所示的场景中,只要CPU有总线连接到了CPLD上面,就可以应用本发明图1或图2所示实施例提供的方法对CPLD进行在线加载,并且不会额外占用CPU的I/O接口。
本发明实施例提供的逻辑器件在线加载的方法还可以用于对不包括CPU但包括总线接口的单板,例如:插卡上的CPLD进行在线加载,图4为本发明应用场景另一个实施例的示意图,图4中,插卡上包括需要在线加载的CPLD,但不包括CPU,并且母板上没有通用I/O接口通过连接器连接到该插卡上。正常情况下,CPLD均有总线连接到母板的CPU上,因此可以应用本发明图1或图2实施例提供的方法对CPLD进行在线加载,并且不会额外占用CPU的I/O接口,该总线可以为控制总线或其他任意一种总线。这里,CPLD与母板的CPU的连接同样可以是直接连接,也可以是经过其他器件连接。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图5为本发明处理器一个实施例的结构示意图,本实施例的处理器可以作为CPU,或CPU的一部分,实现本发明图1所示实施例的流程。如图5所示,该处理器包括:接收模块51、使能/去使能模块52和控制模块53。
其中,接收模块51可以接收在线加载命令;使能/去使能模块52可以根据接收模块51接收的在线加载命令,通过处理器与逻辑器件之间的总线去使能该逻辑器件所在单板的JTAG链路,并使能该逻辑器件的I/O接口与JTAG接口之间的链路;控制模块53可以通过上述总线控制该逻辑器件,使该逻辑器件通过该逻辑器件的I/O接口与JTAG接口之间的链路,对该逻辑器件进行在线加载。
本实施例中的逻辑器件包括可编程逻辑器件,例如:CPLD等。
上述实施例中,接收模块51在接收到在线加载命令之后,使能/去使能模块52通过该处理器与逻辑器件之间的总线去使能逻辑器件所在单板的JTAG链路,并使能该逻辑器件的I/O接口与JTAG接口之间的链路,控制模块53通过上述总线控制该逻辑器件通过该逻辑器件的I/O接口与JTAG接口之间的链路,对该逻辑器件进行在线加载,从而在不额外占用I/O接口的前提下,实现了逻辑器件的在线加载,并且无需外扩额外的逻辑器件。
图6为本发明处理器另一个实施例的结构示意图,本实施例的处理器可以是CPU,或CPU的一部分,实现本发明图1或图2所示实施例的流程。如图6所示,该处理器包括:接收模块61、使能/去使能模块62、控制模块63、记录模块64和清空模块65。
其中,接收模块61可以接收在线加载命令;使能/去使能模块62可以根据接收模块61接收的在线加载命令,通过处理器与逻辑器件之间的总线去使能该逻辑器件所在单板的JTAG链路,并使能该逻辑器件的I/O接口与JTAG接口之间的链路;具体地,使能/去使能模块62可以通过上述总线去使能逻辑器件所在单板的JTAG链路上的第一缓冲器,并使能该逻辑器件的I/O接口与JTAG接口之间链路上的第二缓冲器。本实施例中,该JTAG链路包括上述逻辑器件,可选地,该JTAG链路还可以包括至少一个JTAG器件;当JTAG链路仅包括逻辑器件时,第一缓冲器位于该逻辑器件的JTAG接口与外部加载设备之间;当JTAG链路包括逻辑器件和至少一个JTAG器件时,第一缓冲器位于该逻辑器件的JTAG接口与JTAG器件之间。
控制模块63可以通过上述总线控制该逻辑器件,使该逻辑器件通过该逻辑器件的I/O接口与JTAG接口之间的链路,对该逻辑器件进行在线加载。
本实施例中,使能/去使能模块62还可以在在线加载完成之后,通过该总线使能该逻辑器件所在单板的JTAG链路,并去使能该逻辑器件的I/O接口与JTAG接口之间的链路;具体地,使能/去使能模块62可以在在线加载完成之后,通过上述总线去使能逻辑器件的I/O接口与JTAG接口之间链路上的第二缓冲器,并使能该逻辑器件所在单板的JTAG链路上的第一缓冲器。
控制模块63还可以在在线加载完成之后,通过上述总线控制该逻辑器件所在单板重新上电,对该逻辑器件进行逻辑更新。
记录模块64可以在在线加载完成之后,记录在线加载完成事件;清空模块65用于在接收模块61接收到在线加载命令之后,清空记录模块64记录的在线加载完成事件。本实施例中,在线加载完成之后,记录模块64记录在线加载完成事件,接收模块61在每次接收到在线加载命令之后,清空模块65均需清空在线加载完成事件,因此在单板重新上电之前可以反复对逻辑器件进行加载,有效程序为单板重新上电之前最后一次加载的程序
上述实施例中,接收模块61在接收到在线加载命令之后,使能/去使能模块62通过该处理器与逻辑器件之间的总线去使能逻辑器件所在单板的JTAG链路,并使能该逻辑器件的I/O接口与JTAG接口之间的链路,控制模块63通过上述总线控制该逻辑器件通过该逻辑器件的I/O接口与JTAG接口之间的链路,对该逻辑器件进行在线加载,从而在不额外占用I/O接口的前提下,实现了逻辑器件的在线加载,并且无需外扩额外的逻辑器件。另外,上述实施例提供的处理器同样适用于对不包括处理器但包括总线接口的单板上的逻辑器件进行在线加载。
图7为本发明逻辑器件在线加载的***一个实施例的结构示意图,如图7所示,该逻辑器件在线加载的***包括:处理器71和逻辑器件72;逻辑器件72的I/O接口环回到该逻辑器件72的JTAG接口,逻辑器件72与处理器71通过总线连接,该总线可以为控制总线或其他任意一种总线。
其中,处理器71可以接收在线加载命令,根据该在线加载命令,通过处理器71和逻辑器件72之间的总线去使能逻辑器件72所在单板的JTAG链路,并使能逻辑器件72的I/O接口与JTAG接口之间的链路;通过上述总线控制逻辑器件72,使逻辑器件72通过逻辑器件72的I/O接口与JTAG接口之间的链路,对该逻辑器件72进行在线加载;具体地,处理器71可以通过本发明图5或图6所示实施例的处理器实现。
逻辑器件72可以在处理器71控制下,通过该逻辑器件72的I/O接口与JTAG接口之间的链路,对该逻辑器件进行在线加载。
本实施例中,逻辑器件72可以为可编程逻辑器件,例如CPLD等。
本实施例中,逻辑器件72的I/O接口与该逻辑器件72的JTAG接口连接,处理器71通过处理器71和逻辑器件72之间的总线控制逻辑器件72通过该逻辑器件72的I/O接口与JTAG接口之间的链路,对该逻辑器件72进行在线加载。从而在不额外占用I/O接口的前提下,实现了逻辑器件的在线加载,并且无需外扩额外的逻辑器件。
图8为本发明逻辑器件在线加载的***另一个实施例的结构示意图,如图8所示,该逻辑器件在线加载的***包括:处理器81、逻辑器件82和外部加载设备83;逻辑器件82的I/O接口环回到该逻辑器件82的JTAG接口,逻辑器件82与处理器81通过总线连接,该总线可以为控制总线或其他任意一种总线。
其中,处理器81可以接收在线加载命令,根据该在线加载命令,通过处理器81和逻辑器件82之间的总线去使能逻辑器件82所在单板的JTAG链路,并使能逻辑器件82的I/O接口与JTAG接口之间的链路;通过上述总线控制逻辑器件82,使逻辑器件82通过逻辑器件82的I/O接口与JTAG接口之间的链路,对该逻辑器件82进行在线加载;具体地,处理器81可以通过本发明图5或图6所示实施例的处理器实现。
逻辑器件82可以在处理器81控制下,通过该逻辑器件82的I/O接口与JTAG接口之间的链路,对该逻辑器件进行在线加载。
本实施例中,逻辑器件82可以为可编程逻辑器件,例如CPLD等。
外部加载设备83可以通过JTAG加载线对逻辑器件82进行加载。
本实施例中,逻辑器件82的I/O接口与该逻辑器件82的JTAG接口连接,处理器81通过处理器81和逻辑器件82之间的总线控制逻辑器件82通过该逻辑器件82的I/O接口与JTAG接口之间的链路,对该逻辑器件82进行在线加载。从而在不额外占用I/O接口的前提下,实现了逻辑器件的在线加载,并且无需外扩额外的逻辑器件。
下面以处理器为CPU,逻辑器件为CPLD为例介绍本发明实施例提供的逻辑器件在线加载的***在具体实现时的结构示意图。
图9为本发明逻辑器件在线加载的***一个具体实施例的结构示意图,如图9所示,该***可以包括:外部加载设备91、CPU 92、CPLD 93和JTAG器件94。其中,CPU 92、CPLD 93和JTAG器件94位于同一块单板上;CPLD 93的I/O接口环回到该CPLD 93的JTAG接口,CPU 92与CPLD 93通过总线连接,这里的总线可以为控制总线或其他任意一种总线。本实施例中,该***还可以包括第一Buffer 95和第二Buffer 96,其中,第一Buffer 95位于CPLD 93的JTAG接口与JTAG器件94之间,第二Buffer 96位于CPLD 93的JTAG接口与I/O接口之间。图9所示的***结构仅是本发明实施例提供的逻辑器件在线加载的***的一种实现方式,本发明实施例并不仅限于此,该逻辑器件在线加载的***也可以不包括JTAG器件94,这时第一Buffer 95位于CPLD 93的JTAG接口与外部加载设备91之间。
单板加工出来后,CPLD 93中无程序,所有的I/O接口处于三态状态,即输入、输出和高阻状态。此时通过电路中默认的下拉电阻R2和上拉电阻R3,CPLD 93作为一个JTAG器件连接在单板的JTAG链路中,该JTAG链路包括CPLD 93和至少一个JTAG器件94。这时可以由外部加载设备91通过JTAG加载线对CPLD 93进行首次加载,例如:可以连接JTAG下载电缆到JTAG插座,通过外部加载设备91对CPLD 93进行首次加载,首次加载之后,CPLD 93的逻辑功能正常运行,CPLD 93的寄存器默认控制I/O输出接口CTL0和CTL1,使能CPLD 93所在单板的JTAG链路上的第一Buffer 95,去使能CPLD 93的I/O接口与JTAG接口之间链路上的第二Buffer 96,从而使能CPLD 93所在单板的JTAG链路,去使能CPLD 93的I/O接口与JTAG接口之间的链路。这时也可以由外部加载设备91通过JTAG加载线对CPLD93进行再次加载。
在CPU 92接收到在线加载命令之后,CPU 92通过该CPU 92与CPLD 93之间的总线去使能CPLD 93所在单板的JTAG链路,并使能该CPLD 93的I/O接口与JTAG接口之间的链路。具体地,CPU 92可以通过上述总线去使能CPLD 93所在单板的JTAG链路上的第一Buffer 95,并使能CPLD的I/O接口与JTAG接口之间链路上的第二Buffer 96。之后,CPU 92通过上述总线控制CPLD 93通过该CPLD 93的I/O接口与JTAG接口之间的链路,对该CPLD 93进行在线加载。加载完成之后,CPU 92控制CPLD 93的I/O输出接口CTL0和CTL1将第一Buffer 95和第二Buffer 96恢复为默认状态,即使能第一Buffer 95,去使能第二Buffer 96。此时,新程序已经加载到CPLD 93的片上Flash,CPU 92可以在任意合适时间控制CPLD 93所在单板重新上电,对CPLD 93进行逻辑更新。
另外,为了防止用户程序的编写错误造成两个Buffer的控制冲突,可以在控制I/O的输出端串两个电阻R1、R4,这样可以在发生Buffer的控制冲突时,将其断开,使CPLD 93与单板的JTAG链路连通,重新加载;也可以使用一个I/O输出加一个非门的电路来控制两个Buffer实现单板的JTAG链路和CPLD的I/O接口与JTAG接口之间的链路互斥。以上仅提供了两种实现链路互斥的方式,本发明实施例并不仅限于此,任何可以实现单板的JTAG链路和CPLD的I/O接口与JTAG接口之间的链路互斥的方式均应落入本发明实施例的保护范围。
图10为本发明逻辑器件在线加载的***另一个具体实施例的结构示意图,如图10所示,该***可以包括:CPLD 1001和JTAG器件1002。其中,CPLD 1001和JTAG器件1002位于一块插卡上;CPLD 1001的I/O接口环回到该CPLD 1001的JTAG接口;CPLD 1001通过总线连接到母板的CPU,这里的总线可以为控制总线或其他任意一种总线。
图10为针对插卡设计的一种***结构,在母板与插卡连接器接口已经固定,没有多余I/O接口的情况下,图10所示的***同样可以支持单板的JTAG链路和CPLD 1001的I/O接口与JTAG接口之间的链路这两条链路,可以实现插卡上的JTAG器件成链和CPLD在线加载这两个基本功能。具体的实现过程与本发明图9所示实施例中的实现过程类似,在此不再赘述。
图11为本发明逻辑器件在线加载的***再一个具体实施例的结构示意图,如图11所示,该***可以包括:CPLD 1101和JTAG器件1102。其中,CPLD 1101和JTAG器件1102位于一块插卡上;CPLD 1101的I/O接口环回到该CPLD 1101的JTAG接口;CPLD 1101通过总线连接到母板的CPU,这里的总线可以为控制总线或其他任意一种总线。
图11所示的***结构适用于母板到插卡无多余的I/O接口,又没有JTAG接口的情形。由于这时不会有两条JTAG链路互斥的情况,因此取消了Buffer,只需要由CPU通过总线控制CPLD 1101的不同I/O接口模拟两条JTAG链路,其中一条JTAG链路为CPLD 1101的I/O接口与JTAG接口之间的链路,用于实现CPLD 1101的在线加载;另一条JTAG链路为单板的JTAG链路,包括CPLD 1101与JTAG器件1102。
在图11所示***中,实现CPLD 1101在线加载的过程与本发明图9所示实施例中描述的过程类似,在此不再赘述。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。