|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
大家好,下面一段代码是实现2个8位数相乘的运算
module multi(clk , x , y , result);
input clk;
input [7:0]x , y;
output result;
reg [15:0]result;
parameter s0 = 0;
parameter s1 = 1;
parameter s2 = 2;
reg [2:0]count = 0;
reg [2:0]state = 0;
reg [15:0]P , T;
reg [7:0]y_reg;
always@(posedge clk)
begin
case(state)
s0:begin
count <=3'd0;
P<=16'b0;
y_reg<=y;
T<={{8{1'b0}} , x};
state<=s1;
end
s1:begin
if(count == 3'b111)
state<=s2;
else begin
if(y_reg[0] == 1'b1)
P<=P+T;
else
P<=P;
y_reg<=y_reg>>1;
T<=T<<1;
count<=count+1;
state<=s1;
end
end
s2:begin
result<=P;
state<=s0;
end
default:;
endcase
end
endmodule
其中:
else
P<=P;
y_reg<=y_reg>>1;
T<=T<<1;
count<=count+1;
state<=s1;
这个条件分支通过modelsim仿真发现,每个时钟都会有移位、计数器加1的操作,按我的思路,当if(y_reg[0] == 1'b1)成立时,下面的else分支应该永远不会实现的呀,这是怎么回事呢,请各位哥哥姐姐帮忙解答一下呗,谢谢了~~ |
|