Posts Issued in September, 2022

PMHFの誤解 (2)

posted by sakurai on September 30, 2022 #521

TIのプレゼン資料においてPMHFの誤解の続きです。

本資料では他の例でも全て計算が誤っていました。一貫してPMHF=RF+MPF-Lとしています。

図%%.1
図521.1 本資料の別の計算式

図521.1左の計算は $$ \lambda_\text{RF}+\lambda_\text{MPF,lat}=11+10=21 [FIT] $$ 図521.1右の計算は $$ \lambda_\text{RF}+\lambda_\text{MPF,lat}=1.5+20=21.5 [FIT] $$ のようにそのまま加算を行っていますが、これは誤りです。

これは前述のようにPMHF式の誤り論文$\dagger$(図326.1)から来たものと推測します。このように一か所の"欠陥"が複数に伝播し"カスケード故障"を起こしているところを見ると、システマティックフォールトに対して"安全機構"が働いていないようです。言うまでも無く"安全機構"はこの場合、自分の頭で考えることであり、論文を鵜呑みにすることではありません。

図326.1
図326.1 ある論文中のPMHF式

これが誤りである理由を定性的に説明します。

  1. 故障率に車両寿命をかけると、車両寿命間に故障する故障確率になります。
  2. 故障確率から考えると、SPF及びRFは一点の部品欠陥で車両の故障につながるため、この項はOKです。
  3. ところが、MPF-Lはレイテントフォールトなので、一点のフォールトが起きても直ちに車両の故障とはなりません。つまりMPF-Lを過大に評価していることになります。
  4. 本来はレイテントフォールトは別のフォールトとの組み合わせにより車両故障、つまり安全目標違反となるため、確率としてはもう一つ別の故障率が必要となります。
  5. 本来はこの項は桁違いに小さくなるはずです。

過去記事でも同じことを指摘しています。

LFは単一ではVSGを引き起こさないため、アイテムのVSG確率としては、他のフォールトとのDPFとして計算しなければなりません

以上から、単一点(シングルポイント)及び残余(レシデュアル)の故障率と、レイテントフォールトの故障率を単純に加えることは誤りです。


左矢前のブログ 次のブログ右矢

PMHFの誤解

posted by sakurai on September 29, 2022 #520

TIのプレゼン資料においても同様のPMHFの誤解を発見しました。これも以前の記事で指摘したように、PMHF式の誤り論文$\dagger$が波及したのかもしれません。図520.1は表紙です。

図%%.1
図520.1 TIのプレゼン資料(表紙)

資料中のPMHF計算の誤りを図520.2に示します。

図%%.2
図520.2 TIのプレゼン資料(PMHF計算)

図520.2の部分を拡大します。

図%%.3
図520.3 TIのプレゼン資料(PMHF計算、当該部分の拡大)
図520.1では $$ \lambda_\text{RF}+\lambda_\text{MPF,lat}=11+55=66 [FIT] $$ のようにそのまま加えていますが、これは誤りです。

$\dagger$Y. Chang, L. Huang, H. Liu, C. Yang and C. Chiu, "Assessing automotive functional safety microprocessor with ISO 26262 hardware requirements," Technical Papers of 2014 International Symposium on VLSI Design, Automation and Test, Hsinchu, 2014, pp. 1-4, doi: 10.1109/VLSI-DAT.2014.6834876.


左矢前のブログ 次のブログ右矢

posted by sakurai on September 28, 2022 #519

表519.1に弊社代表の投稿した論文の実績と予定を示します。

表519.1 PMHF論文の実績と予定表
No. 学会 論文タイトル 内容 採択/未
1 2017 ISPCE Generalized formula for the calculation of a probabilistic metric for random hardware failures in redundant subsystems PMHF式を初めて冗長系に拡張 採択
2 2020 RAMS Generic Equations for a Probabilistic Metric for Random Hardware Failures According to ISO 26262 PMHF式を初めて理論的に導出 採択
3 2021 RAMS A Framework for Performing Quantitative Fault Tree Analyses for Subsystems with Periodic Repairs 理論的に導出したPMHFのFTA構成法 採択
4 2022 RAMS Formulas of the Probabilistic Metric for Random Hardware Failures to Resolve a Dilemma in ISO 26262 LFMと整合するPMHF式の導出 採択
5 2023 RAMS Stochastic Constituents for the Probabilistic Metric for Hardware Failures 確率構成要素を用いたIFRモデルの証明 レビュー修正中採択
6 2024 RAMS Inaccuracies in the probabilistic failure metric (PMHF) formula of ISO 26262 2nd editionの誤りと正確なPMHF式
7 2025 RAMS 未定 Q(t)の導出
8 2026 RAMS 未定 EOTTIの導出


左矢前のブログ 次のブログ右矢

posted by sakurai on September 27, 2022 #518

本日(2022/9/27)レビュー結果を受領しました。

表518.1はRAMS 2023正式採択までのマイルストーンであり、今後適宜更新します。

表518.1 RAMS 2023へのマイルストーン
期限 マイルストーン 状態
2022/8/1 論文、プレゼン投稿締め切り(名前、所属無し版) 投稿済
2022/9/12022/9/27 第1回論文、プレゼン資料査読コメント受領 受領済
2022/10/9 改訂版論文、プレゼン投稿締め切り(名前、所属無し版)
2022/?/? 最終査読コメント受領
2022/10/10 学会出席登録締め切り 登録済
2022/10/10 最終論文、プレゼン投稿締め切り(名前、所属有り版)

今年のRAMSはレビューが遅れ、当初9/1までにレビュー結果を受領する予定が、途中で確認したところ9/Mとのことでした。実際にはさらに遅れ、本日9/27に受領しました。ところが改訂版の締め切りは10/9と延期していないようです。

ただし、レビュー結果のコメントは2件とも非常に評価が高く、それは良かった点です。レビュー#1はコメントが無いようです。

Review # 2
Comments for the AUTHOR:
Paper is well written and acceptable.
(以下省略)

Review # 3
Comments for the AUTHOR:
The paper is very well-written, synthetic and interesting. It provides new developments concerning the probabilistic metric for random hardware failures formula present in the first two editions of the standard ISO 26262 on functional safety of electrical and/or electronic systems within road vehicles.
(以下省略)


左矢前のブログ 次のブログ右矢

posted by sakurai on September 27, 2022 #517

完成したゲームのオープニングからのゲーム開始画面です。動画変換フレームレートの関係で、ゼロの点滅がハッキリと再生されませんが、実際にはきれいに点滅しています。

図%%.1
図517.1 オープニングアニメーションシーケンス

実行のシーケンス

  • 得点表(Score Advance Table)アニメーション表示
  • Fボタンを押す
  • "PUSH ONLY 1PLAYER BUTTON"を表示、CREDIT=01
  • Sボタンを押す
  • "PLAY PLAYER<1>"を表示、CREDIT=00、SCORE<1>をゼロにし、規定回数点滅
  • ゲームスタート

図513.5
図513.5 ボタン配置図

左矢前のブログ 次のブログ右矢

posted by sakurai on September 26, 2022 #516

Y字リプレースアニメーションのソース

Y字リプレースアニメーションのソースを示します。Y字リプレースアニメーションもFボタンにより中断するため、各所でFボタンを見ています。

function Stmt replaceY;
   return (seq
      // from right to left
      for (i <= 228; i >= 142; i <= i - 2) seq
         copyArea((pack(i)[1] == 1'b1) ? 68 : 84 , 32, i, 67, 10, 8);
         wait_timer(`TICK_WAIT3);
         if (fbutton) break;
      endseq // for
      if (fbutton) break;
      // from left to right
      for (i <= 136; i <= 226; i <= i + 2) seq
         copyArea((pack(i)[1] == 1'b1) ? 75 : 91 , 107, i, 67, 16, 8);
         wait_timer(`TICK_WAIT3);
         if (fbutton) break;
      endseq // for
      eraseArea(226, 67, 16, 8);
      wait_timer(`TICK_WAIT32);
      if (fbutton) break;
     // from right to left
     for (i <= 226; i >= 136; i <= i - 2) seq
        copyArea((pack(i)[1] == 1'b1) ? 77 : 93 , 117, i, 67, 16, 8);
        wait_timer(`TICK_WAIT3);
        if (fbutton) break;
      endseq // for
      wait_timer(`TICK_WAIT32);
      if (fbutton) break;
      eraseArea(141, 67, 9, 8);
      wait_timer(`TICK_WAIT32);
      if (fbutton) break;
   endseq);
endfunction

これだけでなく、タイマールーチンの中でもFボタンによる中断を見ていますが、ちょっとやり過ぎのようです。実際には多少間引いても体感に影響しないと思います。


左矢前のブログ 次のブログ右矢

posted by sakurai on September 23, 2022 #515

オープニングアニメーションのソース

オープニングアニメーションのソースを示します。オープニングアニメーションはFボタン(コイン投入の模擬)により中断するため、各所でFボタンを見ています。

function Stmt openingAnimation;
   return (seq
      // Opening Animation
      foa <= True;
      eraseArea( 0, 41, 255, 199); // erase screen
      eraseArea(25,242, 5, 7); // erase zanki
      stringS1; // PLAY ...
      if (fbutton) break;
      wait_timer(`TICK_WAIT64);
      if (fbutton) break;
      stringS2; // *SCORE ...
      if (fbutton) break;
      wait_timer(`TICK_WAIT32);
      if (fbutton) break;
      stringS3; // =? MYSTERY ...
      if (fbutton) break;
      wait_timer(`TICK_WAIT64);
       if (fbutton) break;
      replaceY; // ^ -> Y
      if (fbutton) break;
      wait_timer(`TICK_WAIT64);
      if (fbutton) break;
      foa <= False;
   endseq);
endfunction

左矢前のブログ 次のブログ右矢

posted by sakurai on September 22, 2022 #514

オープニングアニメーションの追加

テスト用のソースを示します。コンパイル時間短縮のため、ゲーム部分をカットしています。

// メインフロー
Stmt main = seq
   while (True) seq
      while (!fbutton) seq
         openingAnimation; // Fボタンによりブレーク
      endseq // while
      openingDisplay;      // 表示のみ、ボタンを待たない
      await(sbutton);        // Sボタンによりブレーク
      openingDisplay2;    // タイマーによりブレーク
      // game start
   endseq // while
endseq;

// CREDIT 01, "PUSH ONLY 1PLAYER BUTTON"
function Stmt openingDisplay;
   return (seq
      eraseArea( 0, 41, 255, 199); // erase screen
      stringS5; // PUSH ONLY ...
      copyArea(10, 162, 217, 241, 5, 7); // CREDIT 00->01
   endseq);
endfunction

// CREDIT 00, "PLAY PLAYER<1>, 00000"
function Stmt openingDisplay2;
   return (seq
      eraseArea( 0, 41, 255, 199); // erase screen
      stringS6; // PLAY PLAYER<1>
      copyArea(2, 162, 217, 241, 5, 7); // CREDIT 01->00
      for (i <= 1; i < 15; i <= i + 1) seq
         // erase zero
         eraseArea(40, 25, 37, 7);
         wait_timer(`TICK_WAIT4); // wait 66.66msec
         stringS7; // 00000
         wait_timer(`TICK_WAIT4); // wait 66.66msec
      endseq // for
   endseq);
endfunction

左矢前のブログ 次のブログ右矢

posted by sakurai on September 21, 2022 #513

オープニングアニメーションの追加

この動画の最初の部分を参考にして、オープニングアニメーションを作成します。

  1. インベーダの種類や点数の紹介、と同時に逆さYを引っ張って行き正立Yに入れ替えます。アニメーションがメインなので、これをopeningAnimationシーケンスと呼び、同名の関数により実行します。Fボタンによりコイン投入を模擬します。
    図%%.1
    図513.1 openingAnimation画面
  2. コインを投入すると、"PUSH ONLY 1PLAYER BUTTON"と表示され、CREDITが+1されます。アニメーションは無いため、これをopeningDisplayシーケンスと呼び、同名の関数により実行します。Sボタンを待ちます。
    図%%.2
    図513.2 openingDisplay画面
  3. Sボタンを押すと、"PLAY PLAYER<1>"と表示され、CREDITが-1されます。同時に得点が"00000"となり、点滅します。これをopeningDisplay2シーケンスと呼び、同名の関数により実行します。
    図%%.3
    図513.3 openingDisplay画面1
    図%%.4
    図513.4 openingDisplay画面2
  4. ゼロ点滅を規定回数実行すると自動的にゲームを開始します。

図513.5にSボタンとFボタンの配置を示します。

図%%.5

図513.5 ボタン配置図

左矢前のブログ 次のブログ右矢

posted by sakurai on September 20, 2022 #512

テストベンチ

テストベンチは変わりません。

Tb.bsv

import StmtFSM::*;
import Uart::*;

(* synthesize *)
module mkTb();
      Uart_ifc uart <- mkUart();

      Stmt s = seq
            delay(8);
            uart.load(8'h55);
            uart.load(8'haa);
            uart.load(8'hc3);
            uart.load(8'h3c);
            await(uart.done());
            $finish;
      endseq;
      
      mkAutoFSM(s);

endmodule

Bsimシミュレーション

Bsimシミュレーションのコマンドは次のとおりです。

$ bsc -u -sim Tb.bsv; bsc -sim -e mkTb -o Tb.exec; ./Tb.exec -V bsim.vcd; gtkwave -A bsim.vcd

以下にBsimシミュレーション結果を示します。意外なことに明示的にdone信号を書いたにも関わらず、シミュレーションのダンプの中にdone信号がありませんでした。

図%%.1
図512.1 Bsimシミュレーション波形

テストベンチ内でレジスタにuart.doneを格納するようにしたら、インタフェースにuart.doneが現れました。awaitで使用するくらいでは削除され、レジスタに取って初めて残すようです。

図%%.2
図512.2 Bsimシミュレーション波形

Verilogシミュレーション

Verilogシミュレーションにおいては、モジュール(mkUart.v)、それをドライブするテストベンチ(mkTb.v)の上位に最上位(top.v)を配備します。これはクロックやリセットを供給するモジュールですが、Bsimの場合はシステムから暗黙にクロックやリセットが供給される一方、Verilogでは供給されないためです。

top.v

`timescale 1ns/1ns
module top();
      /*AUTOREGINPUT*/
      // Beginning of automatic reg inputs (for undeclared instantiated-module inputs)
      reg      CLK;        // To mkTb_inst of mkTb.v
      reg      RST_N;        // To mkTb_inst of mkTb.v
      // End of automatics
      /*AUTOWIRE*/
      mkTb mkTb_inst(/*AUTOINST*/
      // Inputs
      .CLK    (CLK),
      .RST_N    (RST_N));

      initial begin
            RST_N = 1'b0;
            #10;
            RST_N = 1'b1;
      end
      initial begin
            CLK = 1'b0;
            forever begin
        #5 CLK = ~CLK;
            end
      end
      initial begin
            \$dumpfile("verilog.vcd");
            \$dumpvars;
      end
endmodule // top

Verilogシミュレーションのコマンドは次のとおりです。

$ bsc -u -verilog Tb.bsv; iverilog top.v mkTb.v mkUart.v -o ./mkTb.exev; ./mkTb.exev; gtkwave -A verilog.gtkw

Verilogシミュレーションのほうには当然ですが、uart.done信号が存在します。

図%%.3
図512.3 Verilogシミュレーション波形

左矢前のブログ 次のブログ右矢


ページ: