15 / 37 · Konsep
Penugasan nonblocking dan pembaruan keadaan serentak
Pisahkan nilai lama dan berikutnya untuk menafsirkan RTL pipeline serta pencacah dengan tepat.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Evaluasi sisi kanan dari keadaan sebelumnya
Pada blok sekuensial berbasis clock, <= mengevaluasi sisi kanan lalu menerapkan hasil pada tahap pembaruan nonblockingNonblocking Penugasan <= pada RTL sekuensial: sisi kanan dievaluasi lalu pembaruan dijadwalkan, sehingga register pada tepi sama menghitung dari keadaan lama.. Beberapa registerRegister Rangkaian penyimpan beberapa bit keadaan. Register sinkron mata kuliah ini menangkap masukan yang ditentukan pada tepi clock. Selengkapnya dapat diperbarui pada tepi sama tanpa nilai baru merambat mengikuti urutan baris.
always_ff @(posedge clk) begin
if (rst) begin
a <= 8'd0;
b <= 8'd0;
end else begin
a <= d;
b <= a;
end
endDari a=b=0 dengan masukan 5,9,2, pasangan setelah tepi adalah (5,0),(9,5),(2,9). Menafsirkan baris kedua membaca a baru berarti menghilangkan satu tahap pipelinePipeline Struktur yang membagi perhitungan menjadi tahap berregister untuk memproses beberapa masukan bertumpang tindih. Data, valid, dan kontrol harus selaras. Selengkapnya.
Setiap kolom mengamati tepi naikTepi naik Saat clock berubah 0 ke 1, berbeda dari tingkat yang mencakup seluruh interval CLK=1. Selengkapnya. Masukan adalah sebelum tepi dan after adalah keadaan setelah pembaruan; penjajaran bukan tundaan propagasiTundaan propagasi Waktu sejak masukan berubah hingga keluaran stabil pada nilai benar. Kesetaraan logika berbeda dari karakteristik waktu. Selengkapnya fisik. Dari a=b=0, a menyimpan d baru sementara b menyimpan a lama, sehingga kedua baris berselisih satu tahap.
Lihat data gelombang
| Sinyal | Gelombang | Nilai bus |
|---|---|---|
| edge | 234 | E0 → E1 → E2 |
| d | 234 | 5 → 9 → 2 |
| a sesudah | 234 | 5 → 9 → 2 |
| b sesudah | 234 | 0 → 5 → 9 |
Mengapa penggantian dengan blocking berbahaya
Dengan a=d; b=a; dalam blok sama, b dapat memakai a yang telah berubah. Penjadwalan terhadap blok sekuensial lain juga dapat menimbulkan race. Gunakan blocking untuk perhitungan kombinasional dan nonblocking untuk keadaan sebagai aturan dasar; pengecualian membutuhkan pemahaman makna kejadian.
Hindari beberapa penugasan pada register sama
Jika beberapa penugasan nonblocking q dijalankan dalam satu prosedur, penugasan terakhir yang dijalankan dapat menentukan hasil. Gunakan if / else if / else atau variabel next-state eksplisit, bukan beberapa if independen yang menyembunyikan prioritas. Hindari beberapa blok menggerakkan register sama.
Dalam peninjauan RTL, tulis satu persamaan keadaan berikutnya per register. Dua persamaan atau kondisi tidak terdefinisi menjadi tanda untuk meninjau ulang prioritas.
Coba sendiri
Dari a=1,b=4, satu blok clock menjalankan a<=b; b<=a;. Tentukan keadaan setelah satu dan dua tepi.
Baca penjelasan
Setelah satu tepi, (a,b)=(4,1); setelah dua, (1,4). Penugasan membaca keadaan lama sama sehingga nilai bertukar. Dengan a=b; b=a;, keduanya dapat menjadi b lama; fungsinya berbeda.