20 / 37 · Khái niệm
generate: tạo mạch tĩnh bằng vòng lặp
Dùng genvar và generate-if để tạo phân cấp có tên và kiểm tra vị trí lane.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Vòng lặp tạo thể hiện, không tạo chu kỳ
genvar/generate lặp cấu trúc tĩnh trước chạy. Vòng lặp always_comb mô tả tính toán thủ tục, phần cứng được tổng hợp xác định. Không mặc nhiên là một lần lặp mỗi clock; xử lý nối tiếp cần trạng thái và bộ điều khiển. Bus packed được chia thành LANES từ W bit, tính parity từng từ. Hai tham số đều dương.
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] chọn W bit từ base hướng chỉ số tăng; W hằng. W=8, LANES=3 nối 7:0 với lane 0,15:8 với 1,23:16 với 2. g_lane tạo phân cấp ổn định như g_lane[1].word_data.
Đọc thứ tự lane
data=24'h03_01_80 có 80,01,03 từ lane 0. Parity 1,1,0 cho parity[2:0]=011. Byte bên trái là lane 2. Tách chỉ số, hiển thị và truyền. Tất cả tính đồng thời, không độ trễ thanh ghi. Nhiều LANES tăng logic, không tăng chu kỳ; fanout, định tuyến và timing vật lý cần kiểm tra riêng.
generate-if chọn cấu trúc cố định
Điều kiện là hằng, ví dụ tham số thêm thanh ghi. Tín hiệu động thuộc khối tổ hợp hoặc clock. Thêm thanh ghi đổi tính hợp lệ, nên đổi hợp đồng và checker. Không tắt bus bằng zero:[−1:0] không phải đối tượng độ rộng zero an toàn. Từ chối cấu hình hoặc giữ giao diện xác định trong nhánh tĩnh.
Thực hành: phát hiện lane tráo
Thử ví dụ rồi bật một bit từng lane: chỉ parity tương ứng đổi. Hai bit bật cho parity chẵn 0. Dữ liệu giống nhau mọi lane che lát cắt tráo. Tách lane bằng phép toán số trong tham chiếu và đếm bit 1. Thử W=1,8 và LANES=1,3 cho tối thiểu, byte và phân cấp. Sau đó lưu parity vào thanh ghi và định nghĩa reset, enable, so với bus hiện tại hay bắt tại cạnh trước.