具有特定位长度的VHDL枚举

时间:2017-05-22 10:54:40

标签: enums vhdl

我有很多常数。每个常量的长度为8位。

我想将其更改为枚举,原因有两个。 1.每个常数的值无关紧要,只需要是不同的值。 2.由于每个项目的值无关紧要,我想使用枚举,而不关心给出常量数字。

我知道你可以这样做:

type fruit is (banana, apple, orange);
attribute enum_encoding : string;
attribute enum_encoding of fruit : type is "00000000 00000001 00000010";

然而,这似乎是双重工作,因为我毕竟必须给项目nubmers。我只想指出,它必须是8位,让Vivado进行计数。

1 个答案:

答案 0 :(得分:0)

据我所知,你从你的ROM读取“0000_0010”,等于2,这意味着你要选择“橙色”。您可以使用VHDL预定义属性'VAL

library ieee;
use ieee.std_logic_1164.all;

entity test_e is end entity test_e;

architecture test_a of test_e is
    type fruit is (banana, apple, orange);
    constant rom_out : std_logic_vector(7 downto 0) := "00000010";
    use ieee.numeric_std.all;
    constant sel_fr : fruit := fruit'val(to_integer(unsigned(rom_out)));
begin
end architecture;

sel_fr将是“橙色”。