PDA

View Full Version : [WinCUPL] Contatore mod.4 per una GAL - non tornano i conti


SuperISD32
27-04-2008, 17:42
Ciao a tutti boys ho qualche problemino a programmare una gal per implementare uno stupidissimo contatore mod.4.
Semplicemente il problema è che non funziona niente e non so il perchè..

Questo è il COMPLESSISSIMO pezzo di codice che ho scritto e sotto c'è il risultato della simulazione che è completamente sballato:

------------------------------------------------------------------------
Name cnt4 ;
PartNo 01 ;
Date 27/04/2008 ;
Revision 01 ;
Designer Davide ;
Company Me ;
Assembly None ;
Location None ;
Device g22v10 ;

/* *************** INPUT PINS *********************/
PIN [1..3] = [clk, res, pres];

/* *************** OUTPUT PINS *********************/
pin [14, 15] = [q1..2];

$define s0 'b'00
$define s1 'b'01
$define s2 'b'10
$define s3 'b'11

field cnt4 = [q1..2];
cnt4.ar = res ;
cnt4.sp = pres ;


sequenced cnt4 {
present s0 next s1;
present s1 next s2;
present s2 next s3;
present s3 next s0;
}
------------------------------------------------------------------------

Simulazione: (completamente sballata :muro: )
http://img393.imageshack.us/img393/5188/simulazionetr9.th.png (http://img393.imageshack.us/my.php?image=simulazionetr9.png) res e pres sono reset e preset, q1 e q2 sono le uscite del contatore.



Questo sotto è invece un contatore mod.16 scritto dal mio prof che si differenzia solo per il modulo e per la funzione OUT al cambiamento di stato:

------------------------------------------------------------------------
Name cntmod16 ;
PartNo 01 ;
Date 24/10/01 ;
Revision 01 ;
Designer pimg ;
Company blaisepascal ; /* quando pres e res sono attivi alti prevale res 1 reset fisico */
Assembly None ;
Location none ;
Device g22v10 ;
/* dichiarazione degli ingressi */
pin [1..3] = [clk,res,pres] ;


/* dichiarazione delle uscite */
pin [14..17,18] = [q0..3,contando] ;


field conta16 = [q0..3];
conta16.ar = res ;
conta16.sp = pres ;
/*definire in ordine sx-dx q3-q2-q1-q0 */

$define stato0 'h'0 /* anche 'b'0000 */
$define stato1 'h'1 /* anche 'b'0001 */
$define stato2 'h'2 /* anche 'b'0010 */
$define stato3 'h'3 /* anche 'b'0011 */
$define stato4 'h'4 /* anche 'b'0100 */
$define stato5 'h'5 /* anche 'b'0101 */
$define stato6 'h'6 /* anche 'b'0110 */
$define stato7 'h'7 /* anche 'b'0111 */
$define stato8 'h'8 /* anche 'b'1000 */
$define stato9 'h'9 /* anche 'b'1001 */
$define stato10 'h'A /* anche 'b'1010 */
$define stato11 'h'B /* anche 'b'1011 */
$define stato12 'h'C /* anche 'b'1100 */
$define stato13 'h'D /* anche 'b'1101 */
$define stato14 'h'E /* anche 'b'1110 */
$define stato15 'h'F /* anche 'b'1111 */
/* gli stati non possono essere identici */

sequenced conta16
{
present stato0 next stato1 out contando ;
present stato1 next stato2 out contando ;
present stato2 next stato3 out contando ;
present stato3 next stato4 out contando ;
present stato4 next stato5 out contando ;
present stato5 next stato6 out contando ;
present stato6 next stato7 out contando ;
present stato7 next stato8 out contando ;
present stato8 next stato9 out contando ;
present stato9 next stato10 out contando ;
present stato10 next stato11 out contando ;
present stato11 next stato12 out contando ;
present stato12 next stato13 out contando ;
present stato13 next stato14 out contando ;
present stato14 next stato15 out contando ;
present stato15 next stato0 out contando ;
}
contando.ar = res ;
contando.sp = pres ;
------------------------------------------------------------------------

la sua simulazione: (completamente corretta :mad: )
http://img356.imageshack.us/img356/2443/simulazionedu1.th.png (http://img356.imageshack.us/my.php?image=simulazionedu1.png)

Non riesco proprio a capire perchè questo stupido contatore non sa contare fino a 3!!!! :muro: :muro: :muro: :help:

SuperISD32
01-05-2008, 16:31
Allora raga, grazie al vostro insostituibile aiuto :mbe: , ho risolto tutto.
Il problema è che un campo di variabili dedicate a contenere i vari bit di una stessa parola deve essere numerato a partire da 0 , e non da 1 , percui le istruzioni

-----------------------------------------------------------------
* *************** OUTPUT PINS *********************/
pin [14, 15] = [q1..2];

$define s0 'b'00
$define s1 'b'01
$define s2 'b'10
$define s3 'b'11

field cnt4 = [q1..2];
-----------------------------------------------------------------

diventano
-----------------------------------------------------------------
/* *************** OUTPUT PINS *********************/
pin [14, 15] = [q0..1];

$define s0 'b'00
$define s1 'b'01
$define s2 'b'10
$define s3 'b'11

field cnt4 = [q0..1];
-----------------------------------------------------------------

e così tutto funziona :stordita: ...