2

我正在尝试在 if 和 else 分支中使用不同的操作在 93k 上创建一个流。到目前为止,我发现的最接近的事情是测试通过和失败,尽管这会生成两个不同的带有空 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
  {
  }
  if @SOME_TEST_ID_FAILED == 1 then
  {
    stop_bin "", "fail", , bad, noreprobe, red, 11, over_on;
  }
  else
  {
  }
  {

我正在寻找的是看起来更像这样的东西:

  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;
  }

有没有办法生成这种类型的流结构?

4

1 回答 1

1

对于您展示的示例,这是推荐的编码方式:

test :test1, id: :t1

bin 10, if_passed: :t1

bin 11, if_failed: :t1

这在 Origen 源代码级别非常清晰且易于查看。确实,这将生成独立T1_PASSEDT1_FAILED分支,这可能不符合您的口味,但逻辑上是正确的,这是主要的。

我们这样做的原因是因为在 93K 上产生该输出的内部表示更容易针对基于行且没有 if/else 逻辑概念的 Teradyne 平台。因此,您将获得这样的好处,即您可以在 Origen 中表达的任何内容都可以保证为这两个平台编译,但如果您只需要 V93K,这可能就没有什么安慰了。

通常,您使用 Origen 的次数越多,您对生成的实现就越不关心,这与您在 C 中编写嵌入式代码时并不真正关心生成的程序集的方式非常相似。但是,如果生成的程序集会更好当您在测试仪上进行调试时,代码更容易理解,因此我们一直在努力使生成的输出更清晰。

说了这么多,有一个较低级别的 API 将接近您想要的。您可以像这样手动实现标志:

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

这将产生如下内容:

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;
}

这稍微好一点(从所需的输出角度来看),因为我们只有一个标志,但我们仍然有两个相邻的条件可以/应该折叠成一个。

我们实际上已经为此打开了一个问题: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;
}

不过,我要再说一遍,有意识地构建 Origen 源代码只是为了获得特定的输出并不是真正应该这样做的方式,但在这种情况下,通过更明确地说明源代码并不会复杂得多。

于 2017-09-08T22:09:51.590 回答