20 / 37 · Konsep
generate: membangun rangkaian statis dengan perulangan
Gunakan genvar dan generate-if untuk hierarki bernama dan periksa susunan lane.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Perulangan membentuk instans, bukan siklus
genvar/generate mengulangi struktur statis sebelum eksekusi. Perulangan always_comb menggambarkan hitungan prosedural dengan perangkat keras ditentukan sintesis. Tidak otomatis berarti satu iterasi per clock; proses serial butuh keadaan dan kontroler. Bus packed dibagi menjadi LANES kata W bit, masing-masing dihitung paritasnya. Kedua parameter positif.
module lane_parity #(
parameter integer W = 8,
parameter integer LANES = 3
) (
input logic [W*LANES-1:0] data,
output logic [LANES-1:0] parity
);
genvar lane;
generate
for (lane = 0; lane < LANES; lane = lane + 1) begin : g_lane
wire [W-1:0] word_data;
assign word_data = data[lane*W +: W];
assign parity[lane] = ^word_data;
end
endgenerate
endmoduledata[base +: W] memilih W bit dari base ke indeks lebih besar; W konstan. W=8, LANES=3 menghubungkan 7:0 ke lane 0,15:8 ke 1,23:16 ke 2. g_lane membentuk hierarki stabil seperti g_lane[1].word_data.
Membaca urutan lane
data=24'h03_01_80 berisi 80,01,03 mulai lane 0. Paritas 1,1,0 menghasilkan parity[2:0]=011. Byte paling kiri adalah lane 2. Pisahkan indeks, tampilan dan transmisi. Semua menghitung bersamaan, tanpa latensi register. Lebih banyak LANES menambah logika, bukan siklus; fanout, routing dan timing fisik memerlukan pemeriksaan tambahan.
generate-if memilih struktur tetap
Kondisinya konstan, misalnya parameter untuk menambah register. Sinyal dinamis masuk ke blok kombinasional atau clock. Register tambahan mengubah validitas sehingga kontrak dan checker harus berubah. Jangan memakai nol untuk menonaktifkan bus:[−1:0] bukan objek lebar nol yang aman. Tolak konfigurasi atau pertahankan antarmuka terdefinisi pada cabang statis.
Praktik: temukan lane tertukar
Uji contoh, lalu nyalakan satu bit pada setiap lane: hanya paritas terkait berubah. Dua bit aktif memberi paritas genap 0. Data identik di semua lane menyembunyikan slice tertukar. Ekstrak lane secara numerik dalam acuan dan hitung bit 1. Uji W=1,8 dan LANES=1,3 untuk minimum, byte dan hierarki. Lalu registerkan paritas serta tetapkan reset, enable dan pembandingan dengan bus kini atau ditangkap pada tepi sebelumnya.