Altifigence Academy

14 / 37 · Konsep

Flip-flop, enable, dan prioritas kontrol

Definisikan penahanan, pemuatan, dan reset melalui keadaan berikutnya serta hindari clock gating tidak disengaja.

Register menyimpan fungsi keadaan berikutnya

Nyatakan nilai sebelum tepi sebagai QkQ_k, masukan yang diterima pada tepi sebagai DkD_k, dan nilai setelah pembaruan sebagai Qk+1Q_{k+1}. RegisterRegister Rangkaian penyimpan beberapa bit keadaan. Register sinkron mata kuliah ini menangkap masukan yang ditentukan pada tepi clock. Selengkapnya dengan reset lebih utama daripada enable adalah:

Qk+1={0rk=1Dkrk=0, ek=1Qkrk=0, ek=0Q_{k+1}=\begin{cases} 0 & r_k=1\\ D_k & r_k=0,\ e_k=1\\ Q_k & r_k=0,\ e_k=0 \end{cases}

Saat enable=0, nilai tersimpan bertahan walaupun D berubah. Menghilangkan jalur penahanan ini dalam RTL sekuensial berbeda dari melupakan penugasan pada logika kombinasional: penahanan merupakan bagian kontrak register.

SystemVerilog
module enabled_register (
  input logic clk, rst, en,
  input logic [7:0] d,
  output logic [7:0] q
);
  always_ff @(posedge clk) begin
    if (rst) q <= 8'b0;
    else if (en) q <= d;
  end
endmodule

Reset ini sinkron dan active-high. Jika reset=enable=1 pada tepi, 0 disimpan. Membalik urutannya mengubah fungsi, sehingga prioritas harus tercantum dalam kode dan pengujian, bukan hanya komentar.

Setiap kolom mencatat satu tepi naikTepi naik Saat clock berubah 0 ke 1, berbeda dari tingkat yang mencakup seluruh interval CLK=1. Selengkapnya. Masukan adalah nilai tepat sebelum tepi; keadaan bersufiks after adalah nilai setelah pembaruan. Penjajaran kolom menunjukkan urutan sampel, bukan tundaan propagasiTundaan propagasi Waktu sejak masukan berubah hingga keluaran stabil pada nilai benar. Kesetaraan logika berbeda dari karakteristik waktu. Selengkapnya fisik. Q awal 0xA5: kolom pertama menahan, kedua menulis, ketiga mempertemukan reset dan enable.

Prioritas reset, enable, hold
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
reset0.10
enable01.0
D2.343C → 99 → 77
Q sesudah234.A5 → 3C → 00

Enable bukan pemotong clock langsung

Memakai gated_clk = clk & en sembarangan sebagai clock memungkinkan perubahan en menciptakan pulsa pendek atau tepi tak terduga. Pemetaan RTL clock enable ke sel merupakan tanggung jawab alur sintesis dan implementasi. Clock gating untuk menghemat daya memerlukan desain tersendiri dengan sel tepat dan verifikasi timing.

Prioritas tampak ketika reset, load, dan enable bertumpuk. Mengaktifkan masing-masing sendirian tidak cukup. Dengan q=A5, en=0, dan d=3C, q harus bertahan; pada tepi berikutnya dengan en=1, q harus menyimpan 3C.

Coba sendiri

Dari q=0xA5, berikan satu tepi dengan rst=1, en=1, d=0x3C, lalu satu tepi dengan rst=0, en=0. Berapa q setelah masing-masing tepi?

Baca penjelasan

Pada tepi pertama, reset berprioritas menghasilkan 0. Pada tepi berikutnya, enable=0 mempertahankan 0. Jika reset diletakkan di dalam kondisi en, reset saat en=0 dapat terlewat; uji kombinasi ini juga.

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