Verilog 找出任意六个数中的最大、次最大和第三最大值以及三个数对应的序号

该博客介绍了如何使用Verilog设计逻辑,找出六个数字中的最大、次大和第三大值,以及它们对应的序号。通过将六个数分为两组,对每组进行排序,然后比较两组结果,最终得出所需的最大、次大和第三大数值及其序号。博客内容包括两个Verilog模块,分别用于对三个数排序和比较两组排序后的结果,以及一个顶层模块来综合这两个功能。
摘要由CSDN通过智能技术生成

思路:1、把六个数看成是两组的3个数

             2、对每组的三个数进行从大到小的排序

            3、找出有序的两组数中最大、次最大和第三最大值

 

//模块1:对三个数按照从大到小排序

//例:若 i_t_1st_max=20          i_t_2nd_max=5                 i_t_3th_max=30

                 i_Num_t_1st_max=1   i_Num_t_2nd_max=2       i_Num_t_3th_max=3

          则 o_all_1st_max=30       o_all_2nd _max=20          o_all_3th_max=5

               o_index_1stmax=3      o_index_2ndmax=1          o_index_3thmax=2

module rank3data(

input  i_rst_n,

         i_start

 //输入的三个数

input signed[`EXTENDWORDSIZE:0] i_t_1st_max,

                                                      i_t_2nd_max,

                                                      i_t_3th_max,

 //输入的三个数对应的序列号

input [`INDEX:0]  i_Num_t_1st_max,

                        i_Num_t_2nd_max,

                        i_Num_t_3th_max,  

 //排序后输出的三个数对应的序号

output reg [`INDEX:0] o_index_1stmax,

                               o_index_2ndmax,

                               o_index_3thmax,

 //排序后输出的三个数

output reg signed[`EXTENDWORDSIZE:0] o_all_1st_max,

                                                             o_all_2nd_max,

                                                             o_all_3th_max

                            );

         always @(i_rst_n or i_start or i_t_1st_max or i_t_2nd_max or i_t_3th_max or i_Num_t_1st_max or i_Num_t_2nd_max or i_Num_t_3th_max) begin

              if(!i_rst_n)begin

                    o_all_1st_max=0;

                   o_all_2nd_max=0;

                    o_all_3th_max=0;

                 o_index_1stmax=0;

                 o_index_2ndmax=0;

                  o_index_3thmax=0;

               end

              else if(i_start)begin

                     if(i_t_1st_max>=i_t_2nd_max)begin

                       if(i_t_1st_max>=i_t_3th_max) begin

                         if(i_t_2nd_max>=i_t_3th_max) begin 

                                    o_all_1st_max=i_t_1st_max;

                                    o_all_2nd_max=i_t_2nd_max;

                                    o_all_3th_max=i_t_3th_max;

                                  o_index_1stmax=i_Num_t_1st_max;

                                  o_index_2ndmax=i_Num_t_2nd_max;

                                  o_index_3thmax=i_Num_t_3th_max;

                             end

                             else begin

                                    o_all_1st_max=i_t_1st_max;

                                    o_all_2nd_max=i_t_3th_max;

                                    o_all_3th_max=i_t_2nd_max;

                                    o_index_1stmax=i_Num_t_1st_max;

                                    o_index_2ndmax=i_Num_t_3th_max;

                                    o_index_3thmax=i_Num_t_2nd_max;

                               end

                              end

                              else begin 

                                    o_all_1st_max=i_t_3th_max;

                                    o_all_2nd_max=i_t_1st_max;

                                    o_all_3th_max=i_t_2nd_max;

                                    o_index_1stmax=i_Num_t_3th_max;

                                    o_index_2ndmax=i_Num_t_1st_max;

                                    o_index_3thmax=i_Num_t_2nd_max;

                              end

                            end

                     else begin

                     if(i_t_1st_max<i_t_3th_max)begin

                        if(i_t_2nd_max>=i_t_3th_max) begin   

                                    o_all_1st_max=i_t_2nd_max;

                                    o_all_2nd_max=i_t_3th_max;

                                    o_all_3th_max=i_t_1st_max;

                                    o_index_1stmax=i_Num_t_2nd_max;

                                    o_index_2ndmax=i_Num_t_3th_max;

                                    o_index_3thmax=i_Num_t_1st_max;

                             end

                             else begin </

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值