在 generate
循环中为特定实例添加 ILA,同时保持 ILA 在模块内部实现,可以通过以下方法实现:
1. 首先修改 Bit_Alignment
模块
在模块中添加 DEBUG
参数控制 ILA 的生成:
module Bit_Alignment #(
parameter DEBUG = 0 // 默认不添加ILA
) (
input i_dclk,
input i_rstn,
// ... 其他端口 ...
output o_vaild,
output [23:0] o_data
);
// 模块内部信号
reg [23:0] internal_data;
reg internal_valid;
// 核心逻辑(保持不变)
always @(posedge i_dclk) begin
// ... 您的原有逻辑 ...
end
// 条件生成ILA
generate if (DEBUG) begin : gen_ila
// ILA探针信号
(* mark_debug = "true" *) wire [23:0] ila_data = internal_data;
(* mark_debug = "true" *) wire ila_valid = internal_valid;
ila_0 your_ila_inst (
.clk(i_dclk),
.probe0(ila_data), // 24位数据
.probe1(ila_valid) // 有效信号
);
end endgenerate
// 输出连接
assign o_data = internal_data;
assign o_vaild = internal_valid;
endmodule
2. 在顶层模块中控制调试实例
// 顶层模块
localparam DEBUG_INDEX = 1; // 只调试索引1的实例
genvar i;
generate for (i = 0; i < READ_NUMBER; i = i + 1) begin : gen_block
Bit_Alignment #(
.DEBUG(i == DEBUG_INDEX ? 1 : 0) // 仅目标实例启用DEBUG
) U3 (
.i_dclk(dclk),
.i_rstn(rstn_dclk),
.i_D_P(i_READ_data_p[i]),
.i_D_N(i_READ_data_n[i]),
.i_Alignment_req(Alignment_req_dclk),
.o_Alignment_end(Alignment_end_dclk[i]),
.o_Alignment_rdy(Alignment_rdy_dclk[i]),
.o_Alignment_erro(Alignment_erro_dclk[i]),
.o_vaild(V[i]),
.o_data(D[i*24+23:i*24])
);
end endgenerate