题解 | #编写乘法器求解算法表达式#
编写乘法器求解算法表达式
https://www.nowcoder.com/practice/c414335a34b842aeb9960acfe5fc879f
`timescale 1ns/1ns
module calculation(
input clk,
input rst_n,
input [3:0] a,
input [3:0] b,
output [8:0] c
);
wire[8:0]c0,c1;
reg [8:0]c_reg;
mul u0(
.clk(clk),
.rst_n(rst_n),
.a(a),
.b(12),
.c(c0)
);
mul u1(
.clk(clk),
.rst_n(rst_n),
.a(b),
.b(5),
.c(c1)
);
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
c_reg<=0;
end
else begin
c_reg<=c0+c1;
end
end
assign c=c_reg;
endmodule
module mul(
input clk,
input rst_n,
input [3:0]a,
input [3:0]b,
output reg[8:0]c
);
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
c<=0;
end
else begin
case(b)
4'b0000:c<=0;
4'b0001:c<=a;
4'b0010:c<={a,1'b0};
4'b0011:c<={a,1'b0}+a;
4'b0100:c<={a,2'b0};
4'b0101:c<={a,2'b0}+a;
4'b0110:c<={a,2'b0}+{a,1'b0};
4'b0111:c<={a,2'b0}+{a,1'b0}+a;
4'b1000:c<={a,3'b0};
4'b1001:c<={a,3'b0}+a;
4'b1010:c<={a,3'b0}+{a,1'b0};
4'b1011:c<={a,3'b0}+{a,1'b0}+a;
4'b1100:c<={a,3'b0}+{a,2'b0};
4'b1101:c<={a,3'b0}+{a,2'b0}+a;
4'b1110:c<={a,3'b0}+{a,2'b0}+{a,1'b0};
4'b1111:c<={a,3'b0}+{a,2'b0}+{a,1'b0}+a;
default:c<=0;
endcase
end
end
endmodule
