将枚举类型转换为标准逻辑向量VHDL

将枚举类型转换为标准逻辑向量VHDL,vhdl,Vhdl,我想知道是否可以将枚举类型(如FSM状态)转换为std_逻辑_向量或整数。我正在用OSVVM为FSM做一个测试台,我想使用scoreboard包自动比较预期状态和实际状态 谢谢 也许像这样 function my_func(inp : t_my_enum) return integer is begin case inp is when stateA => return 1; when stateB =>

我想知道是否可以将枚举类型(如FSM状态)转换为std_逻辑_向量或整数。我正在用OSVVM为FSM做一个测试台,我想使用scoreboard包自动比较预期状态和实际状态

谢谢

也许像这样

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);`
函数my\u func(inp:t\u my\u enum)返回的整数为
开始
案例inp是
当stateA=>
返回1;
当stateB=>
返回2;
当其他人=>
返回0;
终例;
结束函数my_func;

... 要转换为整数,请使用:

IntVal := StateType'POS(State) ; 
从那里,很容易转换为std_逻辑_向量,但我更喜欢在可能的情况下使用整数,因为它们在存储中比std_逻辑_向量小。对于验证,如果您在值小于32位时开始更多地考虑整数,则会更容易

如果需要将其作为标准逻辑向量,则仅使用数字标准即可:

Slv8Val := std_logic_vector(to_unsigned(IntVal, Slv8Val'length)) ; 
为了验证,我大量使用了无符号的数值,因此转换更容易:

Slv8Val := to_slv(IntVal, Slv8Val'length) ; 
如果您有一个整数并希望将其转换回枚举值,则可以使用“VAL”

State := StateType'VAL(IntVal) ; 
在OSVVM中,我们使用具有解析值的记录来创建事务接口。我们有一个整数的解析类型(osvvm.ResolutionPkg.integer\u max)。我们使用“POS”(放入时)和“VAL”(取出时)通过记录传输枚举值

注意:不要将“VAL”与“VALUE”混淆VALUE将字符串转换为与“IMAGE”相反的值


当然,您可以在SynthWorks的OSVVM类中了解所有这些:)。

最好和最干净的方法是使用enum输入和返回类型std_logic_vector(或integer)实现一个函数,并使用case构造为对应的enum返回正确的std_logic_vector。但如果状态数增加,函数也会增加。我需要更便携的东西…另请参见
属性枚举编码
这就是我一直在寻找的!谢谢你,吉姆!也谢谢你的建议!有没有类似的方法从整数返回枚举类型?@trandle_jeff它是'VAL(但我怀疑你已经知道这一点)。示例已在中编辑到上述内容。