VHDL ERROR : Can't resolve multiple constant drivers for net... : for loop
VHDL ERROR : Can't resolve multiple constant drivers for net... : for loop
我对这个 vhdl 代码有点问题,它说:
Error (10028): Can't resolve multiple constant drivers for net
"leds[25]" at pong_game.vhd(1049) ...
这是我的代码的一部分:
architecture led_matrix of pong_game is
...
type etat is
(led1,led2,led3,led4,led5,led6_1,led7_1_g,led7_1_d,led8_1_g,led8_1_d,led9_1_g
...)
signal etat_present, etat_futur : etat;
...
affichage_sequence : process(etat_present)
begin
case etat_present is
when led1 =>
for i in 1 to 30 loop
if i = 1 then
leds(i)<='1';
else
leds(i)<='0';
end if;
end loop;
when led2 =>
for i in 1 to 30 loop
if i = 2 then
leds(i)<='1';
else
leds(i)<='0';
end if;
end loop;
when led3
...
end case ;
end process affichage_sequence ;
end architecture led_matrix;
有没有更好的方法来执行这些操作?
也许它可能真的很简单,但是你的状态发生了什么?
[...]led5,led6_1,led7_1_g,led7_1_d[...]
各种奇怪的名字。你想达到什么目的?
至于过程:
begin
case etat_present is
when led1 =>
leds <= (1 <= '1', others => '0');
when led2 =>
leds <= (2 <= '1', others => '0');
[...]
或
begin
case etat_present is
when led1 =>
leds <= (others => '0'); leds(1) <= '1';
when led2 =>
leds <= (others => '0'); leds(2) <= '1';
[...]
或
begin
leds <= (others => '0');
case etat_present is
when led1 =>
leds(1) <= '1';
when led2 =>
leds(2) <= '1';
[...]
取决于您的要求和综合工具的支持。
但是我们缺少查看为什么 leds(25)
有多个驱动程序的代码。所以帮不了你。
模拟说了什么?我希望你模拟了这个。直接使用 FPGA 通常不是一个好主意。
将leds
信号类型改成std_ulogic_vector
,在仿真中测试,会报错更早
您在不同的地方(在您的情况下有多种可能性)为 led(i) 赋值,这就是问题所在。你应该分配一个变量。并根据变量的值给 led(i) 赋值。
我对这个 vhdl 代码有点问题,它说:
Error (10028): Can't resolve multiple constant drivers for net "leds[25]" at pong_game.vhd(1049) ...
这是我的代码的一部分:
architecture led_matrix of pong_game is
...
type etat is
(led1,led2,led3,led4,led5,led6_1,led7_1_g,led7_1_d,led8_1_g,led8_1_d,led9_1_g
...)
signal etat_present, etat_futur : etat;
...
affichage_sequence : process(etat_present)
begin
case etat_present is
when led1 =>
for i in 1 to 30 loop
if i = 1 then
leds(i)<='1';
else
leds(i)<='0';
end if;
end loop;
when led2 =>
for i in 1 to 30 loop
if i = 2 then
leds(i)<='1';
else
leds(i)<='0';
end if;
end loop;
when led3
...
end case ;
end process affichage_sequence ;
end architecture led_matrix;
有没有更好的方法来执行这些操作?
也许它可能真的很简单,但是你的状态发生了什么?
[...]led5,led6_1,led7_1_g,led7_1_d[...]
各种奇怪的名字。你想达到什么目的?
至于过程:
begin
case etat_present is
when led1 =>
leds <= (1 <= '1', others => '0');
when led2 =>
leds <= (2 <= '1', others => '0');
[...]
或
begin
case etat_present is
when led1 =>
leds <= (others => '0'); leds(1) <= '1';
when led2 =>
leds <= (others => '0'); leds(2) <= '1';
[...]
或
begin
leds <= (others => '0');
case etat_present is
when led1 =>
leds(1) <= '1';
when led2 =>
leds(2) <= '1';
[...]
取决于您的要求和综合工具的支持。
但是我们缺少查看为什么 leds(25)
有多个驱动程序的代码。所以帮不了你。
模拟说了什么?我希望你模拟了这个。直接使用 FPGA 通常不是一个好主意。
将leds
信号类型改成std_ulogic_vector
,在仿真中测试,会报错更早
您在不同的地方(在您的情况下有多种可能性)为 led(i) 赋值,这就是问题所在。你应该分配一个变量。并根据变量的值给 led(i) 赋值。