|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
此模块任务为完成w=w+e*x,不知道哪里出了问题,功能仿真时几个乘法器的输出m0_out到m7_out都正常,而寄存器a0到a7就没有了值,是不是时钟出了问题呢?
module mycoeff(
clk,reset,x_in,e_in,w_out
);
input clk;
input reset;
input[15:0] x_in;
input[15:0] e_in;
output[15:0] w_out;
reg[127:0] x_in_temp;
reg[127:0] e_in_temp;
reg[47:0] a0,a1,a2,a3,a4,a5,a6,a7;
wire[127:0] w;
//
wire [47:0] m0_out,m1_out,m2_out,m3_out;
wire [47:0] m4_out,m5_out,m6_out,m7_out;
//
always @(posedge clk)begin
if(reset)begin
x_in_temp<=0;
e_in_temp<=0;
end
else begin
x_in_temp[127:0]<={x_in,x_in_temp[127:16]};
e_in_temp[127:0]<={e_in,e_in_temp[127:16]};
end
end
always @(posedge clk) begin
a0<={{32{w[15]}},w[15:0]}+m0_out;
a1<={{32{w[31]}},w[31:16]}+m1_out;
a2<={{32{w[47]}},w[47:32]}+m2_out;
a3<={{32{w[63]}},w[63:48]}+m3_out;
a4<={{32{w[79]}},w[79:64]}+m4_out;
a5<={{32{w[95]}},w[95:80]}+m5_out;
a6<={{32{w[111]}},w[111:96]}+m6_out;
a7<={{32{w[127]}},w[127:112]}+m7_out;
end
assign w_out=w;
//系数更新
assign w[15:0]=reset?16'h0000:a0[15:0];
assign w[31:16]=reset?16'h0000:a1[15:0];
assign w[47:32]=reset?16'h0000:a2[15:0];
assign w[63:48]=reset?16'h0000:a3[15:0];
assign w[79:64]=reset?16'h0000:a4[15:0];
assign w[95:80]=reset?16'h0000:a5[15:0];
assign w[111:96]=reset?16'h0000:a6[15:0];
assign w[127:112]=reset?16'h0000:a7[15:0];
//调用乘法器
mult1 mult0(
.clken(!reset),
.clock(clk),
.dataa(x_in_temp[15:0]),
.datab(e_in_temp[15:0]),
.result(m0_out)
);
mult1 mult1(
.clken(!reset),
.clock(clk),
.dataa(x_in_temp[31:16]),
.datab(e_in_temp[31:16]),
.result(m1_out)
);
mult1 mult2(
.clken(!reset),
.clock(clk),
.dataa(x_in_temp[47:32]),
.datab(e_in_temp[47:32]),
.result(m2_out)
);
mult1 mult3(
.clken(!reset),
.clock(clk),
.dataa(x_in_temp[63:48]),
.datab(e_in_temp[63:48]),
.result(m3_out)
);
mult1 mult4(
.clken(!reset),
.clock(clk),
.dataa(x_in_temp[79:64]),
.datab(e_in_temp[79:64]),
.result(m4_out)
);
mult1 mult5(
.clken(!reset),
.clock(clk),
.dataa(x_in_temp[95:80]),
.datab(e_in_temp[95:80]),
.result(m5_out)
);
mult1 mult6(
.clken(!reset),
.clock(clk),
.dataa(x_in_temp[111:96]),
.datab(e_in_temp[111:96]),
.result(m6_out)
);
mult1 mult7(
.clken(!reset),
.clock(clk),
.dataa(x_in_temp[127:112]),
.datab(e_in_temp[127:112]),
.result(m7_out)
);
endmodule |
|