题解 | #移位运算与乘法#
移位运算与乘法
https://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 [10:0]out
);
//*************code***********//
reg [1:0] count;
reg [7:0] d_ff1;
reg [7:0] d_ff2;
reg [7:0] d_ff3;
always@(posedge clk or negedge rst)
begin
if(!rst)
begin
input_grant <= 1'b0;
out <= 11'b0;
end
else
begin
case(count)
2'b00:
begin
input_grant <= 1'b1;
out <= {3'b0,d};
end
2'b01:
begin
input_grant <= 1'b0;
out <= {2'b0,d_ff1,1'b0} + {3'b0,d_ff1};
end
2'b10:
begin
input_grant <= 1'b0;
out <= {2'b0,d_ff2,1'b0} + {3'b0,d_ff2} + {1'b0,d_ff2,2'b0};
end
2'b11:
begin
input_grant <= 1'b0;
out <= {d_ff3,3'b0};
end
default:
begin
input_grant <= 1'b0;
out <= 11'b0;
end
endcase
end
end
always@(posedge clk or negedge rst)
begin
if(!rst)
begin
count <= 2'b0;
end
else if(count == 2'b11)
begin
count <= 2'b0;
end
else
count <= count + 1;
end
always@(posedge clk or negedge rst)
begin
if(!rst)
begin
d_ff1 <= 8'b0;
d_ff2 <= 8'b0;
d_ff3 <= 8'b0;
end
else
begin
d_ff1 <= d;
d_ff2 <= d_ff1;
d_ff3 <= d_ff2;
end
end
//*************code***********//
endmodule
1、不需要用状态机。
2、设置一个计数器来控制乘1、3、7、8。
3,乘法用移位来做。
美的集团公司福利 878人发布