2017-09-08 6 views
2

私は、ifとelseブランチで異なるアクションで93kでフローを作成しようとしています。これは、異なる2が空に他のブロックでノードを比較生成が、私がこれまでに見つけた最も近いものは、両方が渡され、失敗したテストすることです:私は何プログラムジェネレータIf/Elseフローコントロール

if @SOME_TEST_ID_PASSED == 1 then 
    { 
    stop_bin "", "fail", , bad, noreprobe, red, 10, over_on; 
    } 
    else 
    { 
    } 
    if @SOME_TEST_ID_FAILED == 1 then 
    { 
    stop_bin "", "fail", , bad, noreprobe, red, 11, over_on; 
    } 
    else 
    { 
    } 
    { 

if_passed :some_test_id do 
    bin 10 
    end 
    if_failed :some_test_id do 
    bin 11 
    end 

はに変換します探しているのは次のようなものです:

if @SOME_TEST_ID_PASSED == 1 then 
    { 
    stop_bin "", "fail", , bad, noreprobe, red, 10, over_on; 
    } 
    else 
    { 
    stop_bin "", "fail", , bad, noreprobe, red, 11, over_on; 
    } 

このタイプのフロー構造を生成する方法はありますか?あなたが示す例のようなもののために

答えて

1

、これはそれをコーディングするための推奨方法です:

test :test1, id: :t1 

bin 10, if_passed: :t1 

bin 11, if_failed: :t1 

かなり明確と原産地ソース・レベルで確認するのは簡単です。実際には、独立したT1_PASSEDT1_FAILEDブランチで生成されますが、これはあなたの好みに合わないかもしれませんが、主なものは論理的に正しいです。

93Kで出力される内部表現が行ベースのTeradyneプラットフォームをターゲットにしやすく、if/elseロジックの概念を実際に持たないためです。したがって、Origenで表現できるものは両方のプラットフォームでコンパイルすることが保証されていますが、V93Kだけが必要な場合はほとんど慰めにならないという利点があります。

一般的に、Origenを使用するほど、生成される実装の心配は少なくなります。実際にCで埋め込みコードを書くときに、生成されたアセンブリを気にしない方法と似ています。 しかし、テスターでデバッグしているときに生成されたコードが従う方が簡単な方が良い場合は、生成された出力をよりきれいにするよう努力しています。

これまで述べてきたように、あなたが望むものに近づくような低レベルのAPIがあります。 、我々がダウンして1つのフラグにしているので、少し良い(所望の出力の観点から)だ

run_and_branch(test1) 
then 
{ 
} 
else 
{ 
    @MY_FLAG = 1; 
} 
if @MY_FLAG == 1 then 
{ 
    stop_bin "", "fail", , bad, noreprobe, red, 10, over_on; 
} 
else 
{ 
} 
if @MY_FLAG == 1 then 
{ 
} 
else 
{ 
    stop_bin "", "fail", , bad, noreprobe, red, 10, over_on; 
} 

:このような何かを生成します

test :test1, on_fail: { set_flag: :my_flag }, continue: true 

if_flag :my_flag do  
    bin 10   
end 

unless_flag :my_flag do 
    bin 11 
end 

: 手動でこのようなフラグを実装することができ私たちはまだ2つの隣接する条件文を1つにまとめることができます。 、そのはまだ実装されていませんFunnily十分https://github.com/Origen-SDK/origen_testers/issues/43

私はそれ以前の今夜を見ていたが、それはすぐに次のようになります。

は、我々は実際に、すでにそのための未解決の問題があります。

その時点で、出力は次のようになります。

run_and_branch(test1) 
then 
{ 
} 
else 
{ 
    @MY_FLAG = 1; 
} 
if @MY_FLAG == 1 then 
{ 
    stop_bin "", "fail", , bad, noreprobe, red, 10, over_on; 
} 
else 
{ 
    stop_bin "", "fail", , bad, noreprobe, red, 11, over_on; 
} 

私は再び意識だけ特定の出力を得るために、原産地のソースを構成することは実際にそれが行われるべき道ではないこと、しかし言うが、この中ですソースコードがそれほど明白ではないので、ソースコードはそれほど複雑ではありません。

+0

スティーブンさんに感謝します。このアップデートにより、出力がはるかに良くなります。私は上の推奨コードに問題があります。 "テストID some_test_idは、次の行のsome_flowフローで参照されていますが、定義されていません:"というエラーが表示されます。 "これは、テストにはidが付いていて、フローにはならず、binコマンドでのみ発生します。 – arkoh

+0

あなたは 'if_failed :: some_test_id'のようなことをやっているようですが、実際には' some_test_id'をテストに割り当てていないようです。 別の質問を開いて問題のソースコードの一部を貼り付け、その下に手が届かない場合はエラーを表示します。 – Ginty

+0

この質問を見る[link](https://stackoverflow.com/questions/46125450/origen-problems-with-flow-branching-using-test-ids) – arkoh

関連する問題