题解 | 4位数值比较器电路

4位数值比较器电路

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

`timescale 1ns/1ns

module comparator_4(
	input		[3:0]       A   	,
	input	   [3:0]		B   	,
 
 	output	 wire        Y2    , //A>B
	output   wire        Y1    , //A=B
    output   wire        Y0      //A<B
);

assign Y2 = 
	(A[3] & ~B[3]) | 
	(~(A[3] ^ B[3]) & (A[2] & ~B[2])) |
	(~(A[3] ^ B[3]) & ~(A[2] ^ B[2]) & (A[1] & ~B[1])) |
	(~(A[3] ^ B[3]) & ~(A[2] ^ B[2]) & ~(A[1] ^ B[1]) & (A[0] & ~B[0]));

	
assign Y1 = 
	~(A[3] ^ B[3]) & ~(A[2] ^ B[2]) & ~(A[1] ^ B[1]) & ~(A[0] ^ B[0]);

assign Y0 = ~(Y2 | Y1);

endmodule

如何使用门电路实现?提供一种最直接的方式。如果卡诺图(真值表)已经给出,就可以直接把其中真值为1的项“或”起来。

判断单bit大小

单bit只有0或者1,因此如果单比特数a>b,只可能是a=1,b=0.则Verilog描述为:a & ~b

若a=b,则Verilog描述为~(a^b)。

计算Y2(A>B)

例如Y2:要表示A>B,就需要从高位开始逐个比对,如果高位相同,再比较次高位。

在Verilog描述中,

例如A[3]>B[3],则Y2=1。(verilog描述:A[3]=1并且B[3]=0,也就是(A[3] & ~B[3]))

如果A[3]=B[3]的时候,再比较A[2]>B[2]?,如果是则Y2=1。((~(A[3] ^ B[3]) & (A[2] & ~B[2])))

依次类推。

计算Y1(A==B)

只有各个bit都相等,A和B才相等,所以很简单一行式子:

assign Y1 = ~(A[3] ^ B[3]) & ~(A[2] ^ B[2]) & ~(A[1] ^ B[1]) & ~(A[0] ^ B[0]);

计算Y0

可以取巧,既不是A>B也不是A=B,则只能是A<B。根据德摩根定律,有两种写法:

assign Y0 = ~(Y2 | Y1); // NOR gate

assign Y0 = ~Y2 & ~Y1; // AND gate + OR gate

全部评论

相关推荐

07-09 15:14
南京大学 C++
点赞 评论 收藏
分享
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 17:46
暑期就挂了,秋招还有机会吗
大聪明777:研发提前批,14号刚开的,官网上面的配图上有写。提前批没过的话,秋招还可以投,不过前面的笔试/面试记录会被保留,供秋招参考
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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