2016-10-03 11 views
3

systemvilogでuvmの登録フィールドを名前で取得しようとしています。正規表現を使用して、フィールド名にパターンを使用できるようにしたい。ここに私のレジスタフィールドである:get_field_by_nameを使用してフィールドを検索する際にregexを使用する

YY_XXX_2_N 
ZZ_BBB_3_N 
UU_AAA_8_N 
MM_CCC_4_N 
YY_WWW_9_N 

あなたはすべてのレジスタフィールドが_Nで終わるされて見ることができるように、私はフィールドを登録取得するには、次のコードを使用:

field=env.my_regmap.get_field_by_name("_N$"); 

ので、私はこのコードを取得したいです提供されたパターンと一致するレジスタフィールド。上記のコードで、私は次のエラーを取得しています:

reporter [RegModel] Unable to locate field '_N$' in block 'my_regmap' 

このような状況で正規表現を使用する方法があるかどうか、私は疑問に思います。

ありがとうございます!

答えて

5

get_field_by_name()は、1つのハンドルをフィールドに返すために完全一致が必要です。あなたがする必要があるのは、get_fields()を使用してフィールドのリストを作成し、次にSVのfind()を使用することです。

uvm_field_reg all_fields[$], selected_fields[$]; 

all_fields = get_fields(); 
selected_fields = all_fields.find(item) with (uvm_re_match("*_N",item.get_name)); 
+0

ありがとうございます!それは動作しますが、uvm_re_match関数が(!uvm_re_match( "。* _ N $"、item.get_name()));)で 'selected_fields = all_fields.find(item) –

1

SystemVerilogではregexを直接使用することはできませんが、UVMはregex.hライブラリのregexec関数を使用できるようにするDPI関数uvm_re_matchを提供しています。この詳細についてはhereをご覧ください。

あなたはget_field_by_nameへの引数として、この機能を使用することはできませんが、get_fieldsを呼び出すことによって、レジスタからすべてのフィールドを取得し、uvm_re_matchで各フィールドを確認することができます。

関連する問題