1
A
回答
1
该解决方案背后的想法是避免硬编码枚举类型成员的case语句。你希望能够在一个游戏中改变类型。
比方说,你有以下枚举:
typedef enum {BISTRO, COFFEE_SHOP, BAR} places_e;
您希望您的用户能够输入:
vsim top +MEET_PLACE=BAR
现在要串"BAR"
转换为枚举“酒吧” 。
你可以这样做:
typedef enum {BISTRO, COFFEE_SHOP, BAR} places_e;
module top;
places_e place_map[string];
function void make_map;
places_e pl;
pl = pl.first();
do begin
place_map[pl.name()]=pl;
pl = pl.next();
end while (pl != pl.first());
endfunction // make_map
function string get_list;
string ss;
places_e pl;
pl = pl.first();
ss = "";
do begin
ss = {ss, " ",pl.name()};
pl = pl.next();
end while (pl != pl.first());
return ss;
endfunction // get_list
initial begin
string place_str;
places_e place;
make_map;
if (!$value$plusargs("MEET_PLACE=%s", place_str)) begin
$display("You must choose a MEET_PLACE");
$finish;
end
if (! place_map.exists(place_str)) begin
$display("You must choose from this list: %s", get_list());
$finish;
end
place = place_map[place_str];
$display("Let's meet at a %s!", place.name());
end // initial begin
endmodule // top
3
如果您正在使用UVM 1.2或有权访问库,您可能需要使用uvm_enum_wrapper类做转换。它在定义uvm_globals.svh模板类包装,你可以按如下方式使用它:
typedef enum {BISTRO, COFFEE_SHOP, BAR} places_e;
typedef uvm_enum_wrapper#(places_e) places_wrapper;
places_e place;
places_wrapper::from_name("BAR", place);
挺喜欢你this solution提供的代码,包装类作品通过遍历枚举条目并创建一个ASSOC数组,用于给定枚举的枚举[字符串]映射(作为模板参数提供)。所以如果你使用UVM 1.2,don't repeat。
+0
非常好!我不得不承认,我还没有深入到1.2。 –
相关问题
- 1. 将字符串转换为枚举?
- 2. 如何将字符串转换为枚举值为整数?
- 3. 将字符串字段转换为Swashbuckle中的枚举字段
- 4. 如何将枚举值转换为压缩的字符串?
- 5. 如何将字符串转换为int类型的枚举?
- 6. 将数字转换为在bash中的字符串枚举
- 7. 字符串转换为枚举的枚举名
- 8. 如何将枚举类型转换为字符串列表?
- 9. 如何将字符串值转换为枚举
- 10. 如何将枚举值转换为字符串值?
- 11. Grails如何将字符串转换为枚举?
- 12. 将字符串转换为C++中的枚举?
- 13. 字符串转换枚举在C#中
- 14. 将文化特定的枚举DisplayName字符串转换为枚举
- 15. 将枚举(作为字符串)从CAPS_CASE转换为camelCase
- 16. 将JAVA字符串转换为相应的枚举?
- 17. 高效地将java字符串转换为等价的枚举
- 18. 将字符串转换为不带值的枚举swift
- 19. 将一个字符串的值转换为枚举类变量
- 20. 转换整数枚举字符串
- 21. 如何从字符串转换为枚举值在c + +?
- 22. 如何绑定枚举值转换为字符串
- 23. 使用TValue将字符串转换为枚举类型?
- 24. JAXB - 从XSD生成类 - 将枚举转换为字符串
- 25. 休眠aliasToBean不会将字符串转换为枚举
- 26. 可以将字符串转换为枚举值吗?
- 27. 将Java枚举值多态转换为字符串列表
- 28. Scala将字符串转换为枚举值
- 29. 如何将Java枚举转换为C#?
- 30. 如何将typedef枚举转换为NSNumber?
您不需要'get_list()'函数。你可以结合使用make_list,或者只使用 '$ display(“你必须从这个列表中选择:%0p”,place_map.find_index()用(1));' –