将枚举类型转换为std_logic_vector VHDL

fer*_*epe 6 vhdl

我想知道是否可以将枚举类型(如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类中学到所有这些:).