当前位置: 首页 > 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.dtcms.com/a/263544.html

相关文章:

  • 本周股指想法
  • 产品背景知识——API、SDK、Library、Framework、Protocol
  • 10.【C语言学习笔记】指针(二)
  • Python 数据分析与机器学习入门 (八):用 Scikit-Learn 跑通第一个机器学习模型
  • stm32达到什么程度叫精通?
  • 百度文心大模型4.5系列正式开源,开源会给百度带来什么?
  • docker-compose部署Nacos、Seata、MySQL
  • API接口安全-1:身份认证之传统Token VS JWT
  • 【甲方安全建设】SDL基线建设及审计评估
  • 从设计到开发一个小程序页面
  • JavaScript异步编程的五种方式
  • RocketMQ第五节(springboot整合MQ)
  • C语言main函数的原理:程序入口的奥秘
  • docker使用容器网络
  • 华为云Flexus+DeepSeek征文 | 对接华为云ModelArts Studio大模型:AI赋能投资理财分析与决策
  • 【软考高项论文】信息系统项目的人力资源管理
  • springboot中多个定时任务(@Scheduled)如何互不影响
  • P1967 [NOIP 2013 提高组] 货车运输
  • localStorage 和 sessionStorage
  • 编译原理——运行时存储组织与内存管理
  • Zookeeper安装使用教程
  • 回写缓存为何需要脏位?
  • SimLOD代码精读(二)建立Octree之Splitting Pass分裂阶段
  • 英国研究团队启动合成完整人类基因组的前沿项目
  • Java-包-访问修饰符-封装
  • Redis Lua 调试器(LDB)完全指南
  • 深度剖析 LNK 参数隐藏攻击 (ZDI-CAN-25373)
  • C++ Vector的使用(下)
  • 贪心算法在C++中的应用与实践
  • 基于动漫数据的可视化分析与推荐系统实现