题解 | #使用子模块实现三输入数的大小比较#

使用子模块实现三输入数的大小比较

https://www.nowcoder.com/practice/bfc9e2f37fe84c678f6fd04dbce0ad27

`timescale 1ns/1ns
module main_mod(
	input clk,
	input rst_n,
	input [7:0]a,
	input [7:0]b,
	input [7:0]c,
	
	output [7:0]d
);
wire [7:0]m,n;
	compare ab(
		.clk(clk),
		.rst_n(rst_n),
		.a(a),
		.b(b),
		.m(m)
	);
	compare ac(
		.clk(clk),
		.rst_n(rst_n),
		.a(a),
		.b(c),
		.m(n)
	);
	compare mn(
		.clk(clk),
		.rst_n(rst_n),
		.a(m),
		.b(n),
		.m(d)
	);


endmodule

module compare(
	input clk,
	input rst_n,
	input [7:0]a,
	input [7:0]b,
	output reg[7:0]m
);

	always @(posedge clk,negedge rst_n)
       if(!rst_n)
	   		m <= 8'b0;
	   else if((a < b) | (a == b))
	   		m <= a;
		else if (a > b)
			m <= b; 

endmodule

这个题考的是软件与硬件之间的差别。

按照软件编程思维,我们只需要比较ab值,再比较min_ab与c的值,也就是实例化两次子模块。但是这样会有一个错误,就是节拍不对,abc是同一时刻输入的,并且有可能一直变,我们需要比较的是在某一个时刻abc的值的最小,如果先比较ab的最小值,然后再去比较c,但是“再”的时候,c已经变了,你相当与是拿上一时刻的ab最小值与现在的c作比较。

最后对于实例化的传参,可以百度Verilog实例化。

全部评论

相关推荐

尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
昨天 13:08
蚌埠坦克学院 C++
服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务