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

【芯片设计- RTL 数字逻辑设计入门 14 -- 使用子模块实现三输入数的大小比较】

文章目录

    • 三输入数的大小比较
      • 问题分析
      • verilog code
      • TestBench Code
      • 综合图
      • 仿真波形图

三输入数的大小比较

在这里插入图片描述
在数字芯片设计中,通常把完成特定功能且相对独立的代码编写成子模块,在需要的时候再在主模块中例化使用,以提高代码的可复用性和设计的层次性,方便后续的修改。

请编写一个子模块,将输入两个8bit位宽的变量data_a,data_b,并输出data_a,data_b之中较小的数。并在主模块中例化,实现输出三个8bit输入信号的最小值的功能。

子模块的信号接口图如下:
在这里插入图片描述
使用Verilog HDL实现以上功能并编写testbench验证。

输入描述

  • clk:系统时钟
  • rst_n:异步复位信号,低电平有效
  • a,b,c:8bit位宽的无符号数

输出描述

  • d:8bit位宽的无符号数,表示a,b,c中的最小值

问题分析

需要调用3个模块:

  • 第一个模块:比较 T 时刻的 a 和 b,T+1 时刻出来 tmp1;
  • 第二个模块:比较 T 时刻的 a 和 c,T+1 时刻出来 tmp2;
  • 第三个模块:比较 T+1 时刻的 tmp1 和 tmp2,T+2 时刻出来 d;

如果只用2个子模块,那么 T 时刻比较 a 和 b 得到 tmp1,再比较 tmp1 和 c 的时候是 T+1 时刻的 c 和 T+1 时刻的 tmp1,而 tmp1 代表的是 T 时刻 a 和 b 的较小值,所以这时候比较的 T 时刻的 a、b 和 T+1 时刻的 c,显然不符合要求。

所以不能只例化两次子模块,因为主模块例化的子模块在综合时是复制一样的电路,在执行时是并行执行的。如果只例化两次,第二次例化的值并不是第一个子模块输出的最小值

verilog code

在这里插入图片描述在这里插入图片描述

TestBench Code

在这里插入图片描述

综合图

在这里插入图片描述

仿真波形图

在这里插入图片描述


http://www.kler.cn/a/232667.html

相关文章:

  • C++中的std::tuple和std::pair
  • Springboot配置全局异常通用返回
  • win11 新建一个批处理,双击查看本机的IP地址
  • Python →爬虫实践
  • 微服务(二)
  • 使用pdfjs加载多页pdf并实现打印
  • router路由跳转的两种模板2.0版本
  • 2.2-学成在线内容管理之课程分类查询+新增课程
  • Linux 36.2@Jetson Orin Nano之Hello AI World!
  • 蓝桥杯刷题day06——平均
  • Peter算法小课堂—枚举优化
  • 前端工程化之:webpack3-5(css module)
  • Redis(十二)Bigkey
  • Qt信号和槽机制(什么是信号和槽,connect函数的形式,按钮的常用信号,QWidget的常用槽,自定义槽函数案例 点击按钮,输出文本)
  • 基于 Python opencv 的人脸识别的酒店客房入侵系统的检测
  • 电脑服务器离线安装.net framework 3.5解决方案(错误:0x8024402c )(如何确定当前系统是否安装NET Framework 3.5)
  • STM32学习笔记——定时器
  • 力扣36.有效的数独
  • AD9361多片同步设计方法
  • Android Studio 安装Flutter插件但是没法创建项目
  • 七、Nacos源码系列:Nacos服务发现
  • 阿里云服务器租用价格表_2024一年_1个月_1小时收费价格表
  • 怎么在bash shell中操作复杂json对象
  • 【玩转408数据结构】线性表——定义和基本操作
  • 华为视频监控接入到视频监控平台 (华为网路监控摄像机IPC和华为视频节点设备VCN)
  • Golang开发:跨域配置