1

私の検証環境では、同じフィールドを持つ 3 つの異なるレジスタがload_0ありload_1ますload_2。これで、レジスタごとに同じ関数が 3 回複製され、1 行だけが異なります。

duplicated_func_0() {
    value = timer_regs.load_0; //This is the only different line (in duplicated_func_1 - load_1 is substituted

    ...

};

同じ関数を 3 回複製するよりも、変数名 (インデックスのみが異なる) にアクセスするより良い方法はありますか? このようなもの:

not_duplicated_func(index : uint) {
    value = timer_regs.load_%x; //Is there a way to put the input index in the variable name instead of %x?

};

あなたが提供できるどんな助けにも感謝します。

4

1 に答える 1

1

内部では、 、 、およびのtimer_regs3 つの変数を定義するのではなく、それぞれの型のリストを定義します。load_0load_1load_2

extend TIMER_REGS vr_ad_reg_file {
  loads[3] : list of TIMER_LOAD vr_ad_reg;
};

このようにして、インデックスによって各レジスタにアクセスできます。

既存のレイアウトを変更できない場合は、各リスト項目を既存のインスタンスと同じになるように制約してください。

extend TIMER_REGS vr_ad_reg_file {
  loads[3] : list of TIMER_LOAD vr_ad_reg;
  keep loads[0] == load_0;
  keep loads[1] == load_1;
  keep loads[2] == load_2;
};
于 2014-09-17T11:30:10.207 に答える