FSM状態のような列挙型をstd_logic_vectorまたはintegerに変換することが可能かどうかを知りたい。私はFSMのためのOSVVMを使ってテストベンチをやっています。私はscoreboardパッケージを使って期待される状態と実際の状態を自動的に比較したいと思います。enumタイプをstd_logic_vectorに変換するVHDL
ありがとうございます! 、使用を整数に変換するにはたぶん、このような
FSM状態のような列挙型をstd_logic_vectorまたはintegerに変換することが可能かどうかを知りたい。私はFSMのためのOSVVMを使ってテストベンチをやっています。私はscoreboardパッケージを使って期待される状態と実際の状態を自動的に比較したいと思います。enumタイプをstd_logic_vectorに変換するVHDL
ありがとうございます! 、使用を整数に変換するにはたぶん、このような
:
IntVal := StateType'POS(State) ;
そこから、STD_LOGIC_VECTORに変換するのは簡単ですが、私はとき、整数で作業することを好みますstd_logic_vectorよりもストレージ容量が小さいため、可能です。検証のために、値が32ビット未満のときに整数についてもっと考え始めると簡単になります。
検証のためにSlv8Val := std_logic_vector(to_unsigned(IntVal, Slv8Val'length)) ;
、私は自由にnumeric_std_unsigned使用するので、変換は簡単です:あなただけがすることができますnumeric_std使用して、STD_LOGIC_VECTORとしてそれを必要とする場合
イベントで
Slv8Val := to_slv(IntVal, Slv8Val'length) ;
ます整数を持ち、それを列挙値に戻したい場合は、 'VAL'を使用できます。
State := StateType'VAL(IntVal) ;
OSVVMでは、解決された値を持つレコードを使用してトランザクションインタフェースを作成します。整数の解決型(osvvm.ResolutionPkg.integer_max)があります。列挙された値は、 'POS(私たちが入れたもの)と' VAL(私たちが出したもの)を使ってレコードに転送します。
「VALとVALUE」を混同しないでください。 'VALUEは文字列を' IMAGE 'の反対の値に変換します。
もちろん、SynthWorksのOSVVMクラスでは、このすべてを学ぶことができます:)。
それは私が探しているものです!ありがとうジム!アドバイスもありがとう! – ferdepe
整数から列挙型に戻る同様の方法はありますか? –
@scary_jeffそれは 'VAL'です(しかし、あなたはすでにこれを知っていたと思います)。上記で編集された例。 –
...
function my_func(inp : t_my_enum) return integer is
begin
case inp is
when stateA =>
return 1;
when stateB =>
return 2;
when others =>
return 0;
end case;
end function my_func;
... <= my_func(stateB);`
enum入力と戻り値の型std_logic_vector(または整数)を使用して関数を実装し、その列挙型の対応するstd_logic_vectorを返すためにはcase構造体を使用するのが最善の方法です。 –
しかし、状態の数が増えると、関数も増えます。私はもっとポータブルなものが必要です... – ferdepe
も参照してください '属性enum_encoding' –