我正在开发一种 Verilog 实现,涉及两个缓冲区数组,一个用于输入特征图,另一个用于神经网络权重。我的目标是当 input_valid 和 Weight_valid 信号置位时通过这些缓冲区传输数据。但是,我面临一个问题,即只有权重缓冲区似乎在硬件中正确实现,而 input_fm_buffers 未按预期运行。当有效信号为高电平时,我使用 for 循环和非阻塞分配来同步缓冲区中的数据流。对于为什么会发生这种情况有任何见解吗?
module convolution_ip(input [7:0] data_in , [7:0]weight_in ,
input reset , init_valid, clk, weight_valid ,
output [7:0] final_output );
integer i , j ;
reg [7:0] input_fm_buff[24:0] ;
reg [7:0] weight_buff[24:0];
always@(posedge clk or posedge reset)begin
if (reset) begin
for (int j = 0; j < 25; j = j + 1)
begin
input_fm_buff[j] <= 8'h00;
weight_buff[j] <= 8'h00;
end
end
else
begin
if(init_valid)
begin
for (int j = 0; j<25; j = j+1) begin
if (j==24)begin input_fm_buff[j] <= data_in;
end
else begin
input_fm_buff[j] <= input_fm_buff[j+1];
end
end
end
if(weight_valid)begin
for (int i = 0; i<25; i = i+1) begin
if (i==24)begin weight_buff[i] <= weight_in;
end
else begin
weight_buff[i] <= weight_buff[i+1];
end
end
end
end
end
assign final_output = weight_buff[1];
endmodule
我观察到一些事情。当我将最终输出连接到 input_fm 时,似乎只有 input_fm_buff 得到实现,而weight_buff 保持不受影响。这是什么意思?
input_fm_buff
在综合过程中已被优化,因为在导出输出逻辑时没有在任何地方使用。