Altifigence Academy

5 / 24 · Konsep

Baca transfer register pada tepi clock

Pisahkan keadaan lama dan berikutnya, lalu telusuri cara sinyal enable mempertahankan nilai yang disimpan.

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.

SystemVerilog
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];
end

Reset 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.

Tepirstenxacc lamaacc baru
0119Tidak diketahui0
101707
20010077
30125071

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.

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