功能安全safety的常见处理及评估

0.GIC600AE模块的全部fusa手段

GIC600AE(auto eHance)是车载芯片处理中断的模块,对功能安全要求较高,这里以此为例说明都采取了哪些功能安全的手段

  1. 所有组件采用复制形式,并用lock-step方法保护
  2. SRAM采用ECC校验
  3. 4个AXI4-stream接口采用部分复制(partial duplicattion):控制逻辑完整复制并用CRC校验,payload采用8bit校验信息
  4. PPI(Private Peripheral Interrupts)和SPI(Shared Peripheral Interrupts)采用parity校验
  5. Q-Channel采用parity校验
  6. 支持systematic fault watchdog,用于监测各组件是否正常工作
  7. 时钟&复位采用复制方法保护,在GIC600AE内部检测异常
  8. MBIST接口复制
  9. DFT/ATPG接口复制

1.寄存器和接口常使用parity

        parity校验常见用于module的IO校验和寄存器配置校验。

        奇偶校验是一种最简单的错误检测方法,实现复杂度低,但是成本较高,一般是对8bit数据增加1bit校验位,而且只能检测到奇数个数据翻转,但不能纠错。当然可以对16bit甚至更高的数据位宽增加1位校验位,比如8:1/16:1/32:1,但这样以来检测效果就比较差。

        目前parity校验主要用在配置寄存器的校验。一个寄存器域为32bit,32bit里面可以有多个配置项,做parity校验时是同时以配置项和8bit为边界进行的。

        设两个配置项如下:

always @(posedge clk or negedge rst_n) begin
    if (rst_n == 1'd0) begin
        cfg_0 <= 7'ha;
        cfg_1 <= 11'h2ff;
    end
    else if (apb_write == 1'd1 && apb_waddr == XXX) begin
        cfg_0 <= apb_wdata[6:0];
        cfg_1 <= apb_wdata[17:7];
    end
end

        同时按8bit和配置项边界一共生成4个parity校验位:

always @(posedge clk or negedge rst_n) begin
    if (rst_n == 1'd0) begin
        cfg_0_parity    <= 1'd0;            //parity of rst value of the cfg_0 is 0
        cfg_1_parity[0] <= 1'b1;
        cfg_1_parity[1] <= 1'd0;            //parity of rst value of the cfg_1[8:1]=8'hff is 0
        cfg_1_parity[2] <= 1'd1;            //parity of rst value of the cfg_1[10:9]=2'b01 is 1
    end
    else if (apb_write == 1'd1 && apb_waddr == XXX) begin
        cfg_0_parity    <= ^apb_wdata[6:0];
        cfg_1_parity[0] <= apb_wdata[7];
        cfg_1_parity[1] <= ^apb_wdata[15:8];
        cfg_1_parity[2] <= ^apb_wdata[17:16];
    end
end

assign cfg_0_parity_err    = (cfg_0_parity    != (^cfg_0));
assign cfg_1_parity_err[0] = (cfg_1_parity[0] != (^cfg_1[0]));
assign cfg_1_parity_err[1] = (cfg_1_parity[1] != (^cfg_1[8:1]));
assign cfg_1_parity_err[2] = (cfg_1_parity[2] != (^cfg_1[10:9]));

        由上面代码实现的可以看出来,这个parity只是校验了cfg_0/1锁存apbwdata的正确性,校验点比较窄。

        其compare结构如下:上面绿色为正常数据通路,下面橙色为parity之路。可以看出来两个之路的区别就是异或的组合逻辑一个在寄存器之前一个在寄存器之后。

        当然橙色支路可以完全copy绿色支路,但是就存在两个额外问题需要考虑:

  1. 完全重复的设计,有可能会被综合优化掉
  2. 橙色支路的位宽会增加

2.数据通路使用CRC(checkSum)

        CRC用于检测数据传输中的错误【常用于数据通路的错误检测】,CRC的校验位只和生成多项式阶数有关,设CRC的生成多项式为n阶,则校验位为n-1位。

待检数据          :D[255:0]
CRC生成多项式     :X[8:0]
校验位            :R[7:0] = {D[255:0], 8'd0} % X[8:0]
则完整的校验数据为 :DA[263:0]= {D[255:0], R[7:0]}

        如上图所示在数据传输路径上用R0点的CRC值和R1点的CRC值进行了check,来保证传输过程中数据D没有发生错误翻转。

3.mem添加ECC

        ECC 校验能纠正单比特错误和检测双比特错误,ECC需要更多的计算和存储资源。ECC通常使用在存储设备中,可以使用冗余信息来检测错误,并尝试使用该信息纠正任何错误。

        ECC是来自与parity校验的。分别设如下几个参数:

DATA_WIDTH :待编码数据位宽
PAR_WIDTH  :ECC校验位宽
EXDATA_WIDTH :扩展数据位宽
DIV_WIDTH:水平奇偶校验位宽

        ECC的encode过程如下:

1.先将D[DATA_WIDTH-1:0]扩展到EX_TOTAL_WIDTH,exdata=
  {{(EX_TOTAL_WIDTH-DATA_WIDTH)1'd0}, D}
2.确定PAR_WIDTH个位宽为EX_TOTAL_WIDTH的exdata_mask[PAR_WIDTH-1:0][EX_TOTAL_WIDTH-1:0]
3.用exdata和exdata_mask[n]来编码产生第n bit ECC码字,过程如下:
    3.1 将EX_TOTAL_WIDTH的exdata/exdata_mask[n]按DIV_WIDTH分为(EX_TOTAL_WIDTH/DIV_WIDTH)行
    3.2 对每一行DIV_WIDTH位宽的exdata[DIV_WIDTH*m+:DIV_WIDTH]进行mask,
        即exdata_masked[DIV_WIDTH*m+:DIV_WIDTH]=exdata[DIV_WIDTH*m+:DIV_WIDTH] & 
        exdata_mask[n][DIV_WIDTH*m+:DIV_WIDTH] 
    3.3 对exdata_masked数据做parity校验,得exdata_masked_parity[m] = 
        ^exdata_masked[DIV_WIDTH*m+:DIV_WIDTH];
    3.4 共得到 0<=m<(EX_TOTAL_WIDTH/DIV_WIDTH)个exdata_masked_parity,
        将所有的exdata_masked_parity在做异或得到第n bit ECC[n]

循环第三步即可得到所有的ECC[PAR_WIDTH-1:0]

        其中PAR_WIDTH/EXDATA_WIDTH/DIV_WIDTH都是和DATA_WIDTH位宽来确定;而exdata_mask[PAR_WIDTH-1:0][EX_TOTAL_WIDTH-1:0]也由LUT表格来确定。

        关于ECC decode不在这里细说。1bit error纠正是通过decode查询错误码来纠错的,这里也不细说。 

4.重要控制逻辑使用logicCopy

注意logicCopy是怎么做的为什么要错拍比较,不错拍比较会怎么样,以框图的形式给出

下图的待测逻辑单元(组合+时序),可以是简单的控制逻辑,复杂的计算逻辑或者是一个功能完善的module都是可以的。

框图中绿色部分是normal通路【primary通路】,橙色是为了check的冗余通路【shadow通路】。采用的是错拍check,实际上这并不是必须的。比如我们可以在D0处,直接copy两份DUT,然后在DUT输出直接check。这时需要后端保证DUT和DUT copy都是不会被优化掉的。

5.lock-step用在哪里

锁步核(lock-step core)、软件冗余设计与可分核(Split-Lock)的比较-CSDN博客

 5.1 lock-step core(锁步核)

这种方法已经在微控制器和复杂度较低的微处理器领域经过多年的成功验证。

5.2 Redundant execution(冗余执行)

相比于5.1节的冗余CPU,对于ARM Acore这种大核,使用冗余的代价太大,对于高性能处理器来说往往复杂度高、不确定性大,实现lock-step很难,就发展出了冗余执行的方法,也就是一个任务/程序  通过软件调度执行多次,然后比对多次执行的结果是否一致。

假设两个独立应用执行在两个不同的CPU和或者是两个虚拟机上,这两个应用的结果输出到一个被称为“safety island” 的核中,由这个核负责决策和执行。这个核使用单独的时钟和电源,且有很高的安全性能。这种方案提升了系统复杂度,但是软件执行更加灵活。lock-step的比较机制是固化在芯片中的,而“safety island” 是一个单独的核。
这个方案在需要高安全性和高性能的场景可能会得到广泛应用。

5.3 Split-Lock(可分核)

以上两种方案可有优劣,ARM在 Cortex-A76AE上集成了一种叫 ‘Split-Lock’的技术来集成上述两种方案的优点。‘Split-Lock’可以被配置成两种模式:‘split mode’,两个CPU可以独立执行不同的程序或任务; ‘lock mode’ ,两个CPU执行锁步模式。
这种技术可以支持如果两个CPU中的一个损坏,可以在降级模式下继续运行,即只运行好的那个CPU。这对自动驾驶系统是很重要的能力。

6.DDR的inlineEcc

这个第三节的MEM Ecc的处理是类似的,就是目前来说对于存储器,最好的校验都是ECC

7.安全岛是干嘛的?safety island

安全岛一般是达到ASILD的MCU来处理。现在的车载芯片解决方案多是SOC+外挂MCU的方式,也出现了SOC内集成MCU的方案

问:安全岛一般有哪几种不同的实现方式?

答:现在很多芯片厂商都会宣称自己的芯片中有“安全岛”,但其实每家的概念都不完全统一。有的仅仅是在芯片中集成了带有“双核锁步”机制的Arm Cortex R-52安全系列内核;有的则是慢慢将外挂的安全MCU集成到SOC芯片中,可以认为这里的"安全内核"及周边满足安全需求设计的安全存储,安全外设,安全总线等一系列IP的集合称为“安全岛”,广义上就是一个安全的MCU被封装到了SOC中;

问:安全岛到底是为实现哪些需求而诞生的?

在当下日益复杂的针对自动驾驶方案或者区域控制的SOC方案中,除了利用NPU,GPU,DSP等高性能内核对特定任务的快速处理以外,还需要一个可以保障计算任务安全,且实时性高的内核去处理一些较为通用的指令,并且相关外设接口在和外界信息交互的同时,也能保证数据在端口及通路上的安全性。安全岛就是这样一个可以提供给软件安全任务执行的一个物理环境。

上面的两问两答摘自车规级芯片中的安全岛是什么?用来干什么的? - 知乎

也可以参看本人转载

https://blog.csdn.net/cy413026/article/details/135679237

8.STL验证是什么

        Soft test library STL 软件测试库 是一种基于软件的安全机制,可以成为汽车、工业和其他需要运行应用程序且必须展示功能安全性的市场的安全相关设计的重要组件。 STL 用于测试永久性硬件故障,例如硬件功能逻辑内的卡在 0 或卡在 1 的测试,并且可以由IC或IP供应商开发为独立的软件安全元素(SW SEooC)。

        需要理解的是 STL是基于软件控制的一种安全机制,它不是表示或者保证软件程序正确性的一种机制。过程应该理解为通过软件控制硬件进行相关测试,并上报硬件问题。

        常见的操作有:

  1. 将subsys的某一段覆盖率很高的pattern固化到ROM,软件在检测到空闲或其他合适时间调度该pattern自动加载到subsys运行,并将结果和ROM中的golden结果比较
  2. soc的开机自检程序运行
  3. mem的BIST测试

        整芯片包含很多功能安全,可测性的相关测试程序,STL就是将这些程序软件管理起来,周期的去运行自检的过程。

        STL和Dual-Lock和其他Logic BIST还是有一些区别的提供STL實作內建自我測試 CPU力保汽車/工業功能性安全 | 新通訊这篇文章给了一些说明。

下面这一段摘自

最先进的软件测试库 (STL) 和 ASIL B:真理、神话和指导_芯片功能安全的软件测试库stl-CSDN博客

8.1 开发 STL 时通常考虑的安全和功能要求

  • 安全

    达到技术安全概念要求的 STL 假定的 DC 目标,或 IP 提供商假定的 STL 的 DC 目标。
    报告故障信息,包括从测试到系统级应用程序的任何已识别故障。
    避免干扰应用软件。
    为受保护 IP 定义的诊断测试时间间隔 (DTTI) 内的执行时间。
    在运行时维护的 IP 的使用假设。

  • 功能

    灵活的测试深度,可在特定时间点运行选择的测试和测试数量。
    能够通过选择不同的测试集来针对特定逻辑块进行测试。
    适应不同的IP配置。
    在一般总内存占用量的定义允许百分比内的代码大小。
    可重定位取决于系统内存映射。
    可中断,具有最大定义的延迟。

    总的来说,STL 可以提供一种强大而重要的方法来实现对永久性故障的诊断覆盖,同时最大限度地减少对系统可用性的影响。


8.2 开发 STL 架构时要考虑的原则是:

  • 1. 简化集成:
  • 调用 STL 的简单应用程序编程接口 (API) 的可用性。
  • 根据系统级技术安全概念,能够选择在可用时间预算内运行所需的特定部件和 STL 的部件数量。
  • 使客户能够执行自己的数字和故障模拟的功能。
  • 2. 在任何特定时间根据所选配置和可用内存灵活选择测试。
  • 3. 附加硬件应限制在增加诊断覆盖率所需的最低限度内。
     

9.safety的诊断覆盖率DC怎么评估

10.safety的分级

11.硬件故障的指标有哪些

失效模式影响和诊断分析(FMEDA)是进行安全分析的必要工作成果

考虑为何mem和DDR用ECC?数据通路用CRC?寄存器用parity?

从复杂度和实现代价来说明。

12. BIST与fusa

上面一段话,其实表明了DFT的MBIST和LBIST是可以作为fusa的检测手段,或者说可以纳入功能安全检测范围的。作为DFT和fusa检测两者运行时机不一样。DFT在生产筛片或者每次上电做一些测试,而FUSA应该是周期性的进行检测,它们可以复用相同的一段逻辑和硬件资源。

13.safety相关产品介绍

新思科技(Synopsys Inc.) - 新闻中心

### 回答1: 功能安全是指在特定的工作条件下,确保机器、设备或系统只执行其预期功能的能力。在工业领域,由于机器和设备的操作涉及到人员的生命安全,功能安全显得尤为重要。我们采用了安全机制和安全措施,以确保机器、设备或系统的可靠性、稳定性和安全性。 安全机制是指在系统中实施的控制、操作和监测功能,以确保在发生紧急情况时,自动地启动安全措施以防止任何危害。例如,在一个危险的工业环境中,当机器发生故障时,安全机制能够立即打开断路器停止机器运转,从而保护操作员的安全。 安全措施是指在机器、设备和系统中采取的特殊设计、改进和维护措施,以增强其安全性。例如,我们可以将机器和设备设置为只有经过特定人员授权才能操作,以确保只有经过适当培训的人员才能接触机器,从而防止不必要的危险发生。 在现代工业生产环境中,安全机制和安全措施的使用不仅有助于保护工作人员的生命和健康,还有助于提高生产效率和减少损失。因此,我们必须不断努力改进这些措施,以确保功能安全得到持续改善和优化。 ### 回答2: 功能安全是指产品或系统在正常运行过程中对人员、财产和环境造成危害的概率能够被接受的程度。实现功能安全主要依靠设计安全机制和采取安全措施。 安全机制是指产品或系统在设计阶段针对潜在危险场景进行安全策略的选择和设计,以保证在故障模式和失效情况下依然能够保证产品或系统的安全。 安全措施是指在安全机制的基础上,针对具体场景提出的具体安全实现方案。例如,在汽车行业,为避免碰撞事故,我们可以采取装配碰撞传感器、制动辅助系统、主动刹车系统等多种安全措施。 简而言之,功能安全通过设计安全机制和采取安全措施来避免产品或系统在正常工作过程中造成危害。只有这样,我们才能保证在日常生产、生活活动中保障人员、财产和环境安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值