Verilog 编程——筛选最大值与次大值



引言

海康今年的实习笔试题目中有一道编程题目,就是关于筛选输入数据中的最大值与次大值。在这里做一个及时的记录。

题目描述

串行输入一个数据序列,要求在对这个序列仅进行1次遍历的情况下,输出最大的两个数。完善如下代码:

module top2_sort #(
parameter DWIDTH = 8
)(
input               clk,
input               rst_n,
input               srst,
input [DWIDTH-1:0]  din,
input               din_vld,
output reg [DWIDTH-1:0] dout_top1,
output reg [DWIDTH-1:0] dout_top2,

output reg              doubt_vld
    );

//待完善
//=================================
endmodule

解题

刚拿到这个题目,我只想到的是如何得到最大值,那么次大值如何也在依次遍历结束后得到呢?

先考虑最大值如何得到,这个简单,每次数据输入时,比较输入数据和当前最大值的关系,如果输入数据大于当前最

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
Verilog中求最大值可以使用一种简单的方法。可以在每个时钟周期中比较输入数据和当前的最大值,如果输入数据大于当前最大值,则在下一个时钟周期中使用输入数据更新最大值。可以使用一个reg类型的变量来保存最大值,并在每个时钟周期中进行比较和更新操作。以下是一个伪代码示例: ```verilog module top2_sort #( parameter DWIDTH = 8 ) ( input clk, input rst_n, input srst, input [DWIDTH-1:0 din, input din_vld, output reg [DWIDTH-1:0 dout_top1, output reg [DWIDTH-1:0 dout_top2, output reg dout_vld ); reg [DWIDTH-1:0 max_value; reg [DWIDTH-1:0 second_max_value; always @(posedge clk or negedge rst_n) begin if (!rst_n) begin max_value <= '0; // 重置最大值 second_max_value <= '0; // 重置次大值 end else if (din_vld) begin if (din > max_value) begin second_max_value <= max_value; // 更新次大值 max_value <= din; // 更新最大值 end else if (din > second_max_value) begin second_max_value <= din; // 更新次大值 end end end assign dout_top1 = max_value; // 输出最大值 assign dout_top2 = second_max_value; // 输出次大值 assign dout_vld = din_vld; // 输出有效信号 endmodule ``` 这个Verilog模块中,max_value和second_max_value是用来保存最大值次大值的寄存器。在每个时钟上升沿时,根据输入数据和当前存储的最大值次大值的比较关系更新这两个寄存器的值。最后,将最大值次大值输出到dout_top1和dout_top2端口,并将有效信号din_vld传递给dout_vld端口。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Verilog 编程——筛选最大值次大值](https://blog.csdn.net/qq_43045275/article/details/130568937)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在路上-正出发

哈哈,多少是个心意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值