if-then anweisung

Gast #836294
Lesenswert?

if rising_edge (mac_clk_in) then
if start_button <= '1' then
if counter_index := '1' then
counter_index := counter_index + 1;
dat_send <= dat_send_complete(counter_index);
elsif counter_index := '2' then
counter_index := counter_index + 1;
dat_send <= dat_send_complete(counter_index);

elsif counter_index := '3' then
counter_index := counter_index + 1;
dat_send <= dat_send_complete(counter_index);

elsif counter_index := '4' then
counter_index := counter_index + 1;
dat_send <= dat_send_complete(counter_index);
end if;
-----------
ERROR:HDLParsers:164 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 30. 
parse error, unexpected AFFECT, expecting THEN
ERROR:HDLParsers:164 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 34. 
parse error, unexpected AFFECT, expecting THEN
ERROR:HDLParsers:164 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 38. 
parse error, unexpected AFFECT, expecting THEN
ERROR:HDLParsers:164 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 42. 
parse error, unexpected AFFECT, expecting THEN
ERROR:HDLParsers:164 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 47. 
parse error, unexpected IF, expecting PROCESS
-----------------------


ich bin absoulter Anfäner und kann mir die Fehler nicht erklären
Gast #836407
Lesenswert?

ERROR:HDLParsers:808 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 30. 
<= can not have such operands in this context.
ERROR:HDLParsers:164 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 34. 
parse error, unexpected AFFECT, expecting THEN
ERROR:HDLParsers:808 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 38. 
<= can not have such operands in this context.
ERROR:HDLParsers:409 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 39. 
Signal 'counter_index' counter_index is at left hand side of variable 
assignment statement.
ERROR:HDLParsers:808 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 42. 
<= can not have such operands in this context.
ERROR:HDLParsers:409 - "D:/Programme/Xilinx92i/EIA-232/MAC.vhd" Line 43. 
Signal 'counter_index' counter_index is at left hand side of variable 
assignment statement.

dann kommt das. und ursprünglich wollte ich die anweisungen so 
schreiben:
if rising_edge (clk) AND (siganlA < signalB < 10) OR (signal A /= 11)
warum geht soche zuweisungen nicht?
#836615
Lesenswert?

Vergleiche sind durchaus moeglich, je nach eingebundenen Paketen auch 
mit std_logic_vector:

   if signal <= '1' then

Auch '0' erfuellt dann natuerlich die Bedingung - hat mir schon ein paar 
Fehlersuchen eingebracht, wie schnell ist so ein < getippt...

In VHDL kann man im Gegensatz zu C aber immer nur einen Vergleich in 
einem statement schreiben. In Hardware sollte man darauf aber 
verzichten, da der Ressourcenbedarf sehr hoch ist.
Gast #836725
Lesenswert?

Mal abgesehen von den oben besprochenen Sachen. Ich zähle drei "if"'s, 
aber nur ein "end if".
1
if rising_edge(mac_clk_in) then
2
  if start_button = '1' then
3
    if counter_index = '1' then
4
      counter_index := counter_index + 1;
5
      dat_send <= dat_send_complete(counter_index);
6
    elsif counter_index = '2' then
7
      counter_index := counter_index + 1;
8
      dat_send <= dat_send_complete(counter_index);
9
    elsif counter_index = '3' then
10
      counter_index := counter_index + 1;
11
      dat_send <= dat_send_complete(counter_index);
12
    elsif counter_index = '4' then
13
      counter_index := counter_index + 1;
14
      dat_send <= dat_send_complete(counter_index);
15
    end if;
16
  end if;
17
end if;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren