Topik ini menambahkan kemampuan mengingat pada rangkaian yang sejauh ini bersifat kombinasional, yaitu keluarannya ditentukan sepenuhnya oleh masukan yang sedang berada di kabelnya. Tiga gagasan diperkenalkan secara berurutan, yaitu clock sebagai sinyal periodik, state sebagai informasi yang ditahan di dalam rangkaian, dan D flip-flop sebagai penyimpan satu bit. Seusai topik ini, perilaku penyalinan pada tepi naik dapat dimodelkan sendiri dengan Python dan menjadi fondasi bagi register sebagai penyimpan multi-bit serta memori sebagai penyimpan kata dalam jumlah besar.
Rangkaian kombinasional dan sekuensial#
Rangkaian kombinasional memetakan masukan menjadi keluaran tanpa ingatan. Penjumlah biner adalah contohnya, karena nilai keluarannya berubah seketika mengikuti masukan yang sedang diberikan dan tidak ada jejak yang tersisa ketika masukannya dilepas. Tabel kebenaran merangkum seluruh perilaku rangkaian semacam ini, dan tabel itu tidak pernah berubah dari waktu ke waktu.
Rangkaian sekuensial menambahkan satu unsur baru, yaitu umpan balik yang melewati elemen penyimpan. Keluarannya tidak hanya ditentukan oleh masukan saat ini, tetapi juga oleh urutan masukan yang pernah datang sebelumnya. Urutan itu tersimpan sebagai state, yakni kumpulan bit yang ditahan di dalam rangkaian. Penghitung langkah, kalkulator dengan tombol memori, dan seluruh register di dalam prosesor bekerja dengan prinsip yang sama.
Perbedaan kedua jenis rangkaian memengaruhi cara analisisnya. Rangkaian kombinasional cukup dijelaskan dengan tabel kebenaran tunggal, sedangkan rangkaian sekuensial membutuhkan waktu sebagai sumbu tambahan, yaitu keadaan sebelum dan sesudah suatu peristiwa. Clock menyediakan peristiwa yang menjadi penanda waktu tersebut, dan elemen penyimpan yang bereaksi terhadap clock itulah pembahasan sisa topik ini.
Clock sebagai sinyal periodik#
Clock adalah sinyal listrik yang berbolak-balik antara dua nilai, yaitu 0 dan 1, dengan perioda yang tetap. Satu perioda memuat fase rendah dan fase tinggi. Peralihan dari 0 ke 1 disebut tepi naik (rising edge), sedangkan peralihan dari 1 ke 0 disebut tepi turun (falling edge). Hubungan perioda dan frekuensi dinyatakan dengan rumus , dengan sebagai frekuensi dan sebagai perioda dalam detik. Clock dengan perioda 1 nanodetik berarti berdenyut 1 miliar kali per detik.
Perangkat digital sinkron menempatkan clock sebagai pengatur waktu bersama. Setiap elemen penyimpan di dalam chip melihat tepi yang sama, dan seluruh perpindahan state hanya terjadi pada tepi itu, sehingga kejadian di dalam prosesor dapat dibaca sebagai deretan langkah yang berurutan. Frekuensi prosesor sebesar 3 GHz berarti tepi naik tiba 3 miliar kali setiap detik, dan setiap tepi menjadi batas satu langkah perhitungan.
Pada simulasi sepanjang jalur ini, waktu nyata sengaja tidak dimodelkan. Satu tepi naik dinyatakan sebagai satu langkah perulangan Python, sehingga urutan kejadian menjadi deterministik dan keluarannya dapat direproduksi kapan pun. Pendekatan ini meniru cara perancang digital membaca gelombang clock, yaitu menghitung tepinya alih-alih mengukur jeda di antara tepi.
Latch dan flip-flop#
Dua jenis rangkaian penyimpan satu bit perlu dibedakan sejak awal, yaitu latch dan flip-flop. Keduanya memuat masukan data D dan keluaran Q, tetapi keduanya berbeda dalam cara merespons clock. Latch bersifat level-sensitive, yakni transparan selama sinyal enable berada pada level tertentu. Selama enable aktif, Q terus mengikuti D, dan begitu enable nonaktif, nilai terakhir yang tertangkap ditahan.
# tidak-dijalankan
if enable == 1:
q = d # level aktif: Q transparan dan mengikuti D
# flip-flop tepi naik hanya menyalin sekali, tepat pada tepi naikFlip-flop D bersifat edge-triggered, yaitu bereaksi pada peralihan sinyal, bukan pada levelnya. Pada flip-flop tepi naik, Q menyalin D tepat saat tepi naik terdeteksi, lalu menahan nilai itu sampai tepi naik berikutnya. Perubahan D di antara dua tepi sama sekali tidak memengaruhi Q. Sifat sekali-dalam-satu-tepi inilah yang membuat langkah perhitungan sinkron dapat disusun bertingkat tanpa saling menabrak.
Keunggulan flip-flop terlihat jelas pada rangkaian yang besar. Jendela penyalinan latch terbuka sepanjang fase aktif, sehingga sinyal yang berubah di tengah fase ikut lolos masuk dan sulit ditelusuri. Flip-flop menyempitkan jendela itu menjadi satu titik waktu, dan titik inilah yang dipakai sebagai batas antara satu langkah dan langkah berikutnya. Seluruh komponen penyimpan pada jalur ini, mulai dari register hingga program counter, dibangun di atas flip-flop tepi naik.
Simulasi D flip-flop#
Perilaku D flip-flop cukup sederhana untuk dimodelkan dengan beberapa baris Python. Kelas DFlipFlop di bawah ini menahan satu nilai Q, lalu memperbaruinya hanya pada pemanggilan metode yang mewakili tepi naik. Tabel yang dicetak memuat nomor tepi, nilai D yang diberikan, Q sebelum tepi, dan Q sesudahnya. Daftar d_urutan dapat diubah untuk menguji urutan masukan lain.
# Simulasi D flip-flop yang dipicu tepi naik clock.
# Q menyalin D hanya pada tepi naik, lalu menahan nilainya.
class DFlipFlop:
"""D flip-flop tepi naik dengan masukan D dan keluaran Q."""
def __init__(self):
self.q = 0
def tepi_naik(self, d):
"""Proses satu tepi naik dan kembalikan (Q sebelum, Q sesudah)."""
q_sebelum = self.q
self.q = d
return q_sebelum, self.q
# Nilai D pada setiap tepi naik, dari tepi pertama sampai kedelapan.
d_urutan = [1, 1, 0, 1, 0, 0, 1, 0]
flipflop = DFlipFlop()
print("tepi | D | Q sebelum | Q sesudah")
print("-----+----+-----------+----------")
for nomor, d in enumerate(d_urutan, 1):
sebelum, sesudah = flipflop.tepi_naik(d)
print(f"{nomor:4d} | {d:2d} | {sebelum:9d} | {sesudah:8d}")tepi | D | Q sebelum | Q sesudah
-----+----+-----------+----------
1 | 1 | 0 | 1
2 | 1 | 1 | 1
3 | 0 | 1 | 0
4 | 1 | 0 | 1
5 | 0 | 1 | 0
6 | 0 | 0 | 0
7 | 1 | 0 | 1
8 | 0 | 1 | 0Baca tabelnya per baris. Pada tepi keempat, D bernilai 1 sementara Q sebelumnya 0, dan tepat pada tepi itu Q berubah menjadi 1. Pada tepi keenam, D bernilai 0 dan Q ikut bernilai 0, karena penyalinan tetap berlangsung meskipun nilai yang disalin sama dengan nilai lama. Tidak ada satu baris pun yang menunjukkan Q berubah di luar tepi, karena model hanya menyediakan satu titik pembaruan, persis seperti rangkaian aslinya.
Diagram berikut merangkum dua sisi yang saling melengkapi, yaitu simbol D flip-flop beserta gelombang clock yang memicunya. Segitiga pada masukan bawah adalah penanda konvensional bahwa masukan itu sensitif terhadap tepi, sedangkan empat lingkaran pada gelombang menandai tempat penyalinan terjadi.
Ringkasan#
- Rangkaian sekuensial menyimpan state melalui umpan balik yang melewati elemen penyimpan, berbeda dari rangkaian kombinasional yang keluarannya hanya fungsi masukan saat ini.
- Clock adalah sinyal periodik, dan tepi naiknya dipakai sebagai batas waktu antar langkah perhitungan pada perangkat digital sinkron.
- Latch bersifat level-sensitive dan transparan selama enable aktif, sedangkan D flip-flop bersifat edge-triggered dan hanya menyalin D ke Q pada tepi naik.
- Pada simulasi, satu tepi naik dinyatakan sebagai satu langkah perulangan, sehingga urutan kejadian menjadi deterministik.
Referensi#
- Computation Structures — MIT OpenCourseWare — Mata kuliah yang membahas clock, flip-flop, dan disiplin waktu rangkaian sekuensial.
- Nand to Tetris — Shimon Schocken dan Noam Nisan — Proyek pembelajaran yang membangun flip-flop, register, dan memori dari gerbang dasar.