Sonlu Durumlu Makineler Geri besleme büyüleyici bir mühendislik prensibidir. Başlangıçta basit olan bir cihazı daha karışık bir sürece döndürebilir. geri beslemenin kasıtlı olarak şaşırtıcı etkileriyle devre tasarımlarına parçalanmış etkilerini görmekteyiz: Kıyaslayıcı + negatif geri besleme -----------> kontrol edilebilinir-kazanç yükselteci Kıyaslayıcı + pozitif geri besleme -----------> Kıyaslayıcı eğrilerle kombine doğru + pozitif geri besleme --> çoklu tireştirici Cihaz üretim süreci alanında, geri besleme basit bir ölçüm sistemini kontrol edebilen bir mekanizmaya dönüştürmek için kullanılır: Ölçüm sistemi + negatif geri besleme ---> kapalı-döngü kontrol sistemi Hem negatif hem de pozitif geri besleme, bir sistemin veya cihazın işlevine bütün yeni dinamikleri eklemeye meyillidir. Diğer durumlarda ilginç gelirken, bazen bu yeni dinamikler uygulamada kullanışlı bulunur. Başvuru çizelgelerinin hafıza cihazlarına programlanmasıyla, veri çıkışından adres girişlerine geri besleme bütünüyle yeni bir cihazı yaratır: Sonlu Durumlu Makine veya FSM: Yukarıdaki devre temel bir fikiri geliştirir:her bir adreste depolanan veri ROM'un tanımlandığı gelecek depolama bölgesi olur. Sonuç çıkışta zamanla çıkışta ikili sayıların(rom da takip eden aralıklarda programlanan) özel bir aralığı olur. Sinyal zamanlama problemlerini kesmek için 4-bit D- tipi flip-flop boyunca veri çıkışlarını geriye adres girişlerine bağlmaya ihtiyaç duyarız, böylece aralık kontrollü saat itmelerinin atımıyla adım adım yol alır:
Böyle bir cihazın çalışması için yapısı, her biri kapıda tanımlayan numaralarla (adres), ve her biri diğer bir Posta kutusu üzerine yazılmış(veri) adres le bir parça kağıt içererek, posta-ofisi kutularının sırası gibi olabilir. Bir kişi ilk Posta kutusunu açarak diğer Posta kutusunu açtığında bulur. Posta kutularında adreslerin özel bir şeklini depolayarak, her bir kutunun açıldığında, ve böylece aralığın hangi kağıdının okunduğu aralığı belirleyebiliriz. ROM da 16 tanımlanabilir hafıza bölgesine sahip olduğumuzda, bu Sonlu Durumlu Makine mandallanabilen 16 farklı durgun "durumlara" sahip olacaktı. Bu durumların her birinde, diğer durumun tanımı ROM'da programlanacaktı, diğer saat atımının sinyalinin beklenmesi ROM'u adres olarak geri beslerdi. Böyle bir FSM'in kullanışlı bir uygulaması düzensiz sayma aralığını gri şifre gibi işletecekti: Gri şifre sayma aralığı: 0000 -------> 0001 0 0000 0001 -------> 0011 1 0001 0010 -------> 0110 2 0011 0011 -------> 0010 3 0010 0100 -------> 1100 4 0110 0101 -------> 0100 5 0111 0110 -------> 0111 6 0101 0111 -------> 0101 7 0100 1000 -------> 0000 8 1100 1001 -------> 1000 9 1101 1010 -------> 1011 10 1111 1011 -------> 1001 11 1110 1100 -------> 1101 12 1010 1101 -------> 1111 13 1011 1110 -------> 1010 14 1001 1111 -------> 1110 15 1000
Gri şifre sayma aralığını FSM'in yapacak olduğu gibi takip etmeye çabalamak 0000 dan başlayarak, depolana veriyi adres(0001) den diğer adrese takip etmek, ve devamında (0011)'e, (0010)'a ve (0110)'a, vb. Sonuç, tabloda gösterilen program için, rasgele biçim gibi görünen adresten adrese atlayan tanımlama aralığıdır, fakat girilen her bir adres kontrol edildiğinde, 4-bit gri şifre için doğru sırayı takip ettiğini bulacaksınız. FSM son programlanan duruma ulaştığında(adres 1000), depolanan veri diğer saat atımıyla bütün aralığı tekrar 0000 basamağından başlatan0000 dır. Daha fazla adres hattıyla, ve daha fazla programlayıcı veri eklenmesiyle ROM kullanarak yukarıdaki devrenin kapasitesini genişletebilirdik: Şimdi, "fonksiyonel kontrol" girişleri olarak daha fazla adres hatlarını kullanılmasıyla Aritmetik Doğru Birime(+, -, x, / fonksiyonları) dönüştürdüğümüz başvuru çizelgesi toplayıcı devresi gibi, bu FSM sayıcısı birden daha fazla sayma aralığını işlemek için kullanılır, faklı bir aralık iki fonksiyonlu kontrol hatlarının her biri için dört geri besleme bitleri kombinasyonları girer(a4 = 0 veya 1). 00000 -------> 0001 10000 -------> 0001 00001 -------> 0010 10001 -------> 0011 00010 -------> 0011 10010 -------> 0110 00011 -------> 0100 10011 -------> 0010 00100 -------> 0101 10100 -------> 1100 00101 -------> 0110 10101 -------> 0100 00110 -------> 0111 10110 -------> 0111 00111 -------> 1000 10111 -------> 0101 01000 -------> 1001 11000 -------> 0000 01001 -------> 1010 11001 -------> 1000 01010 -------> 1011 11010 -------> 1011 01011 -------> 1100 11011 -------> 1001 01100 -------> 1101 11100 -------> 1101 01101 -------> 1110 11101 -------> 1111
01110 -------> 1111 11110 -------> 1010 01111 -------> 0000 11111 -------> 1110 A4 0 ise, FSM ikili de sayar; A4 1 ise, FSM Gri Şifre de sayar. Her iki durumda, Sayma aralığı düzensizdir: programlayıcının geçici isteğiyle belirlendi. O konu için, sayma aralığı 16 basamağa hiç sahip olmak zorunda değildir, programlayıcı bütün basamakların her birinde aralığı 0000'a döndürmeye karar verebilir. Tamamen esnek bir sayma cihazının, ROM'da yazılımla(programlama) davranışı kesin olarak belirlenir. Veri çıkış hatları ve ekstra adres girişi ile bir ROM çipini kullanarak FSM'nin kapasitesini daha fazla genişletebiliriz. Aşağıdaki devreyi örnek alarak: Burada, D0'dan D3'e veri çıkışları A0'dan A3 adres hatlarına geri besleme için özellikle kullanılırdı. Tarih çıkışı hatları D4'ten D7 FSM'nin "durum" değerinden farklı çıkış programlanabilir. Bunu yaparak, dört veri çıkışı bitleri bört adres bitlerini geri besleyebilir, bu hala 16-durum cihazıdır. Bununla beraber, Diğer veri çıkış hatlarından gelen çıkış veriye sahip olunması öncekine göre programlayıcıya daha fazla özgürlük verir. Diğer bir değile, bu cihaz saymaktan başka bir çok şey yapabilir! Bu FSM' nin programlanan çıkışı sadece adres hatlarının geri beslemelerinin durumuna değil (A0'dan A3), giriş hatlarının durumlarına da bağlıdır. D-tipi flip/flop'un saat sinyali girişi atım jenaratörüne de bağlı olmak zorunda değildir. Bunları daha ilginç yapmak için, flip/flop dışarıdan sarılabilirdi, böylece giriş sinyali onu tanımladığında FSM diğer duruma geçer.
Şimdi "programlanabilir" kelimesini tam manasıyla açıklayan bir cihaza sahibiz. ROM'a yazılan veri en doğru şekildeki bir programdır ve çıkışlar cihaza giriş temelli ön kurulum sırasını takip eder ve aralığında cihazın hangi basamağı takip edeceğini gösterir. Turing Makinası'nın işletim tasarımına çok yakındır, teorik hesaplama cihazı Alan Turing tarafından icat edildi, yeterli hafıza verildiği takdirde matematiksel ispatı bilinen her aritmetik problemi çözebilecek yetenektedir