RTL编码(2)——模块优化

一、顶层模块的划分

        在RTL编码中,我们是以模块为单位进行设计的,模块之间的连接和嵌套关系对于电路结构有着很大的影响。一个好的系统设计中,我们应该使得模块尽量满足以下两个标准:

  • 顶层模块扁平化
  • 内部模块层次化

1.1 顶层模块扁平化

        顶层模块必须包括I/O单元、时钟产生电路、处理器核、存储器核、内建自测试单元、门控时钟等无法与其他模块一起综合的模块,这称为“扁平化”。扁平化的方式降低了综合与仿真的复
杂度,缺点是局部最优不等于全局最优,而且可能存在综合工具无法消除的冗余。

1.2 内部模块层次化

        对于复杂内部模块(如上图中的接口和功能模块),可以分成多个层次进行综合,这称为“层次化”。层次化设计可以得到更好的综合优化效果,但复杂度和运算量要大得多。

二、行为化与结构化划分

        我们以一个32位二选一选择器为例:

2.1 行为化描述

module mux32(input [31:0] out,input [31:0] a,input [31:0] b);wire sel;assign out = sel ? a : b;
endmodule

2.2 结构化描述

module mux32(input [31:0] out,input [31:0] a,input [31:0] b);wire sel;mux2_1L8 m0(out[7:0],a[7:0],b[7:0],sel);               //bit 7  through 0 mux2_1L8 m1(out[15:8],a[15:8],b[15:8],sel);            //bit 15 through 8mux2_1L8 m2(out[23:16],a[23:16],b[23:16],sel);         //bit 23 through 16 mux2_1L8 m3(out[31:24],a[31:24],b[31:24],sel);         //bit 31 through 24
endmodule

          行为化描述的优化程度高,但综合出的电路结构缺乏层次和对称性;结构化描述的综合效率高(特别是通用元件库能提供底层单元时),但优化程度依赖于底层单元的性能。 通常简单的底层模块用行为级描述来构造,然后以其为单元来组建上层较大的模块。尽量避免或尽量少地在同一个模块中混合使用行为化描述和结构化描述。

三、速度与面积的折中

        这里我们以加法器举例:

         逐次进位加法器 :Carry-Propagate Adder 串行计算进位,速度慢 (9个门延迟),用的逻辑门少。

       
        超前进位加法器 :Carry-look-ahead Adder,并行计算进位,速度快(4个门延迟),用的逻辑门多(因要增加超前进位计算逻辑)。
        
        大多数综合工具中,直接定义“+”综合出的就是逐次进位加法器。此时,为了改善性能,设计者就需要在设计库(如Synopsys DesignWare库)中调用性能更好的加法器单元(如超前进位加法器、进位保留加法器等)。

四、组合逻辑优化

4.1 组合逻辑与寄存器

        一般来说,我们要求模块输出或/和输入端要有寄存器。我们考虑以下的几种情况:

情况1

        差 出现纯组合逻辑模块(B),其输入和输出端都无寄存器,时序控制困难,可能无法综合。

情况2

         尚可 每个模块输入端有寄存器,时序可控,但前一模块的输出驱动强度和输出延迟可能受连线影响而无法预测。

情况3 

        尚可 每个模块的输出端有寄存器,时序可控,但后一模块的输入延时可能受连线影响而无法预测。

情况4

        尚可 对于模块间连线可能较长、信号频率较高的情况,模块输入无寄存器时可能对时序有不良影响。

情况5 

 

        最好 对于在版图设计过程中作为单元独立进行布局布线的模块,输入和输出都最好加以寄存器,以避免模块间连线延迟对于时序的不利影响,亦即将时序收敛性局限在模块内部。

4.2 关键路径中的组合逻辑

        模块尺寸不宜过大,譬如控制逻辑不超过5-10k门。在延时长的组合逻辑中插入寄存器,分解为若干较小的组合逻辑,可以提高电路的工作频率。

        模块的大小尽量一致,尽可能使寄存器间的组合逻辑延时均匀化,也有利于提高电路的工作频率。

4.3 模块按照不同的设计目标优化

        关键路径和非关键路径的逻辑最好分配到不同的模块中。将关键路径逻辑和非关键路径逻辑分配到不同的模块中,使得综合工具可以对关键路径逻辑进行速度优化,而对非关键路径逻辑进行面积优化。综合工具的优化基本上是针对模块的优化。

4.4 避免组合逻辑内出现反馈 

五、时钟与复位优化

5.1 时钟

        一般来说,在设计中我们推荐只使用单时钟沿(上升沿)。

  • 所有时序控制均使用上升沿触发的寄存器,有利于产生更优的综合结果。
  • 同时使用上升沿和下降沿触发,会使时钟周期分析复杂化,难以精确估计时钟频率,还可能使时钟抖动转化为时钟偏斜,同时增加门数
  • 若必须使用混合时钟沿,应将它们放在不同的模块中,同时明确给出时钟信号占空比要求,而且在综合和时序分析中确保其时序周期在最坏情况下也是正确的

5.2 复位

        相关内容可以阅读:

复位电路reset(同步复位,异步复位,异步复位同步释放电路)icon-default.png?t=N7T8https://blog.csdn.net/apple_53311083/article/details/132049729?spm=1001.2014.3001.5502

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python+requests+unittest+excel实现接口自动化测试框架

在刚刚进入测试行业的时候,最开始也是做功能测试,我想很多伙伴和我一样,觉得自动化测试都很高端,很神秘。迫不及待的想去学习作自动化测试。 以前比较常用数据库python做自动化,后面发现excel个人觉得更加适合&#x…

22 查找众数及中位数

题目描述 众数是指一组数据中出现次数量多的那个数,众数可以是多个。 中位数9是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就…

Jest与typescript单元测试

文章目录 前言安装配置.vscode/launch.jsonjest.config.tsts.config.ts 测试例子 前言 简单记录一下vscode里跑Jest单元测试。 安装 yarn add -D ts-jest ts-node types/jest jest 配置 .vscode/launch.json {"version": "0.2.0","configurations…

【文件上传系列】No.0 利用 FormData 实现文件上传、监控网路速度和上传进度(原生前端,Koa 后端)

利用 FormData 实现文件上传 基础功能:上传文件 演示如下: 概括流程: 前端:把文件数据获取并 append 到 FormData 对象中后端:通过 ctx.request.files 对象拿到二进制数据,获得 node 暂存的文件路径 前端…

docker网络【重点】

一、网络知识 1、桥接模式:用于链接两个不同网络段的设备,是共享通信的一种方式 2、桥接设备:工作在OSI模型的第二层(数据链路层)。根据MAC地址转发数据帧,类似于交换机,只能转发同一网段&…

C++11:lambda表达式(对各个参数详细说明+注意事项+使用案例+探究底层)

目录 一、lambda表达式语法 1.lambda表达式书写格式 2. lambda表达式各部分说明 3.捕获列表说明 二、lambda表达式的一些使用案列 1.借助auto将lambda表达式赋值给一个变量来直接调用。 2.对于类似于sort对自定义类型排序等情况时使用lambda可简化代码 以前我们对自定义…

【SpringBoot】yml配置文件注释中文乱码

错误展示 搭了一个环境,一启动项目,yml文件中文全乱码了 解决措施 按如图顺序操作 结果 再次启动项目,乱码已解决!

Spring IoC和DI

目录 一. Spring是什么 IoC DI 二. IoC&DI的使用 IoC 1.Controller(控制器存储) 2.Service(服务存储) 3.Repository(仓库存储) 4.Componemt(组件存储) 5.Configuratio…

JavaSE基础50题:8. 获取一个数二进制序列中所有的偶数和奇数位,分别输出二进制序列。

概述 获取一个数二进制序列中所有的偶数和奇数位,分别输出二进制序列。 如:从右往左数 0111(如图) 偶数位:01 奇数位:11 代码 public static void main(String[] args) {Scanner scanner new Scanner(Sys…

c++ - 警告 : treating ‘c-header‘ input as ‘c++-header‘ when in C++ mode, 此行为已弃用

一、问题出现 在进行多文件编译的时候报错 二、原因 我们多文件编译的时候加了头文件 三、解决办法 去掉头文件,只编译源文件

第二十一章总结。。

计算机网络实现了堕胎计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是再已连接的不同计算机上运行的程序,这些程序借助于网络协议,相互之间可以交换数据,编写网络应用程序前,首先必须明确网络协议…

JAVA调优

1 JAVA虚拟机 1.1 基本组成 通常来说Java平台标准版(Java SE)包括 Java SE开发工具包(JDK)和Java SE运行时环境(JRE)。 JRE提供了运行以Java编程语言编写的applet和应用程序所必需的库,Java虚…