题解 | #使用子模块实现三输入数的大小比较#
使用子模块实现三输入数的大小比较
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