#calibre #virtuoso#tcl 问题:为什么在PERC的inspect state是空的呢

如图代码如下

img


 为什么在PERC的inspect state是空的呢?是代码哪里有问题吗

img


我的电路图就是三个逻辑门一个in 一个out 一个VDD一个GND,按道理应该报错的啊

这个没有诀窍,建议问同事或者参考相关资料

在PERC (Process, Environment, Resource, Communication) 中,inspect state是用来跟踪和诊断代码的执行状态的。在Tcl脚本中使用inspect语句可以向inspect state中添加数据对脚本的执行状态进行跟踪和诊断。详细解释如下:

  1. 概述

在Tcl中,inspect是一个用于跟踪脚本状态的命令。inspect的工作原理是在inspect state中添加信息。inspect state是一个名为“::inspector”的全局变量,是一个字典类型(dictionary)。inspect命令允许您在脚本执行期间向inspect state中添加数据,并在脚本执行完毕后查看inspect state的内容。

  1. PERC

虚拟模拟器 Virtuoso 是 Cadence 公司的一个集成电路设计工具,支持 Verilog 和 VHDL 编程语言。PERC 是 Virtuoso 的一组 TCL 命令,用于建立和管理 Virtuoso 的设计环境和执行器。在 Virtuoso 中,可以通过 PERC 命令来执行流程。在执行过程中,PERC 会跟踪执行状态并将状态信息保存在 inspect state 中。

  1. inspect state

在 Tcl 中,inspect state 是一个字典变量,用于保存脚本执行过程中的状态信息。在 PERC 中,也可以使用 inspect state 跟踪执行状态。inspect state 可以被 PERC 命令使用,也可以在 Tcl 脚本中使用。可以使用命令“parray ::inspector”来查看 inspect state 的内容。

  1. inspect命令

在 PERC 中,inspect命令用于向 inspect state 添加信息。inspect命令的语法如下:

inspect ?-default? ?-tag tag? data

其中,-default选项表示覆盖(overwrite)inspect状态中指定标签的数据。-tag选项指定将数据添加到inspect状态的特定标签下。data是要添加到inspect状态的数据。inspect命令可以在Tcl脚本中使用,也可以在PERC命令中使用。

  1. 问题原因

如果在PERC的inspect state中没有数据,可能是因为在脚本中没有使用inspect命令或inspect命令添加的数据被覆盖了。可以通过在脚本中使用inspect命令来添加数据来解决此问题。

总之,inspect state是用于跟踪和诊断代码的执行状态的一个字典类型变量。在PERC中,inspect命令可以向inspect state中添加信息。如果在PERC的inspect state中没有数据,则可能是因为没有使用inspect命令或inspect命令添加的数据被覆盖了。

VerticalGridSupportFragment是Android Leanback库中的一个Fragment,用于显示一个垂直网格列表。它可以方便地与其他Leanback库组件如RowsSupportFragment和DetailsSupportFragment集成,以创建实现类似于电视用户界面的应用程序。

使用VerticalGridSupportFragment,首先需要引入Leanback库的依赖,并在布局文件中添加VerticalGridView。例如,可以使用以下代码在XML布局文件中添加VerticalGridView:

<android.support.v17.leanback.widget.VerticalGridView
    android:id="@+id/grid_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

然后,在Activity或Fragment中,可以创建一个VerticalGridPresenter对象,该对象用于设置网格列表的外观和行为。例如,可以使用以下代码创建一个默认的VerticalGridPresenter:

VerticalGridPresenter gridPresenter = new VerticalGridPresenter();

接下来,可以创建VerticalGridSupportFragment,并将其附加到Activity或Fragment中的VerticalGridView上。此外,还需要将Adapter设置为网格列表的数据源。

VerticalGridSupportFragment gridFragment = new VerticalGridSupportFragment();
gridFragment.setPresenter(gridPresenter);
gridFragment.setAdapter(adapter);
getSupportFragmentManager().beginTransaction().replace(R.id.container, gridFragment).commit();

在这里,adapter是一个继承自ObjectAdapter的数据源对象。例如,可以使用ArrayObjectAdapter来创建一个简单的数据源:

ArrayObjectAdapter adapter = new ArrayObjectAdapter(new MyPresenterSelector());
adapter.add("Item 1");
adapter.add("Item 2");
adapter.add("Item 3");

在这里,MyPresenterSelector是一个继承自PresenterSelector的对象,用于选择在网格列表中显示的每个项目的Presenter对象。例如,如果要显示文字列表,可以使用以下Presenter:

class TextPresenter extends Presenter {
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent) {
        TextView view = new TextView(parent.getContext());
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, Object item) {
        TextView view = (TextView) viewHolder.view;
        view.setText((String) item);
    }

    @Override
    public void onUnbindViewHolder(ViewHolder viewHolder) {
        // Do nothing.
    }
}

class MyPresenterSelector extends PresenterSelector {
    @Override
    public Presenter getPresenter(Object item) {
        return new TextPresenter();
    }
}

在这里,TextPresenter是一个继承自Presenter的对象,用于显示每个项目的布局和外观。

最后,可以在Adapter中添加更复杂的数据,例如电影或电视节目。在这种情况下,还需要创建一个相关的Presenter对象和Layout文件。

class Movie {
    private String title;
    private String imageUrl;

    public Movie(String title, String imageUrl) {
        this.title = title;
        this.imageUrl = imageUrl;
    }

    public String getTitle() {
        return title;
    }

    public String getImageUrl() {
        return imageUrl;
    }
}

class MoviePresenter extends Presenter {
    private static final int CARD_WIDTH = 313;
    private static final int CARD_HEIGHT = 176;

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.movie_card, parent, false);
        view.setFocusable(true);
        view.setFocusableInTouchMode(true);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, Object item) {
        Movie movie = (Movie) item;
        ImageView imageView = (ImageView) viewHolder.view.findViewById(R.id.image);
        imageView.setImageResource(R.drawable.default_image);
        new DownloadImageTask(imageView).execute(movie.getImageUrl());
        TextView textView = (TextView) viewHolder.view.findViewById(R.id.title);
        textView.setText(movie.getTitle());
    }

    @Override
    public void onUnbindViewHolder(ViewHolder viewHolder) {
        // Do nothing.
    }

    static class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        private final WeakReference<ImageView> imageViewRef;

        public DownloadImageTask(ImageView imageView) {
            imageViewRef = new WeakReference<>(imageView);
        }

        @Override
        protected Bitmap doInBackground(String... params) {
            try {
                URL url = new URL(params[0]);
                return BitmapFactory.decodeStream(url.openConnection().getInputStream());
            } catch (IOException e) {
                return null;
            }
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            if (bitmap != null) {
                ImageView imageView = imageViewRef.get();
                if (imageView != null) {
                    imageView.setImageBitmap(bitmap);
                }
            }
        }
    }
}

在这里,Movie是一个简单的Java对象,用于表示电影的标题和图像URL。MoviePresenter是一个继承自Presenter的对象,用于显示电影卡片。它还需要一个相应的布局文件movie_card.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:background="@android:drawable/dialog_holo_light_frame">
    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scaleType="centerCrop"
        android:adjustViewBounds="false"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"/>
    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textAppearance="@android:style/TextAppearance.Holo.Large"
        android:gravity="center"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"/>
</LinearLayout>

在VerticalGridSupportFragment中使用MoviePresenter和Layout,可以使用以下代码:

VerticalGridPresenter gridPresenter = new VerticalGridPresenter();
gridPresenter.setNumberOfColumns(NUM_COLUMNS);
gridFragment.setPresenter(gridPresenter);
GridItemPresenter itemPresenter = new GridItemPresenter();
ArrayObjectAdapter adapter = new ArrayObjectAdapter(itemPresenter);
for (int i = 0; i < MOVIE_ITEMS.size(); i++) {
    adapter.add(MOVIE_ITEMS.get(i));
}
gridFragment.setAdapter(adapter);

在这里,GridItemPresenter是一个继承自Presenter的对象,用于显示每个项目的布局和外观。它也需要一个相应的布局文件grid_item.xml,用于显示电影卡片。

通过这种方式使用VerticalGridSupportFragment,可以方便地创建实现类似于电视用户界面的应用程序,包括网格列表和其他Leanback库组件。