Programma PAL0
MODULE onde_PAL0
TITLE 'Onde quadre sfasate di 1/16 di periodo '
CK
pin 11; // clock
CK0
node istype 'reg,buffer' ; // divisore di frequenza
CK1
pin 18 istype 'reg,buffer'; // clock per la PAL1
[P11..P0]
node istype 'reg,buffer' ;
[Wo11..Wo0]
node istype 'reg,buffer';
[W15..W0]
pin 43,27,9,22,6,40,7,30,39,19,41,29,38,20,4,16
;// onde sfasate
DLATCH
node istype 'reg,buffer' ;
LATCH
pin; LATCH per la lettura dello stato del contatore
[WW11..WW0] pin;
17,21,15,3,25,37,26,31,28,42,5,44 uscite del contatore
//entranti nella PAL1.
Equations
[CK1..CK0].clk = CK;
[CK1..CK0] := [CK1..CK0] + 1;
[P11..P0].clk = CK0;
[P11..P0] := [P11..P0] + 1;
// Onde quadre sfasate di 1/16
W0 = ([P11..P0] >= 2048);
W1 = ([P11..P0] < 256) # ([P11..P0] >= 2304);
W2 = ([P11..P0] < 512) # ([P11..P0] >= 2560);
W3 = ([P11..P0] < 768) # ([P11..P0] >= 2816);
W4 = ([P11..P0] < 1024) # ([P11..P0] >= 3072);
W5 = ([P11..P0] < 1280) # ([P11..P0] >= 3328);
W6 = ([P11..P0] < 1536) # ([P11..P0] >= 3584);
W7 = ([P11..P0] < 1792) # ([P11..P0] >= 3840);
W8 = !W0;
W9 = !W1;
W10 = !W2;
W11 = !W3;
W12 = !W4;
W13 = !W5;
W14 = !W6;
W15 = !W7;
// uscite del contatore verso la PAL1 dove avverrà la codifica
DLATCH.clk = !CK0;
DLATCH.d = LATCH;
[Wo11..Wo0].clk = DLATCH.q;
[Wo11..Wo0].d = [P11..P0].fb;
[WW11..WW0] = [Wo11..Wo0].q;
End
Programma PAL1
MODULE serial_PAL1
TITLE 'serializzatore '
CK
pin 11;
[CK6..CK0]
node istype 'reg,buffer';
[C6..C0]
node istype 'reg,buffer'; // contatore per la generazione dei
//segnali del serializzatore
[D9..D0]
node istype 'com';
[Q9..Q0]
node istype 'reg,buffer';
CKPISO
pin ; clock per l’uscita del dato codificato (9.6 kHz)
AS0,BS0,AS1,BS1,E0,E1,S0,S1 pin ; // Selezioni per il MUX e la
codifica ASCII
[WW11..WW0]
pin 20,25,7,37,4,27,5,44,6,9,19,41 ;
[WWW11..WWW0]
node istype 'reg_d';
[Y0..Y3]
node istype 'com';
SOUT
pin 15; // uscita seriale
CKIN
pin; // clock per l’acquisizione del dato da codificare
A = [WWW3..WWW0];
B = [WWW7..WWW4];
C = [WWW11..WWW8];
Y = [Y3..Y0];
SELECT = [E1..E0];
X = .X.;
truth_table
([S1,S0,Q9,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Y0,Y1,Y2,Y3] -> [D8..D1]);
[0,0,X,X,X,X,X,X,X,X,X,X,X,X] -> ^H00;
[0,1,X,X,X,X,X,X,X,X,X,X,X,X] -> ^H0A; codifica LF
[1,0,X,X,X,X,X,X,X,X,X,X,X,X] -> ^H0D; codifica CR
[1,1,X,X,X,X,X,X,X,X,0,0,0,0] -> ^H30;
[1,1,X,X,X,X,X,X,X,X,1,0,0,0] -> ^H31;
[1,1,X,X,X,X,X,X,X,X,0,1,0,0] -> ^H32;
[1,1,X,X,X,X,X,X,X,X,1,1,0,0] -> ^H33;
[1,1,X,X,X,X,X,X,X,X,0,0,1,0] -> ^H34;
[1,1,X,X,X,X,X,X,X,X,1,0,1,0] -> ^H35;
[1,1,X,X,X,X,X,X,X,X,0,1,1,0] -> ^H36;
[1,1,X,X,X,X,X,X,X,X,1,1,1,0] -> ^H37;
[1,1,X,X,X,X,X,X,X,X,0,0,0,1] -> ^H38;
[1,1,X,X,X,X,X,X,X,X,1,0,0,1] -> ^H39;
[1,1,X,X,X,X,X,X,X,X,0,1,0,1] -> ^H41;
[1,1,X,X,X,X,X,X,X,X,1,1,0,1] -> ^H42;
[1,1,X,X,X,X,X,X,X,X,0,0,1,1] -> ^H43;
[1,1,X,X,X,X,X,X,X,X,1,0,1,1] -> ^H44;
[1,1,X,X,X,X,X,X,X,X,0,1,1,1] -> ^H45;
[1,1,X,X,X,X,X,X,X,X,1,1,1,1] -> ^H46;
Equations
[CK6..CK0].clk = CK;
[CK6..CK0] := [CK6..CK0] + 1;
[C6..C0].clk = CK4;
when ([C6..C0] >= 109) then [C6..C0] := 0 else [C6..C0] := [C6..C0]
+ 1;
CKIN = ([C6..C0] > 3) & ([C6..C0] < 7);
AS0 = (([C6..C0] > 7) & ([C6..C0] < 10)) # (([C6..C0] > 27)
& ([C6..C0] < 30)) # (([C6..C0] > 47) & ([C6..C0] < 50));
BS0 = ([C6..C0] > 67) & ([C6..C0] < 70);
S0 = AS0 # BS0;
AS1 = (([C6..C0] > 7) & ([C6..C0] < 10)) # (([C6..C0] > 27)
& ([C6..C0] < 30)) # (([C6..C0] > 47) & ([C6..C0] < 50));
BS1 = ([C6..C0] > 87) & ([C6..C0] < 90);
S1 = AS1 # BS1;
E0 = ([C6..C0] > 24) & ([C6..C0] < 45);
E1 = ([C6..C0] > 44);
CKPISO = ([C6..C0] > 8) & C0;
[WWW11..WWW0].clk = CKIN;
[WWW11..WWW0].d = [WW11..WW0];
when (SELECT == 0) then Y = C;
when (SELECT == 1) then Y = B;
when (SELECT == 2) then Y = A;
when (SELECT == 3) then Y = A;
D9 = 1; // stop bit
D0 = 0; // start bit
Q9 := D9;
when (S1 == 0) & (S0 == 0) then [Q8..Q0] := [Q9..Q1].fb;
// configurazione di
//shift-register
else [Q8..Q0] := [D8..D0];
// acquisizione parallela del dato già codificato
//da far uscire successivamente in modo seriale
SOUT = Q0; // uscita seriale collegata al MAX232 per adattare i livelli
di tensione
//alla seriale del PC
[Q9..Q0].clk = CKPISO;
End
Il corrispondente schema circuitale espresso dai due programmi è
riportato nella figura
1. (formato zip + doc 37Kb).