|  | 
 
| 
大家好,下面一段代码是实现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分支应该永远不会实现的呀,这是怎么回事呢,请各位哥哥姐姐帮忙解答一下呗,谢谢了~~
 | 
 |