VHDL错误:无法解析net ...:for循环的多个常量驱动程序

时间:2017-07-10 14:17:26

标签: vhdl

我对这个vhdl代码有点问题,它说:

  

错误(10028):无法解析net的多个常量驱动程序   “leds [25]”在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;

有没有更好的方法来执行这些操作?

2 个答案:

答案 0 :(得分:0)

也许它可能非常简单,但你们的州会发生什么?

[...]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并在模拟中进行测试,这会产生较早的错误。

答案 1 :(得分:-2)

您正在为不同地方的led(i)分配一个值(在您的情况下有多种可能性),这就是问题所在。你应该分配一个变量。并根据变量的值为led(i)赋值。