使用Vivido中的乘法器IP,生成乘法器multer_27_8_35,
输入A位宽为27
输入B位宽为8
输出P位宽为35
发现返回数据的时序与时钟上升沿不严格对齐,具体代码如下:
cpp
multer_27_8_35 cnv1_Mulm0 (
.CLK(w_clk), // input wire CLK
.A(fea_add_bias), // input wire [26 : 0] A
.B(m0), // input wire [7 : 0] B
.P(mul_m0) // output wire [34 : 0] P
);
// stage3 移位降低位宽 进行relu激活
assign shift_mul = mul_m0[21:14] ;
cpp
输入 fea_add_bias 的仿真结果
cpp
输入 m0 的仿真结果
cpp
输出 mul_m0 的仿真结果
cpp
输出 mul_m0 的仿真结果
cpp
猜测原因:是由于multer_27_8_35使用的两个DSP48乘法器,返回数据的时间不同
解决方法:
cpp
将
assign shift_mul = mul_m0[21:14] ;
修改为时序逻辑
always @(posedge w_clk or negedge nw_rst) begin
if (!nw_rst) begin
shift_mul <= 8'b0 ;
end
else begin
shift_mul <= mul_m0[21:14] ;
end
end
修改后仿真结果