首页 文章

VHDL中的多维信号阵列

提问于
浏览
8

我在VHDL中有一个信号声明如下:

signal Temp_Key : std_logic_vector(79 downto 0);

这个 Temp_Key 通过 for 循环31次并被修改 . 我想将31个不同的 Temp_Keys 存储在一个数组中 .

是否可以在VHDL中使用多维数组来存储80位信号?

3 回答

  • 0

    是的,首先你需要声明一个类型:

    type YOUR_ARRAY_TYPE is array (0 to 30) of std_logic_vector(79 downto 0);
    

    注意,您也可以声明类型为未定义的长度 - 因此您可以指定声明信号时它具有多少80位字 . 使用VHDL 2008,您还可以保留未指定的slv的大小,也可以在创建信号时声明 . 例如:

    type slv_array is array (natural range <>) of std_logic_vector;
    

    然后使用它

    signal MY_SIGNAL : YOUR_ARRAY_TYPE;
    ...
    MY_SIGNAL(0) <= data;
    ...
    MY_SIGNAL(1) <= data;
    

    有关参考,请参见here .

  • 0

    与上面的帖子一样,您可以创建任何多维数组数据类型 . 您需要注意的另一件事是此代码是否是可综合的(即针对FPGA或ASIC,还是纯粹用于模拟) . 您可以使用FSM /计数器或生成块从0到31进行迭代,具体取决于您的时间安排的重要程度以及您愿意使用的区域 . 上面帖子中显示的多维数组实例肯定是可合成的 .

  • 22

    在VHDL中有两种选择

    选项1

    signal X is array (range) of ArrayType;
    

    选项2

    signal Y is array (range1, range2) of Type;
    

    我认为工具可以更好地支持选项1 . 我还发现这两个选项和函数式编程之间的相似性告诉我们,我们总是可以将多元函数(x,y)变成单个参数的链f(x) - > f(y) . 后者看起来像数组的数组 .

相关问题