Verilog | 4位数值比较器

牛客上的一道题,记录一下

Verilog | 4位数值比较器_第1张图片

这道题有两种思路:
第一种是按位比较,列举出所有情况:

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

第二种方法是,使用同或的方式获取一个标志位,进而获得判断依据:


`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

关于比较器还有另外一道题
问题描述
给定8个数,以及若干二输入的比较器(可以将两个输入排序)。要求在单周期内实现8个数的排序,并使用最少的比较器个数。(乐鑫)
问题解析
问题简化为4输入排序,很自然就想到,先分两组,每组之间排一下:(*表示较大的输出)
Verilog | 4位数值比较器_第2张图片Verilog | 4位数值比较器_第3张图片
所以4个数进行排序需要的最少的二输入比较器个数是5个。
那么现在问题回到8个数,实际上我们相当于已经有了4输入进行排序的模块,用若干个4输入排序模块来完成8输入排序。相对于二输入模块,四输入的模块的输出可以分为两组,一组最大次大,另一组最小次小。实际上还是按照刚才的拓扑结构,将二输入换成四输入即可:
Verilog | 4位数值比较器_第4张图片
只需要5*2+3*3 = 19 个比较器。

你可能感兴趣的:(Verilog,fpga开发)