Forum: FPGA, VHDL & Co. VHDL - Initialwerte/State machine


von Peter K. (kloetpatra)


Lesenswert?

Hallo, ich habe folgende 2 Probleme:

1. Ich kann keine Initialwerte wie
1
signal b: std_logic := '1';
 benutzen, da bei der Synthese folgende Meldung kommt:
1
#0 Warning: Initial values for signals are not supported for synthesis. They are ignored on line ...
Wie kann ich denn sonst etwas initialisieren wenn nicht so?
Ich habe gelesen manche FPGAs unterstützen keine initialisierung der 
FlipFlops. Ist dies der Grund warum das so nicht geht?
Es ist ein Xilinx XC5206 - ISE 3.1 (Ich weiß... ist ein alter Schinken)

2. Habe eine simple State Machine, die aber nicht richtig funktioniert.
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3
use IEEE.numeric_std.all;
4
use work.all;
5
6
entity functest is
7
    port (
8
        CLK: in STD_LOGIC;
9
        M0: out STD_LOGIC;
10
        M1: out STD_LOGIC;
11
        M2: out STD_LOGIC;
12
        RESULT1: out STD_LOGIC
13
    );
14
end functest;
15
16
architecture behavior of functest is
17
  
18
  type state_type is (init1, test1, init2, test2);
19
  signal state: state_type;
20
  
21
  signal LED_PWR_GOOD: std_logic;
22
  signal LED_PWR_BAD: std_logic;
23
  signal LED_TEST_GOOD: std_logic;
24
  signal LED_TEST_BAD: std_logic;
25
  signal CLKO: std_logic;
26
  signal c: integer range 0 to 2499999;
27
begin
28
29
  process begin
30
    wait until rising_edge(CLK);
31
    if (c<2499999) then
32
      c <= c+1;
33
    else
34
      c <= 0;
35
      CLKO <= not CLKO;
36
    end if;
37
  end process;
38
  
39
  process (CLKO)
40
  begin
41
    if rising_edge(CLKO) then
42
      LED_PWR_GOOD <= not LED_PWR_GOOD;
43
      case state is
44
        when init1 =>
45
          LED_TEST_GOOD <= '0';
46
          state <= test1;
47
        when test1 =>
48
          LED_TEST_GOOD <= '1';
49
          state <= init2;
50
        when init2 =>
51
          LED_TEST_GOOD <= '0';
52
          state <= test2;
53
        when test2 =>
54
          LED_TEST_GOOD <= '1';
55
          state <= init1;
56
        when others =>
57
          state <= init1;
58
      end case;
59
    end if;
60
  end process;
61
62
  M0 <= not LED_PWR_GOOD;
63
  M1 <= not LED_PWR_BAD;
64
  M2 <= not LED_TEST_GOOD;
65
  RESULT1 <= not LED_TEST_BAD;
66
  
67
end behavior;

LED_PWR_GOOD blinkt!
LED_TEST_GOOD blinkt aber nicht, sollte aber doch mit halber Frequenz 
blinken?
Warum wird kein when - state ausgeführt?
Ich habe kein externes Signal für einen Reset. Wie kann ich 
sicherstellen dass die "State machine" bei init1 anfängt? (In Bezug auf 
Problem 1)

von Der L. (vhdl-neuling)


Lesenswert?

Prinzipiell kannst Du doch auch einen Reset zu Beginn vorsehen, bei dem 
alle Signale auf einen bestimmten Wert gesetzt werden.

Gruß,
derLars

von Cihan K. (lazoboy61)


Lesenswert?

signal state: state_type:= init1;
das wäre die Initialisierung für die State Machine.

Cihan

von Klaus (Gast)


Lesenswert?

Peter Krause schrieb:
> ISE 3.1

Was soll das?!? =-O

von Klaus F. (kfalser)


Lesenswert?

Peter Krause schrieb:
> Wie kann ich denn sonst etwas initialisieren wenn nicht so?
Über einen asynchronen oder synchronen RESET

> Ich habe gelesen manche FPGAs unterstützen keine initialisierung der
> FlipFlops. Ist dies der Grund warum das so nicht geht?
> Es ist ein Xilinx XC5206 -
Kenne diesen Baustein nicht mehr, denke aber nicht.
Alle RAM-basierten FPGAs sollten definiert aufwachen.

> ISE 3.1 (Ich weiß... ist ein alter Schinken)
Daran liegt's
Der Compiler unterstützt die Initialisierung eben nicht. Mit den 
aktuellen geht's ohne Probleme.

Peter Krause schrieb:
> 2. Habe eine simple State Machine, die aber nicht richtig funktioniert.
Hast Du sie schon simuliert?
Außerdem:
CLK0 ist eine abgeleiteter Takt, so etwas sollte man nicht machen.
Verwende überall CLK und arbeite mit clock-Enable

von Peter K. (kloetpatra)


Lesenswert?

Cihan Kalayci schrieb:
> signal state: state_type:= init1;

Wie ich bereits erwähnt habe lässt die Synthese das nicht zu.
--------------------------------------------------------------

Klaus schrieb:
>> ISE 3.1
>
> Was soll das?!? =-O

Das ist die ISE Version die ich nutze.
--------------------------------------------------------------

Klaus Falser schrieb:
> Daran liegt's
> Der Compiler unterstützt die Initialisierung eben nicht. Mit den
> aktuellen geht's ohne Probleme.

Ein neuerer Compiler kommt leider aus Kompatibilitätsgründen für den 
XC5206 nicht in Frage.

von Peter K. (kloetpatra)


Lesenswert?

Klaus Falser schrieb:
> Hast Du sie schon simuliert?
> Außerdem:
> CLK0 ist eine abgeleiteter Takt, so etwas sollte man nicht machen.
> Verwende überall CLK und arbeite mit clock-Enable

Ja, in der Simulation geht's auch nicht.

von Klaus F. (kfalser)


Lesenswert?

Peter Krause schrieb:
> Klaus Falser schrieb:
>> Hast Du sie schon simuliert?
>> Außerdem:
>> CLK0 ist eine abgeleiteter Takt, so etwas sollte man nicht machen.
>> Verwende überall CLK und arbeite mit clock-Enable
>
> Ja, in der Simulation geht's auch nicht.

Glaube ich gern, dort wird ja auch nichts initialisiert.

Peter Krause schrieb:
> Klaus Falser schrieb:
>> Daran liegt's
>> Der Compiler unterstützt die Initialisierung eben nicht. Mit den
>> aktuellen geht's ohne Probleme.
>
> Ein neuerer Compiler kommt leider aus Kompatibilitätsgründen für den
> XC5206 nicht in Frage.

Willst Du etwas lernen?
Dann schmeiß das Ding weg und kauf Dir etwas halbwegs aktuelles.

von Peter K. (kloetpatra)


Lesenswert?

Klaus Falser schrieb:
> Dann schmeiß das Ding weg und kauf Dir etwas halbwegs aktuelles.

Könnte ich machen... aber bei den Restlichen 15999 Stück wäre da jemand 
nicht so erfreut über mein Handeln.

Frage nun die states mit if ab und nun gehts... trotzdem danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.