当前位置: 首页 > news >正文

使用Verilog设计模块输出中位数,尽可能较少资源使用

在海康的FPGA设计岗面试中,有一道代码题,如下:

使用Verilog设计一个模块:输入3个无符号8bit数据,设计模块输出中位数,尽可能较少资源使用。
代码如下:

module median_of_3 #(parameter              WIDTH = 8
)(input                  clk              ,input      [WIDTH-1:0] A                ,input      [WIDTH-1:0] B                ,input      [WIDTH-1:0] C                ,output reg [WIDTH-1:0] Median_of_abc
);// definewire a_ge_b, b_ge_c, c_ge_a;reg [WIDTH-1:0] abc_median;// 比较逻辑assign a_ge_b = (A >= B) ? 1'b1 : 1'b0;assign b_ge_c = (B >= C) ? 1'b1 : 1'b0;assign c_ge_a = (C >= A) ? 1'b1 : 1'b0;// 多路选择器逻辑,不用进行全比较,节省资源always @(*) beginif (!a_ge_b && !b_ge_c &&  c_ge_a)      // A < B < Cabc_median = B;else if ( a_ge_b &&  b_ge_c && !c_ge_a) // C < B < Aabc_median = B;else if ( a_ge_b && !b_ge_c && !c_ge_a) // B < C < Aabc_median = C;else if (!a_ge_b &&  b_ge_c &&  c_ge_a) // A < C < Babc_median = C;elseabc_median = A;end// 输出寄存器:时序逻辑always @(posedge clk) beginMedian_of_abc <= abc_median;endendmodule

此外:1)在实际项目中,如果允许两级流水线延迟,可在a_ge_b, b_ge_c, c_ge_a处插入一级寄存器,增加性能;
2)修改多路选择器的逻辑关系,可变为求三个数的最大值,也可变为求三个数的最小值,消耗的资源和时序性能不变。

http://www.lryc.cn/news/578261.html

相关文章:

  • Python 数据分析与机器学习入门 (五):Matplotlib 数据可视化基础
  • python环境快速搭建
  • Clickhouse源码分析-TTL执行流程
  • 直播 APP 开发需要多少成本
  • (LeetCode 面试经典 150 题) 135. 分发糖果 (贪心)
  • 【Springai】 2指定模型的三种方式(Ollama)
  • 【SpringAI】3.结构化输出,初级版
  • Spring Boot + ONNX Runtime模型部署
  • springboot中多个定时任务(@Scheduled)如何互不影响
  • 大数据(4)-spark
  • Webpack优化详解
  • Unity性能优化-渲染模块(1)-CPU侧(2)-DrawCall优化(2)GPUInstancing
  • 浪潮和曙光服务器的ipmi配置教程
  • 图灵完备之路(数电学习三分钟)----开关与延迟线
  • Ubuntu更换Home目录所在硬盘的过程
  • Pyhton-EXCEL与Mysql数据对比
  • 从设计到开发一个小程序页面
  • 鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(2/3)
  • HTML之常用基础标签
  • JavaScript异步编程的五种方式
  • 力扣 hot100 Day30
  • Spring生态:云原生与AI的革新突破
  • 七天学会SpringCloud分布式微服务——06——Sentinel
  • 从零到一通过Web技术开发一个五子棋
  • CSDN博客大搬家(本地下载markdown合适和图片本地化)
  • Stable Diffusion 项目实战落地:从0到1 掌握ControlNet 第四篇 风格化字体大揭秘:从线稿到涂鸦,ControlNet让文字焕发新生
  • 【机器人】复现 HOV-SG 机器人导航 | 分层 开放词汇 | 3D 场景图
  • 文心大模型正式开源,开启AI普惠新时代
  • vue上传各种文件,并预览组件,(预览,下载),下载resources目录下文件
  • 云上攻防—Docker安全容器逃逸特权模式危险挂载