题解 | #移位运算与乘法#
移位运算与乘法
http://www.nowcoder.com/practice/1dd22852bcac42ce8f781737f84a3272
没有用移位运算,直接用乘法了。
`timescale 1ns/1ns
module multi_sel(
input [7:0]d ,
input clk,
input rst,
output reg input_grant,
output reg [11:0]out
);
//*************code***********//
//计数器代码
reg [1:0] cnt;
always@(posedge clk or negedge rst)begin
if(!rst)
cnt<=0;
else if(end_cnt)
cnt<=0;
else
cnt<=cnt+1;
end
assign add_cnt=rst!=0;
assign end_cnt=add_cnt&&cnt==4-1;
//输入有效标志代码
always@(posedge clk or negedge rst)begin
if(!rst)
input_grant<=0;
else if(cnt==0) begin
input_grant<=1;
end
else
input_grant<=0;
end
//计算结果代码
reg [7:0] d_temp;
always @(posedge clk or negedge rst)begin
if(!rst)begin
out<=0;
end
else if(cnt==0)begin
out<=d*x;
d_temp<=d;
end
else begin
out<=d_temp*x;
end
end
//乘数因子代码
reg [3:0] x;
always@(*)begin
if(cnt==0)
x=1;
else if(cnt==1)
x=3;
else if(cnt==2)
x=7;
else
x=8;
end
//*************code***********//
endmodule