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

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

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

使用子模块实现三输入数的大小比较
本题主要考察对子模块的例化。
首先介绍一下例化的重要性:例化更接近与是模块间的调用,类似与python中对函数的调用方式相近。一个顶层模块通常含有多个功能的子模块,通过例化可以实现模块之间的连接和调用功能。
例化的模型及方式:
一、对模块的例化。

值得注意的是,例化时仅在意子模块的名字和子模块的端口信号(如果不想知道原理,仅是调用的话。就可以把子模块考虑成一个黑匣子,你只需要知道有几个输入端,然后知道输出端会根据输入端如何变化就可以了。)
对参数的例化方式。

如果对应模块中含有参数定义,则可进行参数的例化,如图#((.参数的名称  (例化模块中对应的参数)))
具体思路
回归本题,子模块的编写为一个两个数字比较大小,顶层模块为比较三个数的大小。所以可以先考虑编写子模块,两个数比较大小前文已经写过,不再赘述。顶层模块则可以通过例化调用子模块,通过三次调用,便可以得出需要的结果。
最后贴一下代码
`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] mid1,mid2;
low_mod un0(
	.clk (clk),
	.rst_n (rst_n),
	.a (a),
	.b (b),
	.c (mid1)
);
low_mod un1(
	.clk (clk),
	.rst_n (rst_n),
	.a (a),
	.b (c),
	.c (mid2)
);
low_mod un2(
	.clk (clk),
	.rst_n (rst_n),
	.a (mid1),
	.b (mid2),
	.c (d)
);
endmodule


module low_mod(
	input clk,
	input rst_n,
	input [7:0]a,
	input [7:0]b,
	output reg [7:0]c	
);
//reg c_reg;
always @(posedge clk or negedge rst_n) begin
	if(!rst_n) c <= 8'b0;
	else if(a > b) c <= b;
	else  c <= a;
end
endmodule


全部评论

相关推荐

头发暂时没有的KFC总裁:找廉价劳动力罢了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务