在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1934|回复: 3

[求助] 一个系数更新的模块,不知道错在了哪里

[复制链接]
发表于 2012-9-24 09:36:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
此模块任务为完成w=w+e*x,不知道哪里出了问题,功能仿真时几个乘法器的输出m0_out到m7_out都正常,而寄存器a0到a7就没有了值,是不是时钟出了问题呢?

tb_mycoeff.bmp


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
 楼主| 发表于 2012-9-24 09:38:01 | 显示全部楼层
求大神指点,感激不尽
发表于 2012-9-24 10:23:23 | 显示全部楼层
本帖最后由 clean_water 于 2012-9-24 10:30 编辑

这个应该是W为“X”,所以导致a0~a7为“X”。
在reset为低有效时,W为“X”了。

我觉得,你把W改成reg型,并改掉相应的逻辑,问题应该会解决掉~
 楼主| 发表于 2012-9-24 17:00:57 | 显示全部楼层
回复 3# clean_water


   嗯,我也有试过,现在解决了,是把例化乘法器里的clken全部改成了1‘b1,出来的波形看是没问题了,不知道会不会有什么风险
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 02:50 , Processed in 0.022994 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表