Altifigence Academy

28 / 37 · Konsep

Mesin keadaan: memisahkan keadaan, transisi, dan keluaran

Bangun FSM dari tabel spesifikasi dan bandingkan Moore/Mealy, keadaan ilegal, serta kebijakan permintaan.

Keadaan merangkum hanya masa lalu yang diperlukan

Jika masukan sekarang tidak cukup menentukan keluaran, definisikan keadaan tersimpan. Alih-alih menyimpan seluruh riwayat, bedakan hanya informasi yang diperlukan untuk menentukan perilaku masa depan.

Sk+1=F(Sk,Xk)S_{k+1}=F(S_k,X_k)

Pertimbangkan pengontrol mulai dan selesai: IDLE menunggu, BUSY memproses, DONE menandai selesai satu siklus.

Keadaan sekarangKondisiKeadaan berikutnyabusydone
IDLEstart=0IDLE00
IDLEstart=1BUSY00
BUSYwork_done=0BUSY10
BUSYwork_done=1DONE10
DONESelaluIDLE01

busy dan done adalah keluaran keadaan sekarang. Setelah tepi yang menerima selesai pada BUSY, keadaan menjadi DONE dan done=1: ini keluaran Moore.

Setiap kolom mengamati tepi naikTepi naik Saat clock berubah 0 ke 1, berbeda dari tingkat yang mencakup seluruh interval CLK=1. Selengkapnya, masukan sebelum dan keadaan after sesudah; penjajaran bukan tundaan fisikTundaan propagasi Waktu sejak masukan berubah hingga keluaran stabil pada nilai benar. Kesetaraan logika berbeda dari karakteristik waktu. Selengkapnya. Dari IDLE, penerimaan work_done membawa keadaan ke DONE dan done=1 setelah tepi. Setelah DONE, selalu kembali IDLE tanpa bergantung start.

Keluaran Moore mengikuti keadaan saat ini
Lihat data gelombang
Data gelombang: setiap karakter mewakili satu interval; titik mempertahankan keadaan sebelumnya; p adalah satu siklus clock.
SinyalGelombangNilai bus
edge2345E0 → E1 → E2 → E3
start10.1
work_done0.10
keadaan sesudah2.34BUSY → DONE → IDLE
busy sesudah1.0.
done sesudah0.10

RTL yang memisahkan transisi dan penyimpanan

SystemVerilog
typedef enum logic [1:0] {IDLE, BUSY, DONE} state_t;
state_t state, next_state;
always_comb begin
  next_state = state;
  case (state)
    IDLE: if (start) next_state = BUSY;
    BUSY: if (work_done) next_state = DONE;
    DONE: next_state = IDLE;
    default: next_state = IDLE;
  endcase
end
always_ff @(posedge clk)
  if (rst) state <= IDLE;
  else state <= next_state;
assign busy = (state == BUSY);
assign done = (state == DONE);

Contoh SystemVerilog ini menjelaskan struktur kontrol. Pembentukan work_done oleh pemroses terkait serta sinkronisasi masukan perlu diimplementasikan terpisah.

Pertanyaan yang mudah terlewat

Rangkaian ini mengabaikan start pada BUSY dan DONE. Untuk menerima permintaan baru saat selesai, ubah tabel transisi dahulu. Keluaran Mealy memakai keadaan dan masukan sekarang agar cepat bereaksi, tetapi timing serta glitch jalur kombinasional harus diperiksa. Enkode biner/one-hotOne-hot Representasi dengan tepat satu bit bernilai 1. Jika semua nol juga diizinkan, istilahnya one-hot-or-zero. Selengkapnya dan klasifikasi Moore/Mealy adalah keputusan berbeda.

Coba sendiri

start=1 selama satu siklus pada DONE. Apakah FSM langsung memulai pekerjaan baru? Apa yang diubah agar pekerjaan berurutan diizinkan?

Baca penjelasan

Tidak: DONE→IDLE mengabaikan permintaan itu. Tambahkan transisi DONE→BUSY jika start, atau protokol penyimpanan permintaan. Verifikasi ulang durasi done dan waktu penerimaan menurut kontrak baru.

Pilihan berlaku di peramban ini. Ubah kapan saja di bagian bawah halaman.