将枚举类型转换为std_logic_vector VHDL

时间:2017-02-15 16:30:03

标签: vhdl

我想知道是否可以将枚举类型(如FSM状态)转换为std_logic_vector或整数。我正在使用OSVVM为FSM做一个测试平台,我想使用记分板包自动将预期状态与实际状态进行比较。

谢谢!

2 个答案:

答案 0 :(得分:8)

要转换为整数,请使用:

IntVal := StateType'POS(State) ; 

从那里开始,很容易转换为std_logic_vector,但我更喜欢在整个版本中使用整数,因为它们的存储空间比std_logic_vector要小。为了验证,如果您在值小于32位时开始考虑更多关于整数的话会更容易。

如果你需要它作为std_logic_vector,只使用numeric_std你可以:

Slv8Val := std_logic_vector(to_unsigned(IntVal, Slv8Val'length)) ; 

为了验证,我大量使用numeric_std_unsigned,因此转换更容易:

Slv8Val := to_slv(IntVal, Slv8Val'length) ; 

如果您有一个整数并希望将其转换回枚举值,则可以使用'VAL。

State := StateType'VAL(IntVal) ; 

在OSVVM中,我们使用具有已解析值的记录来创建事务接口。我们有一个整数的resoled类型(osvvm.ResolutionPkg.integer_max)。我们使用'POS(我们把它放入)和'VAL(我们把它拿出来)通过记录传递枚举值。

注意不要将'VAL与'VALUE混淆。 'VALUE将字符串转换为值 - 与'IMAGE。

相反

您当然可以在SynthWorks的OSVVM类中学习所有这些:)。

答案 1 :(得分:0)

也许这样......

/**
 ** pure js
 **/

// snap event
var addEvent = function addEvent(element, eventName, func) {
  if (element.addEventListener) {
    return element.addEventListener(eventName, func, false);
  } else if (element.attachEvent) {
    return element.attachEvent("on" + eventName, func);
  }
};

// snap parmas
var snapper = new Snap({
  element: document.getElementById('content'),
  disable: 'right',
  maxPosition: 250,
  minPosition: -250,
  transitionSpeed: .2
});

// snap button click function
addEvent(document.getElementById('ol'), 'click', function() {
  snapper.open('left');
});

/**
 ** jQuery functions
 **/
(function($) {

  // slick slider
  $('#carousel').slick({
    dots: false,
    prevArrow: false,
    nextArrow: false,
    autoplay: true,
    autoplaySpeed: 3000
  });

})(jQuery);