【FPGA/IC】什么是模块化设计?

news2024/11/21 0:25:46

什么是模块化设计

FPGA/IC设计中根据模块层次的不同有两种基本的设计方法:

  • 自下而上方法对设计进行逐次划分的过程是从基本单元出发的,设计树最末枝上的单元是已经设计好的基本单元,或者其他项目开发好的单元或者IP。该方法先对底层的功能块进行分析,然后使用这些模块来搭建规模更大的功能块,如此继续直至顶层模块。
  • 自上而下的设计是从系统级开始,把系统分为基本单元,然后再把每个单元划分为下一层次的基本单元,继续划分知道满足设计要求为止。该方法先定义顶层功能块,进而分析需要哪些构成顶层模块的必要子模块;然后进一步对各个子模块进行分解。

设计中这两种方法往往是混用的。设计师首先根据功能定义好顶层模块,然后依据一定的标准来划分各个子模块。同时对子模块进行优化设计,并使用这些子模块来搭建上层模块。两者的工作按相反的方向独立进行,直至在某一中间点会合。

在设计系统时,首先根据系统功能需求进行分析,然后将复杂的系统分解为多个子模块,这些子模块还可以再继续分解为更下一级的子模块,直到满足设计要求。模块化设计可以提高代码的可读性,令设计思路更清晰,便于大型设计的分工合作和独立测试,且有助于设计文件的维护和复用。

image-20240304132604114

一个模块化设计实例

假如现在需要你设计一个数字电路,它的功能是:开发板数码的管默认显示数字0,每按下一次按键key,则数码管显示的数字+1(显示10进制数字)。

首先需要的肯定是一个数码管显示模块,它可以根据输入的数据,来显示对应的数字。然后需要一个能检测到按键被按下的模块,它每检测到按键按下一次,都要输出一个使能信号。最后是数据累加1模块,每有一次按键模块使能信号(表示按了一次按键)传过来,它都要使数据累加1。

image-20240304133412049

因为开发板上的按键是机械按键,按下和松开的瞬间都会存在一定的机械抖动,为了正确的检测到按键被按下,还需要设计一个按键消抖模块,而用下降沿检测即可检测按键是否被按下。由于数码管需要显示的数字为10进制,所以数据累加模块产生的数据还需要进行BCD转化,这意味着要再设计一个2进制转BCD模块。

image-20240304134134284

这样一个系统的逐层分解就完成了。看到这你可能会很不解,就这么一个简单的模块还需要搞这么麻烦,直接写到一个模块不就完事了吗?虽然理论上任何设计都可以在同一个模块中完成,但是如果将不同功能、不同层次、不同类型的电路混淆在同一个模块中,却不是一种好的系统设计方法,对于比较复杂的设计,将会导致整个设计杂乱无章,不利于设计的阅读与维护,也会给综合和实现过程带来许多麻烦。

同时,像按键消抖模块,下降沿检测模块和BCD模块可能都是初学者在学习过程中已经设计过了的模块,那么是将这些模块直接拿过来例化方便还是重新写一遍RTL方便?

模块划分的方法

模块划分的方法和基本原则是:

  1. 子模块功能相对独立,模块内部联系尽量紧密,而模块间的连接尽量简单。子模块的合理划分非常重要,应该综合考虑子模块的功能、结构、时序、复杂度等多方面的因素。
  2. 层次不要太深,一般为3~5层即可。在综合时综合工具为了获得更好的综合效果,会默认将RTL代码的层次打平(Flatten)。为了在综合后仿真和实现后仿真中较方便地找出一些中间信号,比如子模块之间的接口信号等,可 以在综合工具中设置保留结构层次,以便于查找和观察仿真信号。
  3. 顶层模块最好只包含对所有子模块的组织和调用,而不要完成复杂的逻辑功能。比如只写输入/输出管脚声明、模块的调用与实例化、全局时钟资源、全局置位/复位、三态Buffer和一些简单的组合逻辑。
  4. 子模块之间也可以有接口,但是最好不要建立子模块间跨层次的接口。例如上图中模块 A1到模块 B1之间不要直接连接,两者需要交换的信号可以通过模块 A、模块 B的接口传递。这样可以增加设计的可读性和可维护性。

下面是一些划分模块的优化设计方法:

  1. 对每个同步时序设计的子模块的输出使用寄存器。这种模块划分符合时序约束的习惯,便于利用约束属性进行时序约束,可以达到更好的时序优化效果,
  2. 将相关的逻辑或者可以复用的逻辑划分在同一模块内。这样可以在最大程度上复用资源,减少设计所消耗的面积。同时更利于综合工具优化某个具体功能的时序关键路径。
  3. 将不同优化目标的模块分开。目前很多综合与实现工具都支持物理区域位置约束,以模块为单元进行物理区域约束,就可以让综合工具仅需考虑单一的优化目标,从而使优化时序或面积就更有效。
  4. 可以将时序约束较松的逻辑归到同一模块。有些逻辑的时序非常宽松,不需要较高的时序约束。将这些模块归类,并指定宽松约束,则可以让综合器尽量节省面积资源和优化布局布线。
  5. 将存储逻辑(RAM、ROM、和 FIFO等)独立划分成模块。这样做的好处是便于利用综合约束属性显化指定这些存储单元的结构和所使用的资源类型,也便于综合器合理推断出这些逻辑所使用的固定硬件资源。

总结

模块化设计的优点:

  • 代码具有更好的可读性,更容易理解设计的功能和数据之间的流动,更容易debug
  • 代码具有更好的可复用性,能减少多次设计之间的重复工作,避免重复造轮子,提高工作效率
  • 不同模块的时钟域相对独立,使跨时钟域设计之间的边界更清晰

模块化设计是设计复杂数字系统的重要方法,对复杂设计的分工、测试以及代码的阅读、维护和复用都有好处。模块划分非常重要,其关系到能否最大程度上发挥项目成员协同设计的能力,更重要的是它直接决定着设计的综合、 实现的耗时与效率。

复用都有好处。模块划分非常重要,其关系到能否最大程度上发挥项目成员协同设计的能力,更重要的是它直接决定着设计的综合、 实现的耗时与效率。


  • 📣您有任何问题,都可以在评论区和我交流📃!
  • 📣本文由 孤独的单刀 原创,首发于CSDN平台🐵,博客主页:wuzhikai.blog.csdn.net
  • 📣您的支持是我持续创作的最大动力!如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐

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

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

相关文章

8-图像缩放

其实,就是开辟一个zoomwidth,zoomheight的内存,再分别赋值即可。 void CDib::Scale(float xZoom, float yZoom) { //指向原图像指针 LPBYTE p_data GetData(); //指向原像素的指针 LPBYTE lpSrc; //指向缩放图像对应像素的指针 LPBYTE lpDs…

RTC协议与算法基础 - RTP/RTCP

首先,需要说明下,webrtc的核心音视频传输是通过RTP/RTCP协议实现的,源码位于src/modules/rtp_rtcp目录下: 下面让我们对相关的内容基础进行简要分析与说明: 一、TCP与UDP协议 1.1、TCP协议 TCP为了实现数据传输的可…

基于grafana+elk等开源组件的 云服务监控大屏架构

本套大屏,在某云服务大规模测试环境,良好运行3年. 本文主要展示这套监控大屏的逻辑架构.不做具体操作与配置的解释. 监控主要分为三部分: 数据展示部分数据存储数据采集 1. 数据展示 数据展示方面主要使用grafana 2. 数据存储 根据数据种类和特性和用途的不同,本套监控采用…

专业120+总400+北京理工大学826信号处理导论考研经验北理工电子信息与通信工程,真题,大纲,参考书。

**今年专业课826信号处理导论(信号系统和数字信号处理)120,总分400,应群里同学需要,自己总结一下去年的复习经历,希望对大家复习有帮助。**专业课: 北京理工大学专业826是两门合一,…

应用开发平台集成表单设计器系列之4——表单构造器深度了解

背景 平台需要实现自定义表单功能,作为低代码开发的一部分,通过技术预研和技术选型,选择form-create和form-create-designer这两个组件进行集成作为实现方案。通过深入了解和技术验证,确认了组件的功能能满足需求,具备…

Tensorflow笔记(二):激活函数、优化器等、神经网络模型实现(商品销量预测)

import tensorflow as tf import numpy as np from tqdm import tqdm# ----------------------------- tensor常用函数2 ----------------------------------- a tf.constant([1, 2, 3, 1, 2]) b tf.constant([0, 1, 3, 4, 5]) c tf.where(tf.greater(a, b), a, b) # 若a&g…

6语言交易所/多语言交易所php源码/微盘PHP源码

6语言交易所PHP源码,简单测试了一下,功能基本都是正常的。 由于是在本地测试的运行环境的问题,K线接口有点问题,应该在正式环境下是OK的。 源码下载地址:6语言交易所/多语言交易所php源码/微盘PHP源码.zip 程序截图…

YOLOv5改进 | 图像去雾 | 利用图像去雾网络UnfogNet辅助YOLOv5进行图像去雾检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用UnfogNet超轻量化图像去雾网络,我将该网络结合YOLOv5针对图像进行去雾检测(也适用于一些模糊场景),我将该网络结构和YOLOv5的网络进行结合同时该网络的结构的参数量非常的小,我们将其添加到模型里增加的计算量和参数量基本可…

PC电脑如何使用HDMI连接小米电视当显示屏

使用HDMI连接好当时和电脑,HDMI2.0会更清晰;小米电视会自动弹窗提示你有HDMI 接口连接,或者你进入信号源进行选择即可;需要平时我们电脑的显示器正常连接,然后按 win p ,选择 扩展 屏幕; 进入设…

Spring MVC文件上传配置

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 文件上传 Spring MVC文件上传基于Servlet 3.0实现;示例代码如下: Overrideprotected void customizeRegistration(ServletRegistration.Dynamic reg…

【基于Seeed xiao ESP32S3 Sense的自动化HA鱼缸设计】

1.前言 基于Seeed xiao ESP32S3 Sense的自动化HA鱼缸 在当今物联网与智能家居科技日益发达的时代,将先进技术和传统养鱼艺术融合,创造出智能、自动化且极具观赏价值的鱼缸已成为一种创新趋势。SeeedStudio推出的Xiao ESP32-S3 Sense开发板以其卓越的性能…

sadtalker-api/

———— 下载sadtalker工程文件,包括844个模型 。。。。。。。。。。。。。。。。 配置环境: pip源,设置: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple anaconda prompt, 进入命令行 how在 …

【教学类-44-07】20240318 0-9数字描字帖 A4横版整页(宋体、黑体、文鼎虚线体、print dashed 德彪行书行楷)

背景需求: 前文制作了三种字体的A4横版数字描字帖 【教学类-44-06】20240318 0-9数字描字帖 A4横版整页(宋体、黑体、文鼎虚线体)-CSDN博客【教学类-44-06】20240318 0-9数字描字帖 A4横版整页(宋体、黑体、文鼎虚线体)https://…

蓝桥杯刷题 Day36 倒计时26天 纯练题的一天

[蓝桥杯 2022 省 B] 积木画 题目描述 小明最近迷上了积木画,有这么两种类型的积木,分别为 I 型(大小为 2个单位面积) 和 L 型 (大小为 3 个单位面积): 同时,小明有一块面积大小为2N 的画布,画布由2N 个 11 区域构成。…

vb.net+zxing.net随机彩色二维码、条形码

需要zxing库支持ZXing.NET Generate QR Code & Barcode in C# Alternatives | IronBarcode 效果图: 思路:先生成1个单位的二维码,然后再通过像素填充颜色,颜色数组要通过洗牌算法 洗牌算法 Dim shuffledCards As New List(…

docker-compose 部署nginx和jdk步骤

** yum安装jdk ** 1、​​yum -y list java* 查看可安装java版本 选择安装 java-1.8.0-openjdk-accessibility.x86_64 2、​​yum install -y java-1.8.0-openjdk-devel.x86_64 耐心等待安装完成即可 3、​java -version​​ 即可查看当前安装的java版本 4、yum安装的jdk&am…

Java代码审计安全篇-XXE(XML外部实体注入)漏洞

前言: 堕落了三个月,现在因为被找实习而困扰,着实自己能力不足,从今天开始 每天沉淀一点点 ,准备秋招 加油 注意: 本文章参考qax的网络安全java代码审计,记录自己的学习过程,还希望各…

HTML5+CSS3小实例:衣服颜色选择器

实例:衣服颜色选择器 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=…

软件杯 深度学习 python opencv 实现人脸年龄性别识别

文章目录 0 前言1 项目课题介绍2 关键技术2.1 卷积神经网络2.2 卷积层2.3 池化层2.4 激活函数&#xff1a;2.5 全连接层 3 使用tensorflow中keras模块实现卷积神经网络4 Keras介绍4.1 Keras深度学习模型4.2 Keras中重要的预定义对象4.3 Keras的网络层构造 5 数据集处理训练5.1 …

262:vue+openlayers 移动地图获取中心点经纬度信息

第262个 点击查看专栏目录 本示例介绍演示如何在vue+openlayers中移动地图并获取中心点经纬度信息。这里主要用到了是view的getCenter方法,这一功能在实际项目中很有用,能给出一个清晰的定位。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示…