题解 | 使用子模块实现三输入数的大小比较
使用子模块实现三输入数的大小比较
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; sub_mod sub_mod_inst( .clk(clk), .rst_n(rst_n), .data_a(a), .data_b(b), .data_c(m) ); sub_mod sub_mod_inst1( .clk(clk), .rst_n(rst_n), .data_a(a), .data_b(c), .data_c(n) ); sub_mod sub_mod_inst2( .clk(clk), .rst_n(rst_n), .data_a(m), .data_b(n), .data_c(d) ); endmodule module sub_mod( input clk, input rst_n, input [7:0] data_a, input [7:0] data_b, output reg [7:0] data_c ); always@(posedge clk or negedge rst_n) if(!rst_n) data_c <= 0; else data_c <= (data_a < data_b) ? data_a : data_b; endmodule
之前用的是两个子模块一直不对,所以这里说一下为什么要用三个而不是两个;
3个子模块:T时刻:输入a、b、c
T+1时刻: a、b比较得到m,a、c(T时刻)比较得到n,
T+2时刻:得到d;
2个子模块:T时刻:输入a、b、c
T+1时刻: a、b比较得到m,m、c(T+1时刻)比较得到n,
T+2时刻:得到d;
问题就出在2个子模块里面是在拿T时刻的a、b和T+1时刻的c比较;
所以另一种方法是把T时刻的c打一拍再比较
这个是一个牛友的解答,特别好,放在这里
https://blog.nowcoder.net/n/dd12cf67620d40239e08942bb9bf9401