题解 | #编写乘法器求解算法表达式#

编写乘法器求解算法表达式

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[7:0] a_temp, b_temp;
	reg[8:0] c_temp;
	mul mul1(
		.clk(clk),
		.rst_n(rst_n),
		.a(a),
		.b(4'd12),
		.c(a_temp)
	);
	mul mul2(
		.clk(clk),
		.rst_n(rst_n),
		.a(b),
		.b(4'd5),
		.c(b_temp)
	);

	always@(posedge clk or negedge rst_n) begin
		if(!rst_n)
			c_temp <= 8'd0;
		else
			c_temp <= a_temp + b_temp;
	end
	assign c = c_temp;
endmodule

module mul(
	input clk,
	input rst_n,
	input[3:0] a,
	input[3:0] b,

	output reg[7:0]  c
);
	always@(posedge clk or negedge rst_n) begin
		if(!rst_n)
			c <= 8'd0;
		else
			c <= ({4{b[0]}} & a)
				+(({4{b[1]}} & a) << 1)
				+(({4{b[2]}} & a) << 2)
				+(({4{b[3]}} & a) << 3);
	end
endmodule

实在是不知道这个题目要例化一个乘法器,为什么后面还有再隔一个周期才能输出c,而不能直接assign c = a_temp + b_temp;

乘法器就用最简单的移位相加乘法器来做了,毕竟不允许用乘法。

全部评论

相关推荐

01-24 12:55
门头沟学院 Java
泪千行你为啥笑:个人建议奖项放最后,实习和项目优先级更高
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务