3 / 37 · Konsep
Modul, port dan instans: koneksi sebagai kontrak
Susun modul kombinasional dengan koneksi bernama dan periksa penggerak tunggal serta batas hierarki.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
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.
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;
endmoduleselect_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.