TC1728灵活的CRC引擎(FCE)用户手册12-1V1.0,2011-12FCE,V1.712灵活的CRC引擎(FCE)该章描述了灵活的CRC引擎(FCE)模块。FCE提供一个或多个循环冗余码(CRC)算法的并行执行。TC1728当前的FCE版本实现了IEEE802.3、ethernetCRC32和CastagnoliCRC32多项式标准。FCE的通用结构允许其能够通过多个多项式扩展。FCE的首要目标是利用CRC签名作为软件应用程序或操作系统服务(与AutosarCRC“CRC例程的规范”兼容)的硬件加速引擎。CRC算法普遍应用于计算唯一的信息签名,这些签名用于在通信线路如内部总线或者微处理器之间的接口的传输时检查信息的可靠性。CRC签名也同样适用于签署存放在可变或者不可变存储单元里的数据块。基于多项式除法计算的签名提供非常高的位错误检测能力。FCE作为标准FPI总线从外设工作,并且完全由一组配置和控制寄存器控制。该章由以下内容构成:页12-3“FCE特性”页12-4“操作概览”页12-6“FCE功能描述”页12-14“FCE模块寄存器”页12-13“FCE模块的接口”页12-28“编程指南”页12-31“CRC代码的属性”注意:在页12-14“FCE模块寄存器”中描述的FCE内核寄存器名称在用户手册中引用时要加上模块名称前缀“FCE_”。注意:FCE在将来极有可能也使用在16位微控制器上。目前还没有这样的需求,但是这个扩展在研发阶段已经被考虑进去了。TC1728灵活的CRC引擎(FCE)用户手册12-2V1.0,2011-12FCE,V1.712.1相关文档输入文档•[D1]ApainlessguidetoCRCErrorDetectionAlgorithms,RossN.Williams•[D2]AutosarR3.1Rev0001,SpecificationofCRCRoutinesV3.0.2•[D3]32-BitCyclicRedundancyCodesforInternetApplications,PhilipKoopman,InternationalConferenceonDependableSystemsandNetworks(DSN),2002相关标准与规范[S1]IEEE802.3Ethernet32-bitsCRCTC1728灵活的CRC引擎(FCE)用户手册12-3V1.0,2011-12FCE,V1.712.2FCE特性FCE提供了如下特性:•构架提供了高达4个不同的CRC多项式。当前FCE版本执行:—IEEE802.3CRC32ethernet多项式:0x82608EDB(CRC内核0)—CRC32Castagonoli多项式:0x8F6E37A0(CRC内核1)•并行CRC执行(32位宽度)—FCE计算的数据块应是一个32位的倍数—FCE计算的数据块的开始地址,应至少32位对齐•只允许对内核的输入寄存器的32位写访问—对配置寄存器的8位或者16位写访问也是支持的•寄存器接口符合CRC例程的Autosar规范。可以通过基于软件的保存/恢复机制支持可重入软件例程。•扩展寄存器接口控制FCE执行的可靠性。•控制FCE操作的关键寄存器冗余地实现以捕捉瞬态错误。•通过特定中断节点的错误通知机制:—瞬态错误检测:带有本地状态寄存器(由软件清零)的错误中断产生(可屏蔽的)—校验和失败:带有本地状态寄存器(由软件清零)的错误中断产生(可屏蔽的).FCE实现其中断服务节点。TC1728灵活的CRC引擎(FCE)用户手册12-4V1.0,2011-12FCE,V1.712.3操作概览FCE是标准的FPI从模块。FCE与FPI总线同步并且运行在1:1的时钟比例下。其与微控制器的FPI外设总线相连。图12-1FCE系统集成:单个CRC内核FCE操作是由一组内存映射寄存器控制的。主要目的是作为需要CRC校验和计算的软件应用程序的硬件加速。寄存器组旨在使能FCE。根据硬件配置,FCE可能实现更多带有不同的CRC多项式的CRC内核。产品的具体配置将在产品自定义章节里描述。每个CRC内核将有相同的硬件和软件体系结构。此文档的其余部分将仅侧重介绍普通CRC内核体系结构。图12-2显示多内核配置。TC1728灵活的CRC引擎(FCE)用户手册12-5V1.0,2011-12FCE,V1.7图12-2FCE系统集成:多CRC内核在多内核实现中,中断线路进行或运算,FCE对系统只有一个中断节点。每个crc内核有一个状态寄存器,以使能软件确定哪个中断源处于激活状态。状态和中断处理请参阅STS寄存器的详细描述。TC1728灵活的CRC引擎(FCE)用户手册12-6V1.0,2011-12FCE,V1.712.4FCE功能描述图12-3CRC内核架构以下属性的特点是一种基于CRC多项式除法的校验和算法:[1]多项式级数(例如32,表示两个多项式的最高权重)[2]多项式(例如0x04C11DB7:第33位省略,因为总是等于1)[3]初始值:CRC寄存器的初始值TC1728灵活的CRC引擎(FCE)用户手册12-7V1.0,2011-12FCE,V1.7[4]输入数据反射:指示输入的并行数据的每个字节被用来计算CRC之前是否被反射[5]结果数据反射:表示CRC的最终值是否被反射[6]XOR值:指示返回CRC结果之前是否进行最后的XOR运算一旦选择了一个多项式,所有的属性是静态的。不过FCE具有通过控制两个反射步骤以及最终xor操作的功能,如图12-3所示。复位值是与实现算法兼容的。最终的xor控制使能选择0xFFFFFFFF或0x00000000与POST_CRC1进行xor运算(见图12-3)。这两个值是最常见的CRC多项式所经常使用的。注意:反射步骤和最终XOR不修改基于错误检测的CRC算法的属性,只有CRC最后的签名受到影响。TC1728灵活的CRC引擎(FCE)用户手册12-8V1.0,2011-12FCE,V1.7CRC操作软件必须首先确保CRC内核配置正确,尤其是通过CRC寄存器写入的CRC寄存器的初始值。如果想要软件实现在每个报文末尾进行自动签名检查,LENGTH和CHECK寄存器必须分别根据报文的长度(即为32位字的数量)和期望的签名(CHECK)进行配置。CHECK值受到CRC反射和XOR操作的影响。自检查由CFG.CCE位域使能。属性:如果输入报文M1由报文M0及其CRC签名组成,那么M1的CRC签名应为0。.根据报文的长度,可多次软件写入IR寄存器,如果CFG.CCE位置位,每一次写IR寄存器,LENGTH寄存器减1。当LENGTH寄存器已经为0,但是软件依然对IR寄存器进行写操作(错误操作),LENGTH寄存器的每一位都应该被置1,并且保持该值直到软件重新初始化新的报文。在这样的情况下,STS.MLF(报文长度标志位)应被置位,并且如果CFG.MLE(报文长度错误)置位产生一个中断。硬件监控LENGTH寄存器从1到0的跳变,以检测报文的结束,并进行POST_CRC2(见图12-3)与CHECK寄存器值的比较。下面两个图是对CRC内核的控制和状态特性的概览。TC1728灵活的CRC引擎(FCE)用户手册12-9V1.0,2011-12FCE,V1.7图12-4CRC内核配置寄存器图12-5CRC内核状态寄存器TC1728灵活的CRC引擎(FCE)用户手册12-10V1.0,2011-12FCE,V1.7寄存器保护和监控方法寄存器监控:适用于CFG和CHECK寄存器因为CFG和CHECK寄存器是CRC操作的关键,提供了一些用于检测和记录瞬态错误的机制。瞬态错误的早期检测可以改善错误检测时间并且减小错误的严重性。使用两个冗余实例的监测机制被执行,如图12-6所示。图12-6寄存器监控方案为REG指派CFG或者CHECK寄存器。当对REG进行写操作时,冗余寄存器的复制也发生更新。软件上冗余寄存器不可见。REG的保留位不具有存储功能,并且不用于冗余。比较逻辑持续比较两个保存的值,并且给出一个信号,指示比较是否成功。所有比较块的结果被进行或运算从而得到一个单独标志位信息。如果发现比较结果不符,STS.CEF位(配置错误标志位)置位。对于比较逻辑的实时验证,给出强制寄存器不符合位(CTR.FRM_REG)。当冗余寄存器被软件置1,冗余寄存器向左移一位(冗余位0总是被逻辑0值代替),并且代替冗余寄存器值输入给比较逻辑。这使能检查比较逻辑。通过使用移动位模式,软件可以完全检查比较逻辑的全部操作。TC1728灵活的CRC引擎(FCE)用户手册12-11V1.0,2011-12FCE,V1.7寄存器访问保护:适用于LENGTH和CHECK寄存器为了减少对CHECK和LENGTH寄存器的错误配置的可能性(在自动检查被使用的情况下),对CHECK和LENGTH寄存器的写访问必须遵循图12-7所示的流程。图12-7对CHECK寄存器的访问控制为REG指派CFG或者CHECK寄存器。在能够对一个CRC内核的CHECK寄存器中配置一个新值value之前,软件必须首先对CHECK地址写值0xFACECAFE。0xFACECAFE不是写入CHECK寄存器中。下一个写操作将如同正常FPI写操作一样进行。这个过程将在每次软件试图配置新的REG值时被重复。如果软件在写0xFACECAFE后读CHECK寄存器,其返回当前REG内容,而不是0xFACECAFE。对REG的读访问对保护机制没有影响。TC1728灵活的CRC引擎(FCE)用户手册12-12V1.0,2011-12FCE,V1.7FCE中断每个FCECRC内核提供一个内部中断源。每个CRC内核的中断线路相或,其结果发送到实现标准中断节点逻辑和寄存器的FCE中断控制块。当一个FCE中有多个CRC内核时,每个CRC内核的中断线路相或,以向中断控制块提供单一中断源。如果来自FCE的中断被仲裁,FCE中断处理器必须使用位于每个CRC内核的STS状态寄存器的状态信息。每个CRC内核提供如下中断源:.CRC不匹配中断。由CFG.CMI位域控制并可通过状态位STS.CMF(CRC不匹配标志位)观察。.配置错误中断。由CFG.CEI位域控制并可通过状态位STS.CEF(配置错误标志位)观察。.长度错误中断。由CFG.LEI位域控制并可通过状态位STS.LEF(长度错误标志位)观察。.FPI错误中断。由CFG.FEI位域控制并可通过状态位STS.FEF(FPI错误标志位)观察。中断产生规则状态标志位应通过软件向相应位写1来清零。.如果状态标志位被置位,并且新的硬件条件发生,内核没有产生新的中断:STS.FLAG掩码从相同的源产生一个新的中断。如果发生软件访问以清除中断状态位并且在同一周期中硬件试图设置该位,硬件条件赢得仲裁。由于所有中断都是由错误条件引起的,因此应该由一个错误管理软件层处理中断。使用FCE作为加速引擎的软件服务可能不直接处理错误条件,但让上层使用这项服务来进行错误处理。TC1728灵活的CRC引擎(FCE)用户手册12-13V1.0,2011-12FCE,V1.712.5FCE模块接口FCE模块实现了自己的中断节点,进而实现对Tricore和PCP中断控制器的接口。出于保护目的,它使用EINIT信息来控制关键源的配置。EINIT保护在寄存器章节里进行描述。表12-1普遍FCE数字连接信号来自/连接到模块对FCE来说输入/输出EINITSCU输入TC1728灵活的CRC引擎(FCE)用户手册12-14V1.0,2011-12FCE,V1.712.6FCE模块寄存器图12-8和表12-3显示了所有与FCECRC内核相关联寄存器。该节中描述所有FCE内核寄存器的名称。他们应该在产品规范的上下文中使用前缀FCE_。寄存器通过索引来编号,以指示相关的FCECRC内核(m=0-1)。图12-8FCE内核寄存器图12-9展示了FCE模块的寄存器