Altifigence Academy

6 / 37 · Konsep

Indeks vektor, urutan bit, dan tanda

Baca jalur data dengan memisahkan indeks, urutan transmisi serial, dan interpretasi aritmetika.

Indeks adalah nama; arah deklarasi menentukan maknanya

Pada logic [7:0] a;, a[7] berada paling kiri. Pada logic [0:7] b;, b[0] paling kiri. Memberi 8'h96 pada keduanya menghasilkan pola kiri-ke-kanan sama, 10010110, tetapi indeks bitnya berbeda. Asumsi “bit 0 selalu LSBLSB Bit berbobot terendah. Periksa arah penulisan dan aturan indeks bersama.” hanya boleh dipakai setelah memeriksa deklarasi.

Arah konsisten di seluruh antarmuka memudahkan peninjauan. Nyatakan juga urutan tampilan gelombang dan array bit berkas. Array JSON masukan mata kuliah ini ditulis mulai LSB; vektor RTL biasanya dibaca mulai MSBMSB Bit berbobot tertinggi. Indeksnya bergantung arah deklarasi vektor, sehingga tidak selalu nomor indeks terbesar..

Periksa arah melalui sambungan nyata

Pada q <= {q[1:0], din};, q[2] berikutnya menerima q[1] lama, q[1] menerima q[0] lama, dan q[0] menerima din.

q2next=q1,q1next=q0,q0next=dq_2^{next}=q_1,\quad q_1^{next}=q_0,\quad q_0^{next}=d

Indeks mana menerima sinyal mana adalah spesifikasi lebih tepat daripada arah gambar.

Panah menunjukkan posisi penyimpanan yang dilewati satu bit. Semua registerRegister Rangkaian penyimpan beberapa bit keadaan. Register sinkron mata kuliah ini menangkap masukan yang ditentukan pada tepi clock. Selengkapnya membaca nilai lama pada tepi sama; din tidak langsung mencapai q2 dalam satu tepi.

Baca jalur pergeseran dari indeks bit
  1. din: Bit yang diterima pada tepi ini
  2. q0: Tangkap din
  3. q1: Tangkap q0 lama
  4. q2: Tangkap q1 lama

Geser logis dan aritmetika

>> adalah geser kanan logis yang mengisi posisi kosong di kiri, sisi paling signifikan, dengan nol. >>> memperluas tanda ketika operand kirinya signed. Pola sama dapat menghasilkan nilai berbeda menurut deklarasi signed operand.

SystemVerilog
logic signed [7:0] x;
logic [7:0] logical_right, arithmetic_right;
assign logical_right = x >> 1;
assign arithmetic_right = x >>> 1;

Untuk x=8'b11111000 (-8), hasilnya 01111100 dan 11111100. Geser kanan aritmetika bilangan negatif tidak selalu mengikuti aturan pembulatan pembagian bilangan bulat negatif; periksa tersendiri dalam algoritma numerik.

Coba sendiri

Untuk q=101 tiga bit dan din=0, hitung nilai berikutnya dari q<={q[1:0],din} serta q<={din,q[2:1]}.

Baca penjelasan

Keduanya menghasilkan 010: kedua arah kebetulan sama pada masukan ini. Dengan q=001,din=0, hasilnya 010 dan 000, sehingga kesalahan arah dapat dibedakan.

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