我想知道是否可以将枚举类型(如FSM状态)转换为std_logic_vector或整数.我正在使用OSVVM为FSM做一个测试平台,我想使用记分板包自动比较预期状态和实际状态.
谢谢!
Jim*_*wis 10
要转换为整数,请使用:
IntVal := StateType'POS(State) ;
Run Code Online (Sandbox Code Playgroud)
从那里,很容易转换为std_logic_vector,但我更喜欢使用整数,因为它们的存储空间比std_logic_vector小.为了验证,如果您在值小于32位时开始考虑更多有关整数的信息,将会更容易.
如果你需要它作为std_logic_vector,只使用numeric_std你可以:
Slv8Val := std_logic_vector(to_unsigned(IntVal, Slv8Val'length)) ;
Run Code Online (Sandbox Code Playgroud)
为了验证,我大量使用numeric_std_unsigned,因此转换更容易:
Slv8Val := to_slv(IntVal, Slv8Val'length) ;
Run Code Online (Sandbox Code Playgroud)
如果您有一个整数并希望将其转换回枚举值,则可以使用'VAL.
State := StateType'VAL(IntVal) ;
Run Code Online (Sandbox Code Playgroud)
在OSVVM中,我们使用具有已解析值的记录来创建事务接口.我们有一个整数的resoled类型(osvvm.ResolutionPkg.integer_max).我们使用'POS(我们把它放入)和'VAL(我们把它拿出来)通过记录传输枚举值.
注意不要将'VAL与'VALUE混淆.'VALUE将字符串转换为值 - 与'IMAGE相反.
您当然可以在SynthWorks的OSVVM类中学到所有这些:).