Altifigence Academy

18 / 63 · Konsep

Pembanding dan spesifikasi nilai batas

Bedakan perbandingan unsigned dan signed atas pola bit sama serta verifikasi kondisi batas.

Bit berbeda dengan bobot tertinggi menentukan urutan

Bandingkan dua vektor unsignedUnsigned Interpretasi pola bit sebagai bilangan bulat nonnegatif. Rentang n bit adalah 0 hingga 2^n−1 dan dapat berbeda dari interpretasi signed pola yang sama. Selengkapnya dari MSBMSB Bit berbobot tertinggi. Indeksnya bergantung arah deklarasi vektor, sehingga tidak selalu nomor indeks terbesar. Selengkapnya hingga menemukan bit pertama yang berbeda. Sisi bernilai 1 pada posisi itu lebih besar. Dengan ei=ai⊕bi‾e_i=\overline{a_i\oplus b_i}, syarat lebih besar pada empat bit adalah:

gt⁡(a,b)=a3b‾3+e3a2b‾2+e3e2a1b‾1+e3e2e1a0b‾0\operatorname{gt}(a,b)=a_3\overline b_3+e_3a_2\overline b_2+e_3e_2a_1\overline b_1+e_3e_2e_1a_0\overline b_0

gt⁡(a,b)\operatorname{gt}(a,b) di kiri adalah hasil Boolean perbandingan. Posisi rendah hanya berpengaruh jika semua posisi lebih tinggi sama. Kesamaan keseluruhan adalah AND seluruh eie_i.

Perbandingan signed menafsirkan tanda dahulu

4'b1111 dan 4'b0001 bernilai 15 dan 1 sebagai unsigned, tetapi -1 dan 1 sebagai signed. Jika tandanya berbeda, nilai negatif lebih kecil. Perbedaan logic [3:0] dan logic signed [3:0] adalah interpretasi operasi, bukan kapasitas penyimpanan.

SystemVerilog
logic [3:0] a, b;
logic unsigned_lt, signed_lt;
assign unsigned_lt = a < b;
assign signed_lt = $signed(a) < $signed(b);

Kode ini memakai operand selebar sama. Jika lebarnya berbeda, tentukan dahulu lebar perluasan sebelum melakukan cast sederhana.

Kontrak tanda dapat membalik urutan pola bit yang sama. Jangan langsung menerapkan aturan unsigned dari bit tinggi pada nilai signed.

Tentukan interpretasi sebelum membandingkan pola bit
  1. 1111 vs 0001: Masukan 4 bit yang sama
  2. Tanpa tanda: 15 lebih besar dari 1
  3. Bertanda: −1 lebih kecil dari 1

Tetapkan batas dengan kalimat yang tegas

Pada buffer berkapasitas 16 elemen, count==16 berarti penuh dan count<16 mengizinkan penambahan. Jika count hanya empat bit, 16 tidak dapat direpresentasikan sehingga kondisi full gagal. Periksa fungsi pembanding bersama rentang nilai yang dibandingkan.

Untuk ambang TT, utamakan pengujian T−1,T,T+1T-1,T,T+1 dan tangani nilai di luar rentang secara terpisah. Buat pengujian yang sengaja membedakan < dan <=. Membandingkan nilai setelah wraparound unsigned tidak dapat memulihkan carry yang sudah hilang.

Coba sendiri

Berapa bit yang diperlukan untuk count okupansi FIFO 0–16? Apakah persamaan perbandingan saja menentukan izin pop dan push bersamaan saat full?

Baca penjelasan

Diperlukan lima bit untuk 17 nilai. Menerima push pada tempat yang dibebaskan pop bersamaan adalah kebijakan antarmuka. count < 16 saja dapat menolak pertukaran saat penuh; untuk mengizinkannya, sertakan kondisi penerimaan pop yang sebenarnya.

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