模拟位流生成方法、装置、设备和存储介质
文献发布时间:2023-06-19 13:49:36
技术领域
本申请涉及集成电路技术领域,尤其涉及一种模拟位流生成方法、装置、设备和存储介质。
背景技术
现场可编程逻辑门阵列(FieldProgrammable GateArray,FPGA)是一种半定制的集成电路,其功能可以根据使用场景做出一定的改变,比专用集成电路更为灵活。FPGA作为一种芯片,在制作过程中会存在工艺不确定性、杂质引入、或者光刻偏差等一系列问题,一个正确的设计并不能保证生产出来的芯片使用时不会出现故障,因此芯片在进入市场之前必须经过严格的测试,位流测试是其中一个重要的测试环节。
现有技术中,在测试位流的时候,可能需要根据测试人员的要求修改位流数据或配置寄存器的内容。而目前要满足这种需求,需要对现场可编程逻辑器件设计软件的代码进行修改或一些特殊处理,这就意味着测试时需要对代码进行多次调整。尤其是要测试一种新的位流加密算法或认证算法时,还需要将新的算法也集成到现场可编程逻辑器件设计软件的代码中,如此频繁的修改可能会造成现场可编程逻辑器件设计软件功能出错,而现场可编程逻辑器件设计软件作为主要软件产品,这些错误将带来不可想象的损失。
另外,在一款FPGA芯片开发初期,可能存在设计文件或参考数据不完整的情况,由于缺少关键的信息,现场可编程逻辑器件设计软件没有支持该新款芯片的完整流程,软件生成出来的位流文件会存在缺陷或无法生成位流文件,导致无法进行正常的位流测试。
发明内容
为了解决现有技术中需要修改现场可编程逻辑器件设计软件的实现方式以配合位流测试,导致可能存在频繁修改代码对现场可编程逻辑器件设计软件功能的稳定性的干扰,以及在新款可编程逻辑器件例如FPGA芯片开发初期,由于现场可编程逻辑器件设计软件暂时无法生成能够进行正常位流测试的位流文件导致无法进行位流测试的技术问题。本申请提供了一种模拟位流生成方法、装置、设备和存储介质,其主要目的在于在不修改现场可编程逻辑器件设计软件代码的情况下灵活的生成满足各种需求以及新开发的可编程逻辑器件例如FPGA芯片的模拟位流,不影响现场可编程逻辑器件设计软件的正常使用,提高测试效率。
为实现上述目的,本申请提供了一种模拟位流生成方法,该方法包括:
获取用户自定义的用于生成模拟位流的需求数据,需求数据包括定义的寄存器的寄存器信息、寄存器之间的排列顺序,寄存器信息包括:寄存器地址、用于定义寄存器读写类型的操作码、待写入寄存器的数据内容以及数据内容的数据长度;
将寄存器的寄存器信息按照寄存器之间的排列顺序依次写入模拟位流文件中,以生成对应的模拟位流。
此外,为实现上述目的,本申请还提供了一种模拟位流生成装置,该装置包括:
需求数据获取模块,用于获取用户自定义的用于生成模拟位流的需求数据,需求数据包括定义的寄存器的寄存器信息、寄存器之间的排列顺序,寄存器信息包括:寄存器地址、用于定义寄存器读写类型的操作码、待写入寄存器的数据内容以及数据内容的数据长度;
位流生成模块,用于将寄存器的寄存器信息按照寄存器之间的排列顺序依次写入模拟位流文件中,以生成对应的模拟位流。
为实现上述目的,本申请还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时执行如前面任一项的模拟位流生成方法的步骤。
为实现上述目的,本申请还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行如前面任一项的模拟位流生成方法的步骤。
本申请提出的模拟位流生成方法、装置、设备和存储介质,通过用户自定义的寄存器信息及寄存器的排列顺序,将寄存器信息依次写入模拟位流文件中得到模拟位流。实现了在独立于现场可编程逻辑器件设计软件之外,灵活地根据用户(例如测试人员或工程人员)的测试需求更改位流结构及数据,配置寄存器内容,生成不同的模拟位流以适应各种特殊的测试要求。减少或避免了对现场可编程逻辑器件设计软件位流部分代码的频繁修改,避免或降低现场可编程逻辑器件设计软件的正常使用及版本发布。尤其对于新开发的可编程逻辑器件或测试新的算法,降低了试错成本,支持无限次的修改调试代码,直至达到预期效果,促进了可编程逻辑器件的开发和完善。生成的模拟位流可以降低测试的复杂度,方便工程人员快速排查出问题,提高了测试效率。
附图说明
图1为本申请一实施例中模拟位流生成方法的流程示意图;
图2为本申请一实施例中模拟位流生成装置的结构框图;
图3为本申请一实施例中计算机设备的内部结构框图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
图1为本申请一实施例中模拟位流生成方法的流程示意图。参考图1,以该方法应用在终端设备为例进行说明。该模拟位流生成方法包括以下步骤S100-S200。
S100:获取用户自定义的用于生成模拟位流的需求数据,需求数据包括定义的寄存器的寄存器信息、寄存器之间的排列顺序,寄存器信息包括:寄存器地址、用于定义寄存器读写类型的操作码、待写入寄存器的数据内容以及数据内容的数据长度。
具体地,本实施例的模拟位流生成方法由位流生成工具实现。位流生成工具具体为一款独立于现场可编程逻辑器件设计软件的模拟位流生成工具。用户例如测试人员或工程人员可以操作该位流生成工具来生成满足不同需求的模拟位流。本申请生成的模拟位流可以是普通位流,也可以是加密位流、认证位流等经过数据处理的位流。其中,加密位流为使用加密算法对数据进行加密处理后得到的位流,认证位流为使用认证算法对数据进行认证处理后得到的位流。
本申请通过生成模拟位流可以用于位流测试。具体地,可以用于测试新的位流算法的正确性,例如测试新的位流加密算法、认证算法等。还可以用于在新的可编程逻辑器件例如FPGA芯片开发初期,测试该新的可编程逻辑器件位流结构及寄存器数据的正确性,等等不局限于此的各种应用场景。
需求数据为工程人员为达到某些测试目的、根据可编程逻辑器件的设计原理和/或相关文档规定自定义的配置数据。
工程人员可以在需求数据中增加或删除寄存器、定义添加的寄存器之间的排列顺序,配置每个添加的寄存器的寄存器信息。寄存器之间的排列顺序即为位流结构。寄存器信息包括寄存器地址、用于定义寄存器读写类型的操作码、待写入寄存器的数据内容以及数据内容的数据长度。寄存器地址具体为一种二进制地址,根据寄存器地址可以唯一定位该寄存器,还可以确定该寄存器的类型,寄存器的类型包括加密寄存器、认证寄存器、命令寄存器等其他类型的寄存器,不局限于此。通过操作码可以定义寄存器为读寄存器还是写寄存器。数据内容为将要写入寄存器中的写数据,具体为一种二进制数据。数据长度为数据内容的字节长度。
在实际FPGA设计中,现场可编程逻辑器件设计软件在FPGA设计流程完成后根据具体的硬件结构、工艺映射和布局布线的信息生成对应的位流文件。由现场可编程逻辑器件设计软件生成的位流文件包含了所有数据帧的信息,大小为MB级别,占用内存较多。在测试位流结构及寄存器数据的正确性时,一个完整的位流中,数据内容占内存最多,数据内容是“帧数据输入寄存器”的数据内容,由于只要测试位流结构及寄存器数据的正确性,而不是测试数据内容功能的正确性,所以并不需要完整的数据内容,因此,可以模拟位流可以用一两帧数据代替。
而在测试算法的正确性时,由于算法处理位流数据时是对数据分段后进行处理的,每一段数据的处理方式是一样的,因此验证算法是否正确,并不需要完整的位流数据,也可以用一两帧位流数据代替。例如测试加密位流时,只要位流中这一两帧数据加密的结果与预期的一致则算法验证成功,测试认证位流时,通过这一两帧数据算出来的摘要与预期的一致则算法验证成功。
因此,本实施例中的待写入寄存器的数据内容的数据长度可以自定义短一些,用来将位流文件的数据大小降至KB级别,进而降低测试的复杂度。
本实施例中位流生成工具可以通过读取位流配置文件的方式从中提取出需求数据。
位流生成工具也可以通过接收用户的模拟位流生成指令,模拟位流生成指令携带用于生成模拟位流的需求数据,从模拟位流生成指令中提取出用于生成模拟位流的需求数据。更具体地,例如,在位流生成工具对应的操作界面通过编写代码的方式向位流生成工具提供携带需求数据的代码,位流生成工具位流生成工具从代码中提取出需求数据。
S200:将寄存器的寄存器信息按照寄存器之间的排列顺序依次写入模拟位流文件中,以生成对应的模拟位流。
具体地,模拟位流文件是在获取到需求数据后新建的一种文件模板。新建的模拟位流文件中包含了一些固定格式的内容。例如,在模拟位流文件的头和尾的内容是固定的,中间的内容是需要写入的,本实施例中寄存器的寄存器信息是按照寄存器之间的排列顺序依次写入到模拟位流文件中的,完成写入的模拟位流文件就是生成的模拟位流。
本实施例用户可以根据需求和行业标准配置寄存器,在能够满足测试需求的情况下尽可能少的配置寄存器及寄存器的数据内容,从而生成既满足测试需求、同时内存占用少的模拟位流,灵活性高。不需要依赖现场可编程逻辑器件设计软件即可生成不同需求的模拟位流,避免或减少了对现场可编程逻辑器件设计软件中代码的修改,避免或降低了现场可编程逻辑器件设计软件的正常使用及版本发布。尤其对于新开发的可编程逻辑器件或测试新的算法,降低了试错成本,支持无限次的修改调试代码,直至达到预期效果,促进了可编程逻辑器件的开发和完善。生成的模拟位流可以降低测试的复杂度,方便工程人员快速排查出问题,提高了测试效率。
在一个实施例中,步骤S100具体包括:
接收用户的模拟位流生成指令,模拟位流生成指令携带模拟位流的配置文件路径;
从配置文件路径对应的模拟位流配置文件中提取出用于生成模拟位流的需求数据。
具体地,在模拟位流生成工具对应的操作界面上用户可以输入模拟位流生成指令,例如该模拟位流生成指令为:bts_sim_bit-reg_file D:/reg.txt,其中,reg_file选项后面的“D:/reg.txt”为配置文件路径或配置文件地址。模拟位流生成工具通过该配置文件路径可以在本地查找到对应的模拟位流配置文件,并从该模拟位流配置文件中提取出需求数据。模拟位流配置文件为用户预设的。
当然,用户还可以在操作界面上的配置文件地址栏选择模拟位流配置文件的配置文件路径,在接收到用户的模拟位流生成指令后根据配置文件地址栏的配置文件路径去查找模拟位流配置文件。此时的模拟位流生成指令可以是通过点击操作界面上的相应按钮生成的,也可以是用户通过操作界面输入的。
在一个实施例中,步骤S200具体包括:
生成各个寄存器对应的寄存器类,将寄存器类按照寄存器之间的排列顺序保存至寄存器列表中,寄存器类包含对应寄存器的寄存器信息及数据读接口和数据写接口;
按照寄存器列表中寄存器类的排列顺序,依次调用寄存器类的数据读接口读取寄存器信息、并将读取的寄存器信息写入模拟位流文件中,根据完成写入的模拟位流文件得到模拟位流。
具体地,根据寄存器的寄存器信息生成寄存器类,寄存器类中包含寄存器信息(寄存器地址、用于定义寄存器读写类型的操作码、待写入寄存器的数据内容以及所述数据内容的数据长度)及数据读接口和数据写接口。数据读接口和数据写接口具体为一些读写信息的软件接口。数据读接口用于被调用时读取寄存器信息,数据写接口用于被调用时写入或修改寄存器信息。
寄存器列表是一种容器,用于按照寄存器之间的排列顺序保存寄存器类。因此,寄存器列表中的寄存器类的排列顺序与寄存器之间的排列顺序对应。本实施例是通过调用寄存器类的数据读接口将寄存器信息读取出来并写入到模拟位流文件中的。且,寄存器列表中寄存器类的寄存器信息是按照排列顺序依次写入新建的模拟位流文件中的。排在寄存器列表越前面的寄存器类中的寄存器信息越被优先写入新建的模拟位流文件中。寄存器列表具体为一种RegList列表。
本实施例没有对寄存器信息作数据处理,可以用于测试可编程逻辑器件例如FPGA芯片的位流结构和寄存器的寄存器信息的正确性。
在一个实施例中,在步骤S200之前,该方法还包括:
接收用户的模拟位流处理指令,从模拟位流处理指令中提取出指定的处理方式及对应的处理文件。
具体地,处理方式及对应的处理文件包括加密算法及对应的密钥文件和/或认证算法及对应的认证文件等不局限于此。
在模拟位流生成工具对应的操作界面上设有处理指令输入框,用户在该处理指令输入框中可以输入模拟位流处理指令。该模拟位流处理指令例如为bts_sim_bit-enc_mode1-key_file D:\enc_key_file.nky。其中,enc_mode为加密算法选项,1表示AES-GCM加密算法,key_file为密钥文件选项,D:\enc_key_file.nky为需要密钥文件路径。因此,从该模拟位流处理指令中可以提取出处理方式为加密算法和密钥文件。支持的加密算法包括AESGCM、SM4GCM、SM7GCM等不局限于此,支持的认证算法包括SHAKE、SHA384、SM3、RSA、SM2、ECDSA等不局限于此。
步骤S200具体包括:
生成各个寄存器对应的寄存器类,将寄存器类按照寄存器之间的排列顺序保存至寄存器列表中,寄存器类包含对应寄存器的寄存器信息及数据读接口,
根据指定的数据处理方式、利用数据处理文件对寄存器列表中待处理的寄存器类的寄存器信息进行数据处理,
数据处理完成后,按照寄存器列表中寄存器类的排列顺序,依次调用寄存器类的数据读接口读取数据处理后的寄存器信息、并将经过数据处理的寄存器信息或未经过数据处理的寄存器信息写入模拟位流文件中,根据完成写入的模拟位流文件得到模拟位流。
具体地,根据寄存器的寄存器信息生成寄存器类,寄存器类中包含寄存器信息(寄存器地址、用于定义寄存器读写类型的操作码、待写入寄存器的数据内容以及所述数据内容的数据长度)及数据读接口和数据写接口。数据读接口和数据写接口具体为一些读写信息的软件接口。数据读接口用于被调用时读取寄存器信息,数据写接口用于被调用时写入或修改寄存器信息。
寄存器列表是一种容器,用于按照寄存器之间的排列顺序保存寄存器类。因此,寄存器列表中的寄存器类的排列顺序与寄存器之间的排列顺序对应。
自定义的寄存器的类型有很多种,可能包括普通寄存器、加密寄存器、认证寄存器、命令寄存器中的一种或多种。并不是所有寄存器对应的寄存器信息都需要经过数据处理。因此,需要根据寄存器列表中寄存器类之间的排列顺序来确定哪些寄存器为待处理的寄存器类。本实施例先利用指定的数据处理方式、利用数据处理文件对寄存器列表中待处理的寄存器类的寄存器信息进行数据处理。经过数据处理的寄存器类中的寄存器信息会发生改变。
完成待处理的寄存器类的数据处理后,按照寄存器列表中寄存器类的排列顺序,依次调用寄存器类的数据读接口读取寄存器类中在执行完成数据处理后的寄存器信息,并写入到模拟位流文件中的。写入到模拟位流文件中的寄存器信息包括了经过数据处理后改变的寄存器信息,也包括了没有经过数据处理没有改变的寄存器信息。且,寄存器列表中寄存器类的寄存器信息是按照排列顺序依次写入新建的模拟位流文件中的。排在寄存器列表越前面的寄存器类中的寄存器信息越被优先写入新建的模拟位流文件中。
本实施例在将寄存器信息写入模拟位流文件之前先对相关的待处理的寄存器类的寄存器信息进行数据处理,再按照寄存器列表中的排列顺序将寄存器类的寄存器信息(包括更改的寄存器信息和未更改的寄存器信息)依次写入模拟位流文件中,以生成经过数据处理的模拟位流。通过对经过数据处理的模拟位流进行测试,可以验证数据处理方式及对应的数据处理文件的正确性,以及调试数据处理文件。
在一个实施例中,认证算法包括摘要算法和签名算法;
根据指定的数据处理方式、利用数据处理文件对寄存器列表中待处理的寄存器类的寄存器信息进行数据处理,包括:
若数据处理方式及对应的数据处理文件包括认证算法及对应的认证文件,则根据寄存器地址定位寄存器列表中认证寄存器对应的认证寄存器类,
将认证寄存器类作为当前待认证寄存器类,
根据认证算法中的摘要算法、利用认证文件对当前待认证寄存器类的寄存器信息和上一待认证寄存器类的上一摘要进行摘要计算,得到当前摘要,
根据寄存器地址判断当前待认证寄存器类是否为命令寄存器对应的命令寄存器类,若当前待认证寄存器类不为命令寄存器类,则将当前待认证寄存器类的下一待认证寄存器类作为当前待认证寄存器类,执行步骤:根据认证算法中的摘要算法、利用认证文件对当前待认证寄存器类的寄存器信息和上一待认证寄存器类的上一摘要进行摘要计算,得到当前摘要,直至当前待认证寄存器类为命令寄存器类,
根据认证算法中的签名算法处理第一命令寄存器类对应的当前摘要,以生成签名,其中,第一命令寄存器类为第一命令寄存器对应的待认证寄存器类,
将签名添加至认证寄存器的数据内容中,以得到认证寄存器对应的签名寄存器信息。
具体地,若数据处理方式及对应的数据处理文件包括认证算法及对应的认证文件,则会根据认证算法及认证文件对寄存器列表中待处理的寄存器类进行认证处理。本实施例的待处理的寄存器类为待认证寄存器类,具体包括认证寄存器类、第一命令寄存器类以及从认证寄存器类开始到第一命令寄存器类之间的所有寄存器类。其中,认证寄存器类为认证寄存器对应的寄存器类,第一命令寄存器类为第一命令寄存器对应的寄存器类。
根据寄存器类中存储的寄存器信息所包含的寄存器地址可以判断寄存器列表中哪个寄存器类为认证寄存器类,还可以判断出哪个寄存器类为第一命令寄存器类。其中,第一命令寄存器类为排在认证寄存器类之后的寄存器类。认证寄存器类为认证处理的起始标志,第一命令寄存器类为认证处理的结束标志。
根据寄存器类的排列顺序,从认证寄存器类开始依次遍历寄存器列表中的从认证寄存器类到第一命令寄存器类的所有寄存器类。循环执行以下摘要计算步骤:
根据认证算法中的摘要算法、利用认证文件对当前待认证寄存器类的寄存器信息和上一待认证寄存器类的上一摘要进行摘要计算,得到当前摘要;根据寄存器地址判断当前待认证寄存器类是否为命令寄存器类,如果当前待认证寄存器类不为命令寄存器类,则将当前待认证寄存器类的下一待认证寄存器类作为当前待认证寄存器类,继续循环执行上述步骤:根据认证算法中的摘要算法、利用认证文件对当前待认证寄存器类的寄存器信息和上一待认证寄存器类的上一摘要进行摘要计算,得到当前摘要;根据寄存器地址判断当前待认证寄存器类是否为命令寄存器类,直到当前待认证寄存器类为命令寄存器类。
寄存器信息的大小是4个字节的整数倍。在一次摘要计算步骤中包括了多个子步骤:每读取4字节信息,就会基于摘要算法和认证文件对该4字节信息和上一子摘要或上一摘要执行一次摘要计算得到当前子摘要。其中,上一子摘要为上一个4字节信息得到的子摘要,上一摘要为上一个寄存器类得到的摘要,也是上一个寄存器的最后4字节信息得到的子摘要。寄存器类的最开始4个字节与上一摘要进行摘要计算得到一个子摘要。
上述中,类似于通过迭代或递归的方式,基于摘要算法、利用认证文件对上一待认证寄存器类的上一摘要与当前待认证寄存器类的寄存器信息进行摘要计算,得到当前待认证寄存器类的当前摘要。如此循环,直到对第一命令寄存器类之前的上一摘要与第一命令寄存器类的寄存器信息进行摘要计算,得到第一命令寄存器类对应的当前摘要作为最终摘要。
在计算摘要的过程中,按照排列顺序、依次从寄存器列表中读取寄存器的寄存器信息用于摘要计算,每次计算得到一个新的摘要用于下次摘要计算。
摘要计算步骤是由代码实现摘要算法处理过程的,摘要算法被封装成一个类,软件调用这个摘要算法类的接口来实现摘要计算。在具体的实施例中,在读取到认证寄存器类的时候,可以通过在执行代码中设置标志位的方式确定认证处理开始。例如,在读取到认证寄存器类的时候,将第一标志位由第一状态值设置为第二状态值。例如,将第一标志位由默认的初始值false设置为true。当第一标志位为false时代表认证处理还未开始或结束,当第一标志位为true时代表认证处理开始或正在执行。从认证处理开始循环执行上述摘要计算步骤,直到读取到第一命令寄存器类,在经过摘要计算得到第一命令寄存器类对应的当前摘要后,将第一标志位由第二状态值设置为第一状态值,例如将第一标志位由true设置为false,以结束摘要计算步骤的执行。第一标志位具体可以为Authflag。
得到最终摘要后,通过签名算法处理第一命令寄存器对应的当前摘要,得到签名。将签名添加至认证寄存器的数据内容中用于对认证寄存器的数据内容进行签名,以得到认证寄存器对应的签名寄存器信息。签名寄存器信息中的数据内容被签名。签名是一种保证数据安全的手段。
当然上述摘要计算步骤中也可以提取寄存器信息中的部分信息进行摘要计算,签名处理时也可以对认证寄存器的寄存器信息中的部分信息进行签名,不局限于只对寄存器信息中的写内容签名。具体可以根据实际应用设置。
认证处理完成后,按照寄存器列表中寄存器类的排列顺序,依次调用寄存器类的数据读接口读取数据处理后的寄存器信息、并将未经过认证处理的寄存器信息或经过认证处理的寄存器信息写入模拟位流文件中,根据完成写入的模拟位流文件得到模拟位流。得到的模拟位流为认证模拟位流,其包含了经过认证处理的寄存器信息和未经过认证处理的寄存器信息。对该认证模拟位流进行位流测试,可以验证认证算法以及认证文件的正确性。
验证认证算法和认证文件的步骤如下:将最终生成的签名写入到认证寄存器的数据内容之中,测试的时候,测试人员会对模拟位流进行仿真,用认证算法(通过rtl代码实现的算法)对模拟位流的寄存器信息计算摘要和待测签名,对比待测签名与写在认证寄存器内的签名是否一致。如果一致,则认证算法和认证文件正确。
在一个实施例中,根据指定的数据处理方式、利用数据处理文件对寄存器列表中待处理的寄存器类的寄存器信息进行数据处理,包括:
若数据处理方式及对应的数据处理文件包括加密算法及对应的密钥文件,则根据寄存器地址定位寄存器列表中加密寄存器对应的加密寄存器类;
根据加密算法、利用密钥文件对寄存器列表中从加密寄存器类开始到第二命令寄存器类为止、包括加密寄存器类和第二命令寄存器类在内的所有待加密寄存器类的寄存器信息进行加密处理,以更新每个待加密寄存器类的寄存器信息,
其中,第二命令寄存器类为命令寄存器对应的待加密寄存器类,待加密寄存器类为寄存器列表中包括加密寄存器类和第二命令寄存器类在内的任意一个寄存器类。
具体地,若数据处理方式及对应的数据处理文件包括加密算法及对应的密钥文件,则会根据加密算法及密钥文件对寄存器列表中待处理的寄存器类进行认证处理。本实施例的待处理的寄存器类为待加密寄存器类,具体包括加密寄存器类、第二命令寄存器类以及从加密寄存器类开始到第二命令寄存器类之间的所有寄存器类。其中,加密寄存器类为加密寄存器对应的寄存器类,第二命令寄存器类为第二命令寄存器对应的寄存器类。
根据寄存器类中存储的寄存器信息所包含的寄存器地址可以判断寄存器列表中哪个寄存器类为加密寄存器类,还可以判断出哪个寄存器类为第二命令寄存器类。其中,第二命令寄存器类为排在加密寄存器类之后的寄存器类。加密寄存器类为加密处理的起始标志,第二命令寄存器类为加密处理的结束标志。
另外,当数据处理方式及对应的数据处理文件包括加密算法及对应的密钥文件和认证算法及对应的认证文件时,第一命令寄存器类和第二命令寄存器类可以为同一个命令寄存器类也可以为不同的命令寄存器类。
根据寄存器类的排列顺序,从加密寄存器类开始依次遍历寄存器列表中的从加密寄存器类到第二命令寄存器类的所有寄存器类。执行以下加密步骤:根据加密算法、利用密钥文件对寄存器列表中所有待加密寄存器类的寄存器信息进行加密处理,以更新每个待加密寄存器类的寄存器信息。
加密步骤是由代码实现的。在具体的实施例中,在读取到加密寄存器类的时候,可以通过在执行代码中设置标志位的方式确定加密处理开始。例如,在读取到加密寄存器类的时候,将第二标志位由第三状态值设置为第四状态值。例如,将第二标志位由默认的初始值false设置为true。当第二标志位为false时代表加密处理还未开始或结束,当第二标志位为true时代表加密处理开始或正在执行。从加密处理开始执行上述加密步骤,直到读取到第二命令寄存器类,在对第二命令寄存器类的寄存器信息进行加密处理后,将第二标志位由第四状态值设置为第三状态值,例如将第二标志位由true设置为false,以结束加密步骤的执行。第一标志位和第二标注位为不同的标志位。
加密处理完成后,按照寄存器列表中寄存器类的排列顺序,依次调用寄存器类的数据读接口读取数据处理后的寄存器信息、并将未经过加密处理的寄存器信息或经过加密处理的寄存器信息写入模拟位流文件中,根据完成写入的模拟位流文件得到模拟位流。得到的模拟位流为加密模拟位流,其包含了经过加密处理的寄存器信息和未经过加密处理的寄存器信息。对该加密模拟位流进行位流测试,可以验证加密算法以及密钥文件的正确性。
在一个实施例中,数据处理方式及对应的数据处理文件包括加密算法及对应的密钥文件和认证算法及对应的认证文件时,则根据上述的加密方式和认证方式对寄存器列表中的待认证寄存器和待加密寄存器分别进行认证处理和加密处理。
在加密处理和认证处理都完成后,再根据寄存器列表中寄存器类的排列顺序,将寄存器类中经过数据处理的寄存器信息或未经过数据处理的寄存器信息依次写入到模拟位流文件中,完成写入的模拟位流文件为得到的模拟位流。其中,经过数据处理的寄存器信息为经过加密处理的寄存器信息或经过认证处理的寄存器信息或经过加密处理和认证处理的寄存器信息。未经过数据处理的寄存器信息为既未经过加密处理也未经过认证处理的寄存器信息。
另外,可以设置加密处理和认证处理的先后顺序。优选地,先进行加密处理后再进行认证处理。
现场可编程逻辑器件设计软件是提供给客户使用的软件,所以现场可编程逻辑器件设计软件代码必须是准确的,不宜反复修改。而测试过程中如果结果与预期不一致时,往往需要在现场可编程逻辑器件设计软件中加入调试代码,或者做一些特殊处理查看算法处理过程的具体数据,这样无疑会破坏现场可编程逻辑器件设计软件原生代码的准确性。本申请先在独立于现场可编程逻辑器件设计软件之外的模拟位流生成工具上实现算法接口,模拟位流生成工具生成模拟位流时会调用算法接口处理位流数据,测试调试时只需要修改模拟位流生成工具算法接口内部的代码,待测试通过后,再将算法接口添加到模拟位流生成工具中即可,保证了现场可编程逻辑器件设计软件代码的安全稳定。
在一个实施例中,该方法还包括:
获取用户的模拟位流修改数据;
根据模拟位流修改数据在寄存器列表中新增寄存器类或删除已有寄存器类,
和/或,
调用寄存器类的数据写接口根据模拟位流修改数据修改已有寄存器类中的寄存器信息。
具体地,一般对于新研发的可编程逻辑器件,其相关文档可能是不准确的,导致寄存器顺序不对,或者寄存器信息有误,需要通过测试来发现问题,调整寄存器顺序及寄存器信息。
模拟位流生成后会被用来执行位流测试,以测试位流结构或寄存器信息或位流算法的正确性。当模拟位流出现错误时,工程人员会通过调试生成新的模拟位流,再对新的模拟位流进行位流测试,如此通过不断调试和测试直到模拟位流不再报错。
调试的方式为:工程人员根据报错通过操作界面向模拟位流生成工具发送模拟位流修改指令,模拟位流修改指令携带模拟位流修改文件路径,模拟位流生成工具从模拟位流修改文件中提取出模拟位流修改数据。模拟位流修改数据包括待添加的寄存器的寄存器信息、待添加的寄存器的排列顺序,或,待删除的已有寄存器,或,已有寄存器的寄存器信息的修改数据等。模拟位流生成工具根据模拟位流修改数据在寄存器列表中删除确定要删除的已有寄存器和/或根据待添加的寄存器信息新增寄存器类,新增寄存器类根据定义的排列顺序插入到寄存器列表中。若模拟位流修改数据中还包括对已有寄存器的寄存器信息的修改数据,则模拟位流生成工具会调用已有寄存器类的数据写接口根据修改数据修改对应的已有寄存器类中的寄存器信息。
对位流结构(寄存器排列顺序)及寄存器信息进行修改,通过测试的最终版本就是正确的位流结构和寄存器信息,正确的位流结构及寄存器信息会添加到位流配置文件中,现场可编程逻辑器件设计软件生成位流时会在位流配置文件中读取相应的信息。合入现场可编程逻辑器件设计软件是为了在现场可编程逻辑器件设计软件上支持新的可编程逻辑器件(例如新研发的FPGA芯片)位流的生成。
本申请能根据测试人员的要求灵活的更改位流结构及寄存器信息,配置寄存器内容以及位流加密、认证所使用的算法类型,提高了测试效率,可以应对特殊的测试要求。减少对现场可编程逻辑器件设计软件位流部分代码的频繁修改,不影响现场可编程逻辑器件设计软件的正常使用及版本发布。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
图2为本申请一实施例中模拟位流生成装置的结构框图。参考图2,该模拟位流生成装置包括:
需求数据获取模块100,用于获取用户自定义的用于生成模拟位流的需求数据,需求数据包括定义的寄存器的寄存器信息、寄存器之间的排列顺序,寄存器信息包括:寄存器地址、用于定义寄存器读写类型的操作码、待写入寄存器的数据内容以及数据内容的数据长度;
位流生成模块200,用于将寄存器的寄存器信息按照寄存器之间的排列顺序依次写入模拟位流文件中,以生成对应的模拟位流。
在一个实施例中,需求数据获取模块100具体包括:
第一指令接收模块,用于接收用户的模拟位流生成指令,模拟位流生成指令携带模拟位流的配置文件路径;
提取模块,用于从配置文件路径对应的模拟位流配置文件中提取出用于生成模拟位流的需求数据。
在一个实施例中,位流生成模块200具体包括:
寄存器类生成模块,用于生成各个寄存器对应的寄存器类,将寄存器类按照寄存器之间的排列顺序保存至寄存器列表中,寄存器类包含对应寄存器的寄存器信息及数据读接口和数据写接口;
数据写入模块,用于按照寄存器列表中寄存器类的排列顺序,依次调用寄存器类的数据读接口读取寄存器信息、并将读取的寄存器信息写入模拟位流文件中,根据完成写入的模拟位流文件得到模拟位流。
在一个实施例中,该装置还包括:
第二指令接收模块,用于接收用户的模拟位流处理指令,从模拟位流处理指令中提取出指定的处理方式及对应的处理文件;
位流生成模块200具体包括:
寄存器类生成模块,用于生成各个寄存器对应的寄存器类,将寄存器类按照寄存器之间的排列顺序保存至寄存器列表中,寄存器类包含对应寄存器的寄存器信息及数据读接口,
数据处理模块,用于根据指定的数据处理方式、利用数据处理文件对寄存器列表中待处理的寄存器类的寄存器信息进行数据处理,
数据写入模块,用于数据处理完成后,按照寄存器列表中寄存器类的排列顺序,依次调用寄存器类的数据读接口读取数据处理后的寄存器信息、并将经过数据处理的寄存器信息或未经过数据处理的寄存器信息写入模拟位流文件中,根据完成写入的模拟位流文件得到模拟位流。
在一个实施例中,认证算法包括摘要算法和签名算法;
数据处理模块具体包括:
第一定位单元,用于若数据处理方式及对应的数据处理文件包括认证算法及对应的认证文件,则根据寄存器地址定位寄存器列表中认证寄存器对应的认证寄存器类,
赋值单元,用于将认证寄存器类作为当前待认证寄存器类,
摘要计算单元,用于根据认证算法中的摘要算法、利用认证文件对当前待认证寄存器类的寄存器信息和上一待认证寄存器类的上一摘要进行摘要计算,得到当前摘要,
循环单元,用于根据寄存器地址判断当前待认证寄存器类是否为命令寄存器对应的命令寄存器类,若当前待认证寄存器类不为命令寄存器类,则将当前待认证寄存器类的下一待认证寄存器类作为当前待认证寄存器类,跳转至摘要计算单元,直至当前待认证寄存器类为命令寄存器类,
签名生成单元,用于根据认证算法中的签名算法处理第一命令寄存器类对应的当前摘要,以生成签名,其中,第一命令寄存器类为第一命令寄存器对应的待认证寄存器类,
签名单元,用于将签名添加至认证寄存器的数据内容中,以得到认证寄存器对应的签名寄存器信息。
在一个实施例中,数据处理模块具体包括:
第二定位单元,用于若数据处理方式及对应的数据处理文件包括加密算法及对应的密钥文件,则根据寄存器地址定位寄存器列表中加密寄存器对应的加密寄存器类;
加密单元,用于根据加密算法、利用密钥文件对寄存器列表中从加密寄存器类开始到第二命令寄存器类为止、包括加密寄存器类和第二命令寄存器类在内的所有待加密寄存器类的寄存器信息进行加密处理,以更新每个待加密寄存器类的寄存器信息,
其中,第二命令寄存器类为命令寄存器对应的待加密寄存器类,待加密寄存器类为寄存器列表中包括加密寄存器类和第二命令寄存器类在内的任意一个寄存器类。
在一个实施例中,该装置还包括:
修改数据获取模块,用于获取用户的模拟位流修改数据;
寄存器类管理模块,用于根据模拟位流修改数据在寄存器列表中新增寄存器类或删除已有寄存器类,
和/或,
数据修改模块,用于调用寄存器类的数据写接口根据模拟位流修改数据修改已有寄存器类中的寄存器信息。
其中上述模块/单元中的“第一”和“第二”的意义仅在于将不同的模块/单元加以区分,并不用于限定哪个模块/单元的优先级更高或者其它的限定意义。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块,本申请中所出现的模块的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式。
关于模拟位流生成装置的具体限定可以参见上文中对于模拟位流生成方法的限定,在此不再赘述。上述模拟位流生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
图3为本申请一实施例中计算机设备的内部结构框图。该计算机设备具体可以是终端设备。如图3所示,该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,该计算机设备的处理器用于提供计算和控制能力。存储器包括存储介质和内存储器。存储介质可以是非易失性存储介质,也可以是易失性存储介质。存储介质存储有操作系统,还可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器实现模拟位流生成方法。该内存储器为存储介质中的操作系统和计算机可读指令的运行提供环境。该内存储器中也可储存有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行模拟位流生成方法。该计算机设备的网络接口用于与外部服务器通过网络连接通信。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令(例如计算机程序),处理器执行计算机可读指令时实现上述实施例中模拟位流生成方法的步骤,例如图1所示的步骤S100至步骤S200及该方法的其它扩展和相关步骤的延伸。或者,处理器执行计算机可读指令时实现上述实施例中模拟位流生成装置的各模块/单元的功能,例如图2所示模块100至模块200的功能。为避免重复,这里不再赘述。
处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
存储器可用于存储计算机可读指令和/或模块,处理器通过运行或执行存储在存储器内的计算机可读指令和/或模块,以及调用存储在存储器内的数据,实现计算机装置的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。
存储器可以集成在处理器中,也可以与处理器分开设置。
本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机可读指令,计算机可读指令被处理器执行时实现上述实施例中模拟位流生成方法的步骤,例如图1所示的步骤S100至步骤S200及该方法的其它扩展和相关步骤的延伸。或者,计算机可读指令被处理器执行时实现上述实施例中模拟位流生成装置的各模块/单元的功能,例如图2所示模块100至模块200的功能。为避免重复,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指示相关的硬件来完成,所述的计算机可读指令可存储于一计算机可读取存储介质中,该计算机可读指令在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双倍速率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
- 模拟位流生成方法、装置、设备和存储介质
- 解码异常码流生成方法、装置、电子设备及可读存储介质