Altifigence Academy

3 / 37 · Konsep

Modul, port dan instans: koneksi sebagai kontrak

Susun modul kombinasional dengan koneksi bernama dan periksa penggerak tunggal serta batas hierarki.

Batas modul bukan batas clock

Modul mengelompokkan port dan logika. Instansiasi tidak otomatis menambah register atau siklus. Modul kombinasional seri tetap menjadi jalur kombinasional dengan delay fisik yang dijumlahkan. Register eksplisit membentuk batas penyimpanan. Catat arah, lebar, tanda, penggerak dan waktu valid; nama mencegah ketergantungan pada urutan port.

SystemVerilog
module select_word #(parameter integer W = 8) (
  input  logic [W-1:0] a, b,
  input  logic         select_b,
  output logic [W-1:0] y
);
  assign y = select_b ? b : a;
endmodule

module choose_and_increment (
  input  logic [7:0] a, b,
  input  logic       select_b,
  output logic [8:0] result
);
  logic [7:0] chosen;
  select_word #(.W(8)) select_u (
    .a(a), .b(b), .select_b(select_b), .y(chosen)
  );
  assign result = {1'b0, chosen} + 9'd1;
endmodule

select_word adalah tipe modul, select_u nama instans. .a(a) menghubungkan port a anak ke sinyal a induk. .W(8) adalah konfigurasi elaborasi, bukan masukan dinamis.

Periksa kedua ujung

chosen hanya digerakkan y anak dan dibaca induk. Jangan menugaskannya juga dari proses lain; logic tidak mengizinkan konflik penggerak. result sembilan bit menyimpan 255+1=256 dengan memperluas chosen terlebih dahulu. a=255, b=9, select_b=0 memberi 256; select_b=1 memberi 10. Delapan bit akan kehilangan carry pada kasus pertama.

Hierarki, berkas dan top

Definisi boleh digabung atau dipisah, tetapi compiler memerlukan keduanya. Top adalah choose_and_increment; memilih select_word mengubah batas pengujian. Berkas anak hilang adalah masalah daftar sumber, bukan bukti salah logika. Koneksi posisi dapat berubah ketika port diubah. Masukan tak terhubung bukan nol yang disengaja: hubungkan konstanta atau dokumentasikan keluaran tak terpakai lalu tinjau diagnostik. Ikuti ketergantungan untuk menghindari umpan balik kombinasional tanpa penyimpanan; batas modul tidak memutus putaran itu.

Praktik: periksa komposisi secara mandiri

Untuk (a, b, select_b)=(0,255,0),(0,255,1),(255,0,0),(255,0,1), harapkan 1,256,256,1. Coba seluruh 256 nilai terpilih untuk kedua select dan buat masukan lain berbeda agar pilihan tertukar terlihat. Acuan memilih a atau b sebagai bilangan utuh lalu menambah 1; bandingkan setelah stabil. Membaca chosen internal dapat berbagi kesalahan pemilihan. Tambahkan register keluaran lalu tentukan reset, validitas dan tepi masukan terkait: kontrak waktu berubah walau aritmetika sama.

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