Forum: FPGA, VHDL & Co. Warnung bei Statemachine (Synplify / IspLever)


von Andi Z. (duderino65)


Lesenswert?

hallo,

ich habe in meinem design eine statemachine. wenn ich das design nicht 
direkt im ispLever7.2 synthetisiere sondern in synplify, gibt er mir 
folgene warnung aus:

Extracted state machine for register STATE
State machine has 4 reachable states with original encodings of:
   00
   01
   10
   11
@W:"C:\ispTOOLS7_2_STRT\work\MXO2280\receiver_test_v1\rec_cntl.vhd":252: 
2:252:3|Initial  value is not supported on state machine STATE
@END

hier noch ein teil des quelltextes:
1
begin
2
    if falling_edge(sys_clk25M) then
3
      if sys_en = '1' then
4
      
5
        clk_cnt_i <= (others => '0');
6
        smpl_cnt_i <= (others => '0');
7
        neg_cnt_i <= (others => '0');
8
        rlock <= '0';
9
        STATE <= CNT_STATE;
10
      
11
      elsif sys_en = '0' and all_enable = '1' then
12
13
        case STATE is
14
          when CNT_STATE =>....
15
          when SMPL_STATE => ....
16
          when NEG_STATE =>....
17
          when RESET_STATE => ....
18
        end case;
19
                      .........

da ich gerade das design durchchecken muss weil es nicht richtig 
funktioniert würde ich gerne wissen was die meldung zu bedeuten hat. ich 
kann mir darunter nicht viel vorstellen.
kann mir jemand helfen?


mfg

Andi

von Nephilim (Gast)


Lesenswert?

die fehlermeldung besagt, das dein initialisierungswert für dein signal 
"STATE" nicht unterstützt wird.

wird dieses signal von dir noch irgendwo vorinitialisiert? also bevor du 
es in dem "if sys_en = 1"-zweig auf einen startwert legst?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wie ist STATE definiert?
Wie wird STATE initialisiert?

von Andi Z. (duderino65)


Lesenswert?

oh ja hab ich vergessen dazu zu schreiben...

--Signale und Zustände für die Statemachine--
  type states is (CNT_STATE, RESET_STATE, SMPL_STATE, NEG_STATE);
  signal STATE : states := CNT_STATE;

das ist die initialisierung


mfg

Andi

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>>> ispTOOLS7_2_STRT
> signal STATE : states := CNT_STATE;
Die Starter-Edition der Toolchain unterstützt die Initilisierung 
nicht!!!
Schade, eigentlich... :-(

von Andi Z. (duderino65)


Lesenswert?

ah ok,

dann kann ich die initialisierung rausmachen.

danke


mfg

Andi

von Andi Z. (duderino65)


Lesenswert?

hallo,

das nächste problem ist nun aufgetaucht.
ich habe ein prozess welcher mir eine taktflanke eines signals anzeigt. 
dazu verwende ich ein "pre_rxdv" mit dem ich den aktuellen wert des 
signals vergleiche.
der prozess reagiert auf die steigende flanke der 25Mhz clock und 
vergleicht den letztenm wer mit dem neuen und setzt dann für einen takt 
ein signal.
hier mal der code:
1
  signal cnt_start_i   : std_logic := '0';
2
  signal pre_rxdv   : std_logic := '0';
3
  
4
  attribute syn_keep of cnt_start_i : signal is true; 
5
  attribute syn_keep of pre_rxdv : signal is true;
6
  attribute syn_noprune : boolean;
7
  attribute syn_noprune of cnt_start_i : signal is true; 
8
  attribute syn_noprune of pre_rxdv : signal is true;
9
10
....
11
12
if rising_edge(sys_clk25M) then
13
      if sys_en = '1' then
14
        pre_rxdv <= '0';
15
        cnt_start_i <= '0';
16
        
17
      elsif sys_en = '0' then
18
        if rxen = '1' and pre_rxdv = '0' then
19
          cnt_start_i <= '1';
20
          pre_rxdv <= rxen;
21
        else
22
          cnt_start_i <= '0';
23
          pre_rxdv <= rxen;
24
        end if;
25
      end if;
26
    end if;

nach der synthese wurden die beiden signale rausgeschmissen. mit den 
direktiven passiert das aber auch. dazu muss ich sagen das mein 
restliches design auf fallende flanken reagiert.

hier die meldung von synplify:

@W: BN226 
:"c:\isptools7_2_strt\work\mxo2280\receiver_test_v2\rec_cntl.vhd":114:2: 
114:3|Property  n_syn_noprune incorrectly applied to instance 
RECEIVE_CONTROL.INCOMING_DATA\.pre_rxdv.Q_0
@W: BN226 
:"c:\isptools7_2_strt\work\mxo2280\receiver_test_v2\rec_cntl.vhd":114:2: 
114:3|Property  n_syn_noprune incorrectly applied to instance 
RECEIVE_CONTROL.INCOMING_DATA\.cnt_start_i.Q_0

somit kann ich die signale ja nicht im simulator finden.
wie kann ich die signale den behalten?

mfg

Andi

von Jan M. (mueschel)


Lesenswert?

syn_noprune existiert nur für Instanzen.
Für Signale ist es syn_keep, für Register syn_preserve.


Der Code-Ausschnitt sieht ansonsten soweit gut aus - sonst gibt es keine 
Warnungen?
Warum benutzt du unterschiedliche Taktflanken? Normalerweise sollte man 
sich auf eine Flanke beschraenken.

von Andi Z. (duderino65)


Lesenswert?

hallo,

ne da kommen keine warnungen mehr. nur die, die ich zu beginn hier schon 
erwähnt habe und welche mich nicht stört.

ich verwende ansich nur eine taktflanke im ganzen design. allerdings ist 
es gerade sehr günstig das design dadurch zu synchronisieren. und jetzt 
läuft alles tadellos.


danke...

mfg

Andi

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.