将枚举类型转换为标准逻辑向量VHDL
我想知道是否可以将枚举类型(如FSM状态)转换为std_逻辑_向量或整数。我正在用OSVVM为FSM做一个测试台,我想使用scoreboard包自动比较预期状态和实际状态 谢谢 也许像这样将枚举类型转换为标准逻辑向量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 =>
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(但我怀疑你已经知道这一点)。示例已在中编辑到上述内容。