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) 赋值。