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

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

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

全部评论

相关推荐

牛客928043833号:在他心里你已经是他的员工了
点赞 评论 收藏
分享
在debug的柠檬精很迷人:好消息:现在HR挑三拣四 15年后 HR跪着求要简历 坏消息:被挑的是这代人,到时候求人的也是这代人。真好。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务