5 / 24 · Konsep
Baca transfer register pada tepi clock
Pisahkan keadaan lama dan berikutnya, lalu telusuri cara sinyal enable mempertahankan nilai yang disimpan.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Semua register membaca keadaan lama
Mulailah dengan mengidentifikasi informasi yang harus bertahan antarsiklus. Akumulator, operand yang ditangkap, penghitung perulangan, dan valid keluaran merupakan keadaan. Jumlah akumulator saat ini dan operand merupakan nilai kombinasional. Menuliskan variabel saja tidak menjelaskan penyimpanan; tentukan peristiwa yang menangkap nilainya.
Akumulator ini menambahkan x hanya pada tepi naik saat en aktif. Saat en rendah, nilainya dipertahankan. Hasil antara sembilan bit membuat penjumlahan eksplisit; pemilihan delapan bit rendahnya mendefinisikan perilaku modulo-256. Penugasan nonblocking dalam always_ff menjadwalkan keadaan berikutnya menggunakan nilai yang dibaca pada tepi saat ini. Membaca blok itu sebagai penugasan perangkat lunak yang langsung berlaku menghasilkan penafsiran keliru ketika ada beberapa register.
logic [7:0] acc;
logic [8:0] next_sum;
assign next_sum = {1'b0, acc} + {1'b0, x};
always_ff @(posedge clk) begin
if (rst) acc <= 8'd0;
else if (en) acc <= next_sum[7:0];
endReset bersifat sinkron dan lebih diprioritaskan daripada enable. Tidak adanya penugasan sekuensial saat en rendah berarti register mempertahankan nilainya. Sebaliknya, tidak adanya penugasan pada jalur kombinasional dapat menyiratkan latch yang tidak diinginkan. Untuk logika kombinasional keadaan berikutnya, berikan nilai bawaan, lalu ganti untuk kondisi tertentu.
| Tepi | rst | en | x | acc lama | acc baru |
|---|---|---|---|---|---|
| 0 | 1 | 1 | 9 | Tidak diketahui | 0 |
| 1 | 0 | 1 | 7 | 0 | 7 |
| 2 | 0 | 0 | 100 | 7 | 7 |
| 3 | 0 | 1 | 250 | 7 | 1 |
Pada tepi 2, masukan 100 yang terlihat tidak diterima. Pada tepi 3, 7+250=257 dipersempit menjadi 1. Membedakan penyajian dari penerimaan tetap penting ketika en nantinya menjadi valid AND ready.
Untuk a<=x; b<=a;, a lama=5 dan x=9 menghasilkan a baru=9 dan b=5. Jika b harus menerima 9, hubungkan masukannya ke x. Lengkapi dahulu kolom keadaan lama, lalu hitung semua nilai keadaan berikutnya secara bersamaan; cara ini memperlihatkan ketidakselarasan satu siklus antara data dan kendali.
Coba sendiri
Mula-mula a=4 dan b=0. Masukan x berturut-turut 8 lalu 12, dengan a<=x; b<=a pada setiap tepi. Berapa a dan b setelah tepi kedua?
Baca penjelasan
Setelah tepi pertama, a=8 dan b=4. Setelah tepi kedua, a=12 dan b=8. Setiap pembaruan b menggunakan a lama, sehingga x=12 tidak melewati kedua register pada satu tepi.