数字IC手撕代码--乐鑫科技(次小值与次小值出现的次数)

news2024/12/19 5:16:09
前言:
本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析、代码及波形,所有代码均经过本人验证。

目录如下:

1.数字IC手撕代码-分频器(任意偶数分频)

2.数字IC手撕代码-分频器(任意奇数分频)

3.数字IC手撕代码-分频器(任意小数分频)

4.数字IC手撕代码-异步复位同步释放

5.数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)

6.数字IC手撕代码-序列检测(状态机写法)

7.数字IC手撕代码-序列检测(移位寄存器写法)

8.数字IC手撕代码-半加器、全加器

9.数字IC手撕代码-串转并、并转串

10.数字IC手撕代码-数据位宽转换器(宽-窄,窄-宽转换)

11.数字IC手撕代码-有限状态机FSM-饮料机

12.数字IC手撕代码-握手信号(READY-VALID)

13.数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)

14.数字IC手撕代码-泰凌微笔试真题

15.数字IC手撕代码-平头哥技术终面手撕真题

16.数字IC手撕代码-兆易创新笔试真题

17.数字IC手撕代码-乐鑫科技笔试真题(4倍频)

18.数字IC手撕代码-双端口RAM(dual-port-RAM)

...持续更新

更多手撕代码题可以前往 数字IC手撕代码--题库


题目

使用 v/sv 编写如下功能模块,求输入信号序列 din 在 din_vld 为高电平的时间段内的次小值与次小值出现的次数

接口信号如下

module sec_min(

input clk,//时钟

input rst_n,//复位

input [9:0] din, //10bit 无符号数

input din_vld, //输入数据有效信号

output [9:0] dout, //次小值

output [8:0] cnt //次小值出现的次数。溢出时重新计数

);

原理分析

题目要找次小值和次小值出现的次数,我们就可以做两个变量,一个变量存储最小值min,一个变量存储次小值sec_min。这样就有几种可能:

① 输入din < min:

那我们就让min = din, sec_min = min;此时要注意的是,这时候随着次小值和最小值交换顺序,次小值出现的次数也会变成最小值出现的次数,因此不仅要将最小值赋值给次小值,还要将最小值出现次数赋值给次小值出现次数。

② 输入din = min:

需要统计最小值出现的次数,在din<min时,令cnt_sec = cnt_min。

③ 输入din < min_sec:

次小值刷新,最小值不变,令次小值min_sec = din;同时令次小值计数器cnt_sec = 1。

④ 输入din = min_sec:

最小值和次小值均不变,次小值计数器加一。

⑤ 输入din > min_sec:

啥也不干。

代码

module sec_min(
    input         clk     ,   //时钟
    input         rst_n   ,   //复位
    input   [9:0] din     ,   //10bit 无符号数
    input         din_vld ,   //输入数据有效信号
    output  [9:0] dout    ,   //次小值
    output  [8:0] cnt         //次小值出现的次数。溢出时重新计数
);

reg [10:0] min,sec_min;   //minimum and second minimum
reg [8:0] cnt_sec,cnt_min;
reg [9:0] dout_reg;

always @(posedge clk)begin
  if(!rst_n)begin
    cnt_sec <=  9'd0  ;
    cnt_min <=  9'd0  ;
    dout_reg<=  10'd0 ;
    min     <=  11'b111_1111_1111;
    sec_min <=  11'b111_1111_1111;
  end
  else if(din_vld)begin
    if(din < min)begin
      min     <= din      ;
      sec_min <= min      ;
      cnt_sec <= cnt_min  ;
      cnt_min <= 9'd1     ;
    end
    else if(din == min)begin
      cnt_min <= cnt_min + 1'b1;
    end
    else if(din < sec_min)begin
      sec_min <= din      ;
      cnt_sec <= 9'd1     ;
    end 
    else if(din == sec_min)begin
      cnt_sec <= cnt_sec + 1'b1;
    end
  end
end

assign dout = sec_min;
assign cnt  = cnt_sec;

endmodule

testbench

module tb_sec_min();

reg rst_n,clk;

reg  [9:0]  din     ;
reg         din_vld ;
wire [9:0]  dout    ;
wire [8:0]  cnt     ;

task input_num;
input [9:0]  number;
begin
  @(posedge clk)begin #1
    din <= number;
  end
end
endtask

initial begin
  rst_n   <= 1;
  clk     <= 0;
  din_vld <= 0;
  #5
  rst_n   <= 0;
  #20
  rst_n   <= 1;
  din_vld <= 1;
  repeat(2) begin
    input_num(15);
  end
  repeat(3)begin
    input_num(19);
  end
  input_num(18);
  input_num(17);
  input_num(16);
  input_num(14);
  #30
  ;
end    
  
always #5 clk = ~clk;

sec_min u_sec_min(
.clk      (clk)     ,
.rst_n    (rst_n)   ,
.din      (din)     ,
.din_vld  (din_vld) ,
.dout     (dout)    ,
.cnt      (cnt)
);
 
endmodule

波形图

输入序列为:15,15,19,19,19,18,17,16,16,14

随着序列的输入,最小值会从一开始的不可能的取值(1023),计数器0;依次变为19计数1~3次,18计数1次,17计数1次,16计数1次,15计数2次。

结果验证正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/371831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

九龙证券|阿里+鸿蒙+人工智能+元宇宙概念热度爆棚,“会说话的猫”亮了!

近一周组织调研个股数量有240多只&#xff0c;汤姆猫成为调研组织数量最多的股票。 证券时报数据宝统计&#xff0c;近一周组织调研公司数量有240多家。从调研组织类型来看&#xff0c;证券公司调研相对最广泛&#xff0c;调研230多家公司。 “会说话的猫”亮了 汤姆猫成为近…

倒计时3天:现实与虚拟交织,元宇宙警察将如何执法?

在元宇宙、Web3高速发展的时代&#xff0c;欧科云链以科技助警&#xff0c;帮助公安等机构实现对新型犯罪的监管与侦破。 ——摘要元宇宙作为应用场景和生活方式的未来&#xff0c;拥有着巨大的发展潜力。伴随5G网络、云计算、区块链等技术迅速发展&#xff0c;虚拟现实、人机交…

java面试题-JVM类加载机制

类加载的生命周期&#xff1f;1. 加载阶段&#xff08;Loading&#xff09;在Java程序中&#xff0c;当需要使用某个类时&#xff0c;JVM会使用类加载器来查找并加载该类文件。类加载器会首先从文件系统或网络中查找相应的 .class 文件&#xff0c;读取类的二进制数据&#xff…

【JDK8新特性之方法引用-案例实操】

一.JDK8新特性之方法引用-案例实操 之前我们学习了Stream流以及Lambda表达式相关的内容&#xff0c;如果想看的同学可以看一下之前的文章&#xff0c;接下来我们就来学习让Lambda表达式更加简洁的方法引用。 二. 什么是方法引用&#xff1f;为什么要使用方法引用&#xff1f; …

Leetcode Solutions - Part 1

回溯: 字符串的排列 回溯&#xff1a;78. 子集 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums …

【Java】让我们对多态有深入的了解(九)

目录 &#xff08;1&#xff09;接口的基本介绍​编辑 &#xff08;2&#xff09;接口的注意事项和细节 1.接口不能被实例化 2.接口中所有方法是public方法&#xff0c;接口中的抽象方法&#xff0c;可以不用abstract修饰 3.一个普通类实现接口&#xff0c;必须将接口所有…

ARMv8 architecture里的Memory aborts

在AArch64 Virtual Memory System Architecture中&#xff0c;有以下几种机制会导致PE在访问memory失败时产生exceptions。 Debug exception: An exception caused by the debug configuration.Alignment fault: An Alignment fault is generated if the address used for a m…

【YSYY】DSPE-PEG-cRGD,磷脂-聚乙二醇-靶向穿膜肽,靶向功能材料

靶向穿膜肽RGD环肽&#xff0c;磷脂-聚乙二醇-cRGD中的cRGD是五元环肽。 DSPE&#xff08;1,2-二硬脂酰-sn-甘油-3-磷酸乙醇胺&#xff09;是一种饱和的18碳磷脂&#xff0c;常用于脂质体的合成。聚乙二醇&#xff08;PEG&#xff09;偶联DSPE具有亲水性。聚乙二醇能增强溶解性…

一文2000字手把手教你自动化测试Selenium+pytest+数据驱动

主流自动化框架 selenium &#xff1a;web端自动化框架 &#xff0c;&#xff08;行业里面最核心的框架&#xff09; appium &#xff1a;手机app端框架 requests &#xff1a;接口测试 selenium 工具类封装 selenium提供了很多方法供我们去完成网页元素的操作&#xff0c; …

1.创建Springboot项目

一&#xff1a;进入https://start.spring.io/&#xff0c;如下是相关步骤&#xff1a;地址https://start.spring.io/maven 方式springboot版本项目名称jar方式点击创建二&#xff1a;点击&#xff08;generate&#xff09;生产自动下载1.IDEA 直接打开2.启动成功SpringdiApplic…

【计算机网络】TCP底层设计交互原理

文章目录1.TCP底层三次握手详细流程2.TCP洪水攻击介绍和ss命令浅析3.Linux服务器TCP洪水攻击入侵案例4.TCP洪水攻击结果分析和解决方案5.TCP底层四次挥手详细流程1.TCP底层三次握手详细流程 TCP的可靠性传输机制&#xff1a;TCP三次我手的流程 一次握手&#xff1a;客户端发送一…

Java中抽象类有什么用

抽象类是用来捕捉子类的通用特性的&#xff0c;是被用来创建继承层级里子类的模板。现实中有些父类中的方法确实没有必要写&#xff0c;因为各个子类中的这个方法肯定会有不同&#xff1b;而写成抽象类&#xff0c;这样看代码时&#xff0c;就知道这是抽象方法&#xff0c;而知…

39-Golang中的接口

Golang中的接口基本介绍基本语法注意事项和细节案例实现对Hero结构体切片的排序&#xff1a;sort.Sort(data Interface)实现接口和继承之间的比较区别基本介绍 interface类型可以定义一组方法&#xff0c;但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型…

【编程入门】应用市场(NodeJS版)

背景 前面已输出多个系列&#xff1a; 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 《N种编程语言做个记事本》 目标 为编程初学者打造入门学习项目&#xff0c;使…

JUC-Synchronized相关内容

设计同步器的意义多线程编程中&#xff0c;有可能会出现多个线程同时访问同一个共享、可变资源的情况&#xff0c;这个资源我们称之其为临界资源&#xff1b;这种资源可能是&#xff1a;对象、变量、文件等。共享&#xff1a;资源可以由多个线程同时访问可变&#xff1a;资源可…

25 openEuler管理网络-使用nmcli命令配置ip

文章目录25 openEuler管理网络-使用nmcli命令配置ip25.1 nmcli介绍25.2 设备管理25.2.1 连接到设备25.2.2 断开设备连接25.3 设置网络连接25.3.1 配置动态IP连接25.3.1.1 配置IP25.3.1.2 激活连接并检查状态25.3.2 配置静态IP连接25.3.2.1 配置IP25.3.2.2 激活连接并检查状态25…

Mr. Cappuccino的第44杯咖啡——Kubernetes之Service

Kubernetes之ServiceService的概念Service的类型Service演示案例环境准备ClusterIP&#xff08;集群内部访问&#xff09;IptablesIPVSEndpointNodePort&#xff08;对外暴露应用&#xff09;LoadBalancer&#xff08;对外暴露应用&#xff0c;适用于公有云&#xff09;Ingress…

3.抽象工厂模式

与工厂模式对比 工厂模式 工厂模式是类创建模式。在工厂模式中&#xff0c;只需要生产同一种产品&#xff0c;只不过是生产厂家不同。 所以产品类的设计&#xff1a; 抽象的产品类Product具体的产品类Product_A&#xff0c;Product_B, Product_C, Product_D…… 工厂的设计…

详解Android 13种 Drawable的使用方法

前言关于自定义View&#xff0c;相信大家都已经很熟悉了。今天&#xff0c;我想分享一下关于自定义View中的一部分&#xff0c;就是自定义Drawable。Drawable 是可绘制对象的一个抽象类&#xff0c;相对比View来说&#xff0c;它更加的纯粹&#xff0c;只用来处理绘制的相关工作…

用Python+ChatGPT批量生成论文概述

用PythonChatGPT批量生成论文概述 做算法研究离不开阅读大量论文。从海量论文中找到需要的论文往往耗费算法团队不少的精力。 ChatGPT官方例子中有一个“TL;DR”摘要生成&#xff0c;非常适合生成论文摘要。 于是我用pythonGPT-3 API开发了一个工具&#xff0c;可以直接从arx…