algorithmus 4 entwurf sequentieller schaltkreise nach der methode huffman-mealy
TRANSCRIPT
Algorithmus 4
Entwurf sequentieller Schaltkreise nach der Methode Huffman-Mealy
Von
Y. Wallach, Haifa
(Eingegangen am 14. ~ebruar 1.967)
procedure Reduk t ion (Zeilen, Spal ten, nzust, naus); value Zeilen, Spal ten; integer Zeilen, Spal ten; integer array nzust, naus; begin integer na, nb, nc, nd, ngrp, nr; booIean la, lb;
integer array temp [l:Zeilen], nenn [l:Zeilen, ]:Spal ten]; comment Die Prozedur behandelt das erste Stadium des Entwurfes einer Digitalanlage, und zwar die Reduktion eines sequentiellml SchMt- werkes nach dem Verfahren yon Huffman-MeMy (siehe z . B . D. A. Huffman: The synthesis of sequential switching circuits, J. Franklin Institute, 257 (1954), S. 161--190, 275--303). Dabei sind Mle SchaltwerkgrSBen (Eingabe, Ausgabe, Geds voll- sti~ndig spezifiziert und als nzust = Matrix der ni~chsten Zusti~nde, naus = Matrix der Ausgaben, beide mit Z e i l e n - ~ Zeilenanzahl und Spal ten = Spaltenanzahl, eingelesen. Als Resultat erh~lt man die Zustandstabelle mit einer mSglichst kleinen Anzahl yon Zus ts (Zeilen). Zu beachten ist, daI~ man, um die bei Huffman vorkom- menden P~eihenverschiebungen zu vermeiden, die Unterprozedur U m n e n n e n beniitzt. Ferner wird auf die verh~ltnism~l~ig groge Anzahl der Befehle der Form:
for i: = A n f a n g step Schritt until Endwer t do if Relat ion then die 5frets aueh in anderen logischen Prozeduren vorkommen und die in Algol nicht kiirzer geschrieben werden kSnnen, aufmerksam gemacht;
procedure Umnen. nen; for na: = 1 step 1 until Zei len do
l o m b : = I step i unti l Spal ten do nenn [na, nb ]: = temp [nzust [na, nb ] ]; ngrp: = 0; nr: = Z e i l e n - - 1; for na: = 1 step 1 until Zei len do temp [na]: = 0; for h a : = 1 step 1 until nr do if temp [na] = 0 then begin nd: = temp [na]: = ngrp ~- 1;
for n b : = na ~- 1 step 1 until Zei len do
168 Y. WALLACIt: Entwurf sequentieller Schaltkreise
if temp [ n b ] = 0 then begin
for nc: = 1 step 1 until Spal ten do if naus [nb, nc] ~= naus [na, nc] then goto va; t emp [nb]: = n d ;
va: end; ngrp: = n d end der Umgrupp ierung; Umnennen; vb:la: = lb: = false; for nd: = 1 step 1 until ngrp do begin
for ha: = 1 step 1 until nr do if t emp [na] = n d then begin
for nb: - - na + 1 step 1 until ZeiIen do if t emp [nb ] = ncl then begin
for he: = 1 step 1 until Spal ten do if nenn [ha, nc] ~= nenn [nb, nc] then begin
la: = lb: = true; temp [nb]: = ngrp + 1; goto vc end;
vc: end; R lb then begin
~grp: -= ngrp + 1; lb: = false; goto vd end
end; vd: end; if la then begin
Umnennen; goto vb end der Unterteilung; for ha: = 1 step 1 until ngrp do begin
for n b : = na step 1 until Zei len do if t emp [nb ] = na then begin t emp [nb]: = temp [na];
for n c : - ~ 1 step 1 until Spal ten do begin nd: = nenn [ha, nc]; nzust [na, nc]: = nenu [nb, nc];
menu [nb, nc]: = n d ; nd: = naus [na, nc]; nau~ [na, nc]: -~ naus [nb, nc];
naus [nb, nc]: = n d end; goto ve
end; re: end; Ze, len: = ngrp
end der Reduk t ion;