题解 | 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

全部评论

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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