首页 > 解决方案 > 如何使这个 VHDL 'for' 循环在 modelsim 上正常工作?

问题描述

我的 VHDL 设计中有一个“for”循环,它在 modelsim 上出现错误:“非法并发语句”。

我的 VHDL 体系结构有几百行长,所以我将只显示出现错误的原因:

for k in 0 to 19 loop
    DATA_SERDES(k)  <= DATA_SERDES_inv(19-k);
end loop;

当我将循环替换为:

DATA_SERDES(0)      <= DATA_SERDES_inv(19);
DATA_SERDES(1)      <= DATA_SERDES_inv(18);
DATA_SERDES(2)      <= DATA_SERDES_inv(17);
DATA_SERDES(3)      <= DATA_SERDES_inv(16);
DATA_SERDES(4)      <= DATA_SERDES_inv(15);
DATA_SERDES(5)      <= DATA_SERDES_inv(14);
DATA_SERDES(6)      <= DATA_SERDES_inv(13);
DATA_SERDES(7)      <= DATA_SERDES_inv(12);
DATA_SERDES(8)      <= DATA_SERDES_inv(11);
DATA_SERDES(9)      <= DATA_SERDES_inv(10);
DATA_SERDES(10)     <= DATA_SERDES_inv(9);
DATA_SERDES(11)     <= DATA_SERDES_inv(8);
DATA_SERDES(12)     <= DATA_SERDES_inv(7);
DATA_SERDES(13)     <= DATA_SERDES_inv(6);
DATA_SERDES(14)     <= DATA_SERDES_inv(5);
DATA_SERDES(15)     <= DATA_SERDES_inv(4);
DATA_SERDES(16)     <= DATA_SERDES_inv(3);
DATA_SERDES(17)     <= DATA_SERDES_inv(2);
DATA_SERDES(18)     <= DATA_SERDES_inv(1);
DATA_SERDES(19)     <= DATA_SERDES_inv(0);

对我来说,这两个声明都是等价的,但是 modelsim 看到了一个错误。我在架构中没有任何其他“k”变量或任何其他循环。我正在使用 VHDL 93 并使用 modelsim 10.4c 进行编译

任何的想法 ?

谢谢,

SLP

标签: for-loopvhdlmodelsim

解决方案


for 循环只能在进程、函数或过程内部使用。也许您正在寻找的是“生成”语句:

generate_label: for k in 0 to 19 generate
    DATA_SERDES(k)  <= DATA_SERDES_inv(19-k);
end generate;

推荐阅读