如何使这个 VHDL 'for' 循环在 modelsim 上正常工作?
How to make this VHDL 'for' loop work with no error on modelsim?
我的 VHDL 设计中有一个 'for' 循环,它在 modelsim 上出错:
"Illegal concurrent statement".
我的 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 循环只能在进程、函数或过程中使用。
也许您正在寻找的是 "generate" 语句:
generate_label: for k in 0 to 19 generate
DATA_SERDES(k) <= DATA_SERDES_inv(19-k);
end generate;
我的 VHDL 设计中有一个 'for' 循环,它在 modelsim 上出错: "Illegal concurrent statement".
我的 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 循环只能在进程、函数或过程中使用。 也许您正在寻找的是 "generate" 语句:
generate_label: for k in 0 to 19 generate
DATA_SERDES(k) <= DATA_SERDES_inv(19-k);
end generate;