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

【芯片设计- 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.lryc.cn/news/298518.html

相关文章:

  • Xilinx FPGA——在线升级
  • 电商小程序02数据源设计
  • Leetcode 3033. Modify the Matrix
  • 蓝桥杯刷题--python-4
  • openJudge | 距离排序
  • 【算法】排序详解(快速排序,堆排序,归并排序,插入排序,希尔排序,选择排序,冒泡排序)
  • LeetCode Python -8.字符串转整数
  • 【java】笔记10:类与对象——本章练习
  • 《UE5_C++多人TPS完整教程》学习笔记8 ——《P9 访问 Steam(Acessing Steam)》
  • 缓存穿透问题与解决方案
  • 《Git 简易速速上手小册》第1章:Git 基础(2024 最新版)
  • 交易中的胜率和盈亏比估算
  • mysql RR、RC隔离级别实现原理
  • c语言--指针数组(详解)
  • Elasticsearch单个索引数据量过大的优化
  • Java安全 CC链1分析(Lazymap类)
  • 【lesson51】信号之信号处理
  • 分享springboot框架的一个开源的本地开发部署教程(若依开源项目开发部署过程分享持续更新二开宝藏项目MySQL数据库版)
  • leetcode:131.分割回文串
  • Linux下的json-c
  • [C#] 如何使用ScottPlot.WPF在WPF桌面程序中绘制图表
  • 如何修复Mac的“ kernel_task” CPU使用率过高的Bug?
  • 【NodeJS】006- API模块与会话控制介绍d
  • [UI5 常用控件] 08.Wizard,NavContainer
  • EasyExcel分页上传数据
  • Spring Native 解放 JVM
  • 汇编的两道题
  • Seurat - 聚类教程 (1)
  • Mac 版 Excel 和 Windows 版 Excel的区别
  • 【报错解决】-bash: export: `-8‘: not a valid identifier 不是有效的标识符