Combinational loop in Actel LiberoIDE

Sezione dedicata alle logiche programmabili

Combinational loop in Actel LiberoIDE

Postby brovind_e » 18 Sep 2013, 11:31

Buongiorno a tutti,
per prima cosa mi scuso con Leonardo e deluca perchè non ho più risposto alle loro domande, è vero che ho fatto altre cose, ma la cortesia di una risposta ci stava... :oops:

Il progetto che ho sviluppato con l'azienda per cui lavoro è sostanzialmente un misuratore di profili.
Utilizza un generatore di linea laser collimata, una telecamera lineare e un pò di elettronica (FPGA+microproc +display LCD alfanum. ).
Molto addentro al progetto non posso andare, per ovvi motivi però posso dire che lo utilizziamo come ausilio alla selezione e all'orientamento dei pezzi sui sistemi vibranti di brovind. e che utilizzo le APA075, vecchissime, già il venditore mi ha detto che se cambio lo stampato devo passare a qualcosa di più recente. :?

Come avevo già detto nella presentazione non sono un programmatore puro, anzi, la mia formazione è prevalentemente Hardware.
Adesso ho un "problemino" su una piccola modifica che ho fatto al progetto.
Un contatore a 8 bit che si attiva quando il pezzo è davanti al sensore controlla quanto tempo il pezzo impiega a transitare. All'interno di un process decido se il tempo è stato superato o no.
Il problema è che se vario un parametro a caso all'interno del process (aumento o diminuisco la soglia del comparatore) parte delle funzioni del progetto cessano di girare.
Ho notato che il pre-layout dice che ci sono dei "combinational loop" e quindi alcune net "It has be broken between pins.."
Che cos'è un combinational loop e che tipo di contromisure si possono prendere per evitarli?
La sezione interessata è costruita con dichiarazioni di componenti (latch, contatori decoder ecc) collegati fra loro da net e non in process.
Capisco che non è facile trasmettere un problema a chi è estraneo al progetto, ma se avete qualche dritta...

Grazie, ciao
User avatar
brovind_e
 
Posts: 5
Joined: 12 Jun 2013, 14:21

Re: Combinational loop in Actel LiberoIDE

Postby deluca » 18 Sep 2013, 11:47

........ dov'è il codice?

discutere su un problema di questo tipo senza visionare il codice? beh! non saprei come aiutarti.

proprio le "combinational loop" sono da evitare....
è chiaro che non sei tu a volerle ma il tuo codice le crea....

I "combinational loop" sono strutture logiche che non contengono elementi di retroazione ti tipo sincrono.
Questo tipo di loop può causare instabilità e problemi di affidabilità. 
Perché? e come? viene generato un loop combinatorio? 
Fondamentalmente, un loop combinatorio è implementato in hardware a livello(gate) quando nel codice VHDL viene descritto, nella logica combinatoria, un segnale che è nel lato sinistro di un'istruzione di assegnazione
(cioè, a sinistra del simbolo = <) è anche sull'espressione sul lato destro dell'istruzione di assegnazione segnale (destra di <=).
Per esempio le seguenti linee di codice generano un loop combinatorio, purché sono scritti in un processo combinatorio o in un segnale di istruzione di assegnazione concorrente:

Code: Select all
library ieee;
use ieee.std_logic_1164.all;
 
entity test_comb is
port(
     a: in  std_logic;
     z: out std_logic);
end test_comb;
 
architecture beh of test_comb is
   signal y: std_logic;
begin
   z <= y;
process(a,y)
begin
   y <= y nand a;
end process;
end beh;
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Combinational loop in Actel LiberoIDE

Postby brovind_e » 18 Sep 2013, 13:22

Ciao deluca,
grazie della velocissima risposta.

Ecco una parte del codice incriminato:

Code: Select all
ck_ec <= fincont and (not enable_cont_pix);

U59: DFFC port map (Q   =>r_ecp,
                    CLR =>r_cfl,
                    CLK =>rog_int_neg,        -- Fronte di salita
                    D   =>stop_c
                    );
r2_ecp <= RESET or r_ecp;

U60: DFFC port map (Q =>enable_cont_pix,
               CLR =>r2_ecp,
               CLK =>ck_ec,
               D =>'1'
               );


ho un'immagine che rappresenta a cosa corrisponde il pezzo di codice che ho postato:

Image

U59 non è coinvolto nella segnalazione del combinational loop.

si tratta di un loop? anche se c'è di mezzo una porta?
User avatar
brovind_e
 
Posts: 5
Joined: 12 Jun 2013, 14:21


Return to FPGA & CPLD

Who is online

Users browsing this forum: No registered users and 3 guests