Una ditta specializzata in confezionamenti di ananas costruisce una rete logica per ottimizzare la propria produzione. La rete è formata da un nastro trasportatore, dove scorrono i prodotti che devono essere sottoposti ad un controllo, e due sensori in alto posti ad una distanza tale da individuare i prodotti che rispettano lo standard. Se l’esito del controllo è positivo allora il prodotto è idoneo alla vendita e viene incanalato in ceste apposite altrimenti viene scartato e destinato all’inscatolamento del prodotto sciroppato. L’incanalamento è effettuato da un braccio motorizzato che ostacola il passaggio nella zona sbagliata: se il braccio è alzato (C=0) significa che il prodotto ha passato il controllo di qualità altrimenti il braccio è abbassato(C=1). La rete poi provvede ad ottimizzare anche i tempi di controllo per aumentare la produzione, infatti il nastro trasportatore è dotato di tre velocità: fermo(N=00), normale (N=01) ed extra-speed (N=11). La velocità normale del nastro è attiva quando si stanno controllando i prodotti e quando si resetta la rete, mentre quella extra-speed entra in gioco quando non ci sono prodotti in fase di analisi per far sopraggiungere ai sensori più rapidamente gli ananas da controllare. Le velocità vengono attivate automaticamente dalla rete e quella extraspeed viene disattivata non appena si presenta un prodotto da controllare. Inoltre è prevista la possibilità di fermare il nastro in caso di emergenza o al sopraggiungere di un prodotto che non è un ananas e in qualsiasi momento tramite un pulsante azionato da un addetto. Tale pulsante è fatto in modo che rimane premuto e solo dopo il suo rilascio(un’altra pressione del pulsante) il nastro riprende la sua velocità e se si stava facendo un controllo su un prodotto corretto è necessario rimettere il prodotto in coda per verificarlo di nuovo o l’addetto scarta direttamente il prodotto. Si pone la regola che l’addetto faccia ripartire il nastro mentre non ci sono prodotti sotto i sensori per un corretto funzionamento della rete e una valutazione corretta del prodotto stesso. Stato emergenza Stato emergenza Caso conforme Caso non conforme ■AB A 000 001 011 010 100 101 111 110 N C F - C A - - - I 01 1 B F - C B - - - L 01 0 C - D C - - - L - 01 0 D E D - - - L - - 01 0 E E - - B L - - - 11 0 F F G - - I - - - 01 1 G H G - - - I - - 01 1 H H - - A I - - - 11 1 I H - - - I I - I 00 1 L E - - - L L L L 00 0 B C D E F G H I L X X X FE X X X X FH X X X X X X X X A B X X X X X X C X X X X X X D X X X X X E FH X X X X F X X X G X X H X I Classi massime di compatibilità [AF], [BC], [CD], [E],[G], [H],[I], [L]. Esse sono necessarie per garantire la copertura e la chiusura. Ottengo la seguente tabella delle transizioni: ■AB 000 001 011 010 100 101 111 110 NC [AF] => α α ε β α η - - η 011 [BC] => β α γ β β - - θ θ 010 [CD] => γ δ γ γ - - θ θ - 010 [E] => δ δ - - β θ - - - 110 [G] => ε ζ ε - - - η - - 011 [H] => ζ ζ - - α η - - - 111 [I] => η ζ - - - η η - η 001 [L] => θ δ - - - θ θ θ θ 000 ■AB y1y2y3 000 001 011 010 100 101 111 110 NC [AF] => α 000 000 100 001 000 111 - - 111 011 [BC] => β 001 000 011 001 001 - - 110 110 010 [CD] => γ 011 010 011 011 - - 110 110 - 010 [E] => δ 010 010 - - 001 110 - - - 110 [G] => ε 100 101 100 - - - 111 - - 011 [H] => ζ 101 101 - - 000 111 - - - 111 [I] => η 111 101 - - - 111 111 - 111 001 [L] => θ 110 010 - - - 110 110 110 110 000 Metto in evidenza le CORSE CRITICHE ■AB y1y2y3 000 001 011 010 100 101 111 110 NC [AF] => α 000 000 100 001 000 111 - - 111 011 [BC] => β 001 000 011 001 001 - - 110 110 010 [CD] => γ 011 010 011 011 - - 110 110 - 010 [E] => δ 010 010 - - 001 110 - - - 110 [G] => ε 100 101 100 - - - 111 - - 011 [H] => ζ 101 101 - - 000 111 - - - 111 [I] => η 111 101 - - - 111 111 - 111 001 [L] => θ 110 010 - - - 110 110 110 110 000 A questo punto vengono proposti due tipi di soluzione al problema: Con Eliminazione delle corse critiche Senza eliminazione delle corse critiche • Corretta formalmente • Induce un risultato erroneo nella simulazione Post-Route • Formalmente meno corretta • Comportamento della rete fedele alle aspettative Tabella senza corse critiche ■AB y1y2y3 000 001 011 010 100 101 111 110 NC [AF] => α 000 000 100 001 000 100 - - 100 011 [BC] => β 001 000 011 001 001 - - 010 010 010 [CD] => γ 011 010 011 011 001 - 010 010 - 010 [E] => δ 010 010 - - 011 110 110 110 110 110 [G] => ε 100 101 100 - - 101 101 - 101 011 [H] => ζ 101 101 - - 100 111 111 - 111 111 [I] => η 111 101 - - - 111 111 - 111 001 [L] => θ 110 010 - - - 110 110 110 110 000 ■A ■A Y1Y2 00 01 11 10 00 0 0 0 1 01 0 0 - 11 1 1 1 1 10 1 1 1 1 Y1Y2 00 01 11 10 00 1 1 y3B=00 00 01 11 10 11 1 1 - 10 1 1 1 11 0 0 - 10 0 1 1 y3B=01 ■A Y1Y2 01 0 - ■A 00 0 0 1 1 01 0 0 1 11 0 1 1 10 1 1 Y1Y2 00 01 11 10 00 0 0 - y3B=10 Y1= ■!Y3 + Y3Y1 + Y1!Y2 + B!■!A!y3 01 0 0 - y3B=11 ■A ■A Y1Y2 00 01 11 10 00 0 1 1 0 01 0 1 - 11 0 1 1 0 10 0 1 1 0 Y1Y2 00 01 11 10 00 0 0 y3B=00 00 01 11 10 11 1 1 - 10 1 1 0 11 1 1 - 10 1 1 1 y3B=01 ■A Y1Y2 01 0 - ■A 00 0 1 0 0 01 0 0 0 y3B=10 11 1 1 1 10 1 1 Y1Y2 00 01 11 10 00 1 1 - 01 0 1 - y3B=11 Y2= y3■ + y2!y3 + y2B + y2!y1!A+ y3B!■!A ■A ■A Y1Y2 00 01 11 10 00 0 0 0 1 01 0 1 - 11 0 0 0 1 10 0 0 0 1 Y1Y2 00 01 11 10 00 0 0 y3B=00 00 01 11 10 11 0 0 - 10 0 0 1 11 0 0 - 10 0 1 1 y3B=01 ■A Y1Y2 01 1 - ■A 00 0 0 1 1 01 1 1 0 y3B=10 11 0 1 1 10 1 1 Y1Y2 00 01 11 10 00 1 1 - 01 1 1 - y3B=11 Y3= ■y1!y2 + y1y3■ + y3B!■ + !■AB+ y1!■!Ay3!B + y1!y2!y3!B + y2!■A!B + y2!■!BA Simulazione Behavioral con corse eliminate: La simulazione behavioral funziona correttamente e ottengo i risultati sperati. Infatti il reset=1 mi permette di settare la rete in uno stato iniziale in cui C=1 (ovvero suppongo che il prodotto non sia conforme) scelto in modo arbitrario e la velocità del nastro è 01 ovvero il nastro procede a velocità normale. Successivamente i test vanno a controllare il comportamento della rete durante il controllo di un prodotto conforme allo standard. Si ha la configurazione dei sensori A=1 e B=1 e ciò comporta C=0 correttamente, mentre il nastro continua a procedere a velocità normale. Appena A=0 e B=0 la velocità del nastro passa a speed . Dopo di che si è voluto testare il funzionamento del pulsante stop , in grado di fermare il nastro su cui vengono trasportati gli ananas. Esso agisce sulla velocità del nastro solo se è premuto e se viene mantenuto il suo stato di pressione così come richiesto. Inoltre si è rispettata la condizione richiesta che dopo il rilascio dello stop il sistema deve trovarsi nella condizione A=0 e B=0, ovvero non devono esserci prodotti in fase di analisi per il corretto funzionamento della rete. Il nastro procede dunque a velocità speed perché non ci sono prodotti. Il test successivo denota come non appena sopraggiunge un prodotto al primo sensore, la velocità del nastro passa da 11 a 01, ovvero rallenta riprendendo la velocità normale. Altro risultato efficiente ottenuto dalla rete lo notiamo nel caso in cui il prodotto non è conforme allo standard. Le uscite funzionano correttamente ovvero C=1 e il nastro nonostante vi sia un momento in cui A=0 e B=0 prima che B=1 non passa alla velocità speed ma continua normalmente perché giustamente sta analizzando un prodotto non conforme. Simulazione Post-Route con corse eliminate : Il comportamento è nettamente sbagliato perché eliminando le corse critiche la rete va a trovarsi in stati in cui l’uscita N è diversa e questo genera un netto malfunzionamento della rete risolvibile solamente con l’arresto del nastro come si può notare. Per ovviare a questo problema bisognerebbe utilizzare la tecnica delle transizioni multiple andando a creare nuovi stati e nuove configurazioni con opportune uscite. Ciò comporterebbe l’aumento delle variabili di stato a 4 aumentando la complessità della rete. Possiamo risolvere il problema come vedremo in seguito. ■A Y1Y2 00 01 11 10 ■A 00 0 0 0 1 01 1 - 11 1 1 10 1 1 - Y1Y2 00 01 11 10 00 1 1 y3B=00 00 01 11 10 11 1 - 10 1 1 11 1 1 - 10 1 1 - y3B=01 ■A Y1Y2 01 0 - ■A 00 0 0 1 1 01 0 0 y3B=10 11 1 1 - 10 1 1 Y1Y2 00 01 11 10 00 0 0 - 01 0 0 - y3B=11 Y1= ■ + y1!■!Ay3 + y1!y2!■!y3 + !■A!y3!B + !■!A!y3B ■A ■A Y1Y2 00 01 11 10 00 0 1 1 0 01 0 0 - 11 1 1 - 10 1 1 1 - Y1Y2 00 01 11 10 00 0 0 y3B=00 00 01 11 10 11 1 - 10 1 1 11 1 1 - 10 1 1 - y3B=01 ■A Y1Y2 01 0 - ■A 00 0 1 0 0 01 0 0 y3B=10 11 1 1 - 10 1 1 Y1Y2 00 01 11 10 00 1 1 - 01 0 1 - y3B=11 Y2 = ■ + !y1y2y3 + !■!A!y3y2 + y3B!■!A ■A ■A Y1Y2 00 01 11 10 00 0 0 0 1 01 0 1 - 11 1 0 - 10 1 0 0 - Y1Y2 00 01 11 10 00 0 0 y3B=00 00 01 11 10 11 0 - 10 0 1 11 0 0 - 10 0 1 - y3B=01 ■A Y1Y2 01 1 - ■A 00 0 0 1 1 01 1 1 0 y3B=10 11 0 1 - 10 1 1 Y1Y2 00 01 11 10 00 1 1 - 01 1 1 - y3B=11 Y3= y1■y3+ !y1!y2■!y3 + ■y1!y2 + y1!■Ay3!B + !y1!■y3B +A!y3!y1y2 + y1!y2!■!y3!B + y1!■!Ay3!B +A!■!B La sintesi delle uscite è identica sia nel caso in cui risolva le corse critiche che no in quanto si tratta di una rete di Moore y1y2 y3 00 1 0 0 1 01 0 0 11 0 1 10 1 1 C= y1y3 + !y2!y3 y1y2 y3 0 1 N(1)= ! Y1 + y1!y2 00 1 1 01 1 1 11 0 0 10 1 1 y1y2 y3 0 1 00 0 0 01 1 0 11 0 0 10 0 1 N(2) = y1!y2y3 + !y1y2!y3 Ricordiamo che C è il braccio meccanico per l’incanalamento del prodotto in base all’esito del controllo, mentre N(2) è il bit più significativo della velocità del nastro e N(1) quello meno significativo. Si è optato di realizzare il progetto con la soluzione in cui le corse critiche non vengono eliminate per avere una rete fedele a quanto richiesto. Lo schematico è composto da 3 segnali di ingresso : Reset, permette di portare la rete in uno stato iniziale in cui C=1 e il nastro si muove a velocità normale 01 A e B, sono i sensori ingaggiati per effettuare i controlli di qualità sui prodotti che passano sul nastro E da 3 segnali di uscita: N0 e N1 che sono segnali distinti e non un vettore in questo caso dove N0 è il bit meno significativo e corrisponde a N(1) mentre N1 corrisponde a N(2). Si è scelto di non visualizzare il comportamento dei segnali interni y1, y2, y3 anche se sono disponibili. La simulazione Behavioral dello schematico è identica alla simulazione Behavioral commentata in precedenza : la rete risulta essere corretta per tutte le configurazioni in ingresso. Come previsto la simulazione Post-Route comporta dei ritardi nelle commutazioni di segnale a causa dei componenti scelti per realizzare la rete e anche per i tempi fisici. I ritardi sono tutti accettabili in quanto sono tutti inferiori ai 10 ns. Vi sono però alcune anomalie che analizziamo nel dettaglio 1) 2) Viene messo in evidenza che l’uscita N(1) ha un piccolo glich che fa passare la velocità da 01 a 11 per 2 ns. L’impulso spurio però non compromette l’uscita C che procede con il suo valore corretto. Nella realtà non bastano 2 ns per attivare un motore in grado di far accelerare e decelerare un nastro in così poco tempo, quindi è molto probabile che il nastro non acceleri ma continui con la velocità normale Qui la rete oltre ad avere un ritardo (essendo a=0, N(1) dovrebbe valere 0 ma c’è un ritardo comunque accettabile per il corretto funzionamento ) N(1) diventa uguale a 0 per poi rialzarsi a 1 e riabbassarsi definitivamente a 0. Così come succede a C. Il tempo in cui tutto ciò avviene è compreso tra 2/4 ns dunque è molto probabile che il nastro e il braccio non facciano in tempo a commutare il proprio stato. 3) Anche qui si nota la presenza di un impulso spurio che varia il comportamento della rete per un tempo compreso tra 1 ns e i 2 ns. La sua presenza è giustificata dal fatto che non sono state risolte le corse critiche dunque la rete può trovarsi in stati intermedi prima di raggiungere lo stato corrispondente Ciò potrebbe non compromettere il funzionamento reale della rete. Possiamo concludere che i risultati ottenuti lasciando le corse critiche sono più prossimi alle aspettative del testo rispetto a quelli in cui le corse vengono eliminate e che alcuni impulsi spuri potrebbero non incidere sul complessivo funzionamento della rete. Si riporta il codice integrale dei test per verificare la correttezza della rete Il seguente codice è identico sia per la versione VHDL che per la versione con Schematico per controllare che entrambe le reti rispondano allo stesso modo agli stimoli