RTL书写与延迟、面积、功耗、布线

2024-04-10 17:20

本文主要是介绍RTL书写与延迟、面积、功耗、布线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RTL书写与延迟、面积、功耗、布线

延迟

设计方法

  • 将延迟较大的信号放在最后一个选择器上,从而隐藏其较大的延迟。
  • 对电路的修改不应该影响其原有的逻辑。

if语句输入信号延迟

  • 提取输出
  • 提取条件
//修改前
module mult_if(
input			a,b,c,d,
input	[3:0]	sel,
output	reg		z);
always@(*)beginz = 1'b0;if(sel[0])z = a;if(sel[1])z = b;if(sel[2])z = c;if(sel[3])z = d;
end
endmodule

在这里插入图片描述

//如果如果b信号来的最晚
//修改后
always@(*)beginz = 1'b0;if(sel[O])z = a;if(sel[2])z = c;if(sel[3])z = d;if(sel[1]&~(sel[2] | sel[3]))z = b;//提取了分支输出和分支条件,不影响原电路的优先级,但增加了电路的面积。

在这里插入图片描述

if语句控制信号延迟

  • 提取延迟信号所在分支输出,作为最后一级的选择器的一个输入信号。
  • 提取出去延迟分支后的电路输出,作为最后一级选择器的一个输入信号。
  • 提取延迟信号所在分支的执行条件,作为最后一级选择器的选择信号。

单if语句嵌套case语句,case语句的分支来的比较晚。

  • 将case中延迟最大的数据支路,放到最后一级MUX中作为一个输入信号。

  • 提取延迟信号所在分支的执行条件,作为最后一级选择器的选择信号。

  • 对if else和case中的其他支路条件进行提取,作为最后一级选择器的选择信号。

先加后选和先选后加

  • 如果选择信号来的较晚可以选择先加后选

调整信号计算顺序

module mult_if(
input           [3:0]   A,B,C,D,
//input	[3:0]	sel,
output	reg     [3:0]   Z);
always@(A,B,C,D) beginif(A + B < 'd24)Z <= C;elseZ <= D;
end
endmodule

在这里插入图片描述

//如果A信号晚到,对计算顺序进行优化
module mult_if(
input           [3:0]   A,B,C,D,
//input	[3:0]	sel,
output	reg     [3:0]   Z);
always@(A,B,C,D) beginif(A<'d24 - B)Z <= C;elseZ <= D;
end
endmodule

在这里插入图片描述

面积

  • 减少设计面积意味着成本降低、功耗降低。

  • 减少面积的方法:

    • 了解使用资源的数量(使用了多少个触发器、加法器、乘法器)。

    • 触发器的数量由功能决定,很难减少。

    • 了解各种操作符会产生的电路,对组合逻辑进行优化。

优化设计中的操作符

  • 会产生较大电路的操作符:”+”、“-"、“×”、“÷”。

  • 条件语句中的比较运算。

  • 设计方法:对于这些操作,首先应该判断其必要性,是否能用更简单的运算代替。

对定值数据优化

  • 32的二进制表示:6’b10_0000;

  • 对于一个位宽为6的数据A,如果A<32,说明A[5]<0;

  • 使用了一个1bit的逻辑门代替了6bit的比较器。

资源共享优化

如果,必须使用复杂的运算符,则应考虑是否可以资源共享。

if(y1>a+b+q)statement1;
if(y2>a+b+r)statement2;
if(y3>a+b+s)statement3;
//优化后,减少了两个加法器sum<=a+b;
if(y1>sum+q)statement1
if(y2>sum+r)statement2
if(y3>sum+s)statement3;

多比特信号

多比特的信号也往往会占用较大的资源,因为使用这些信号的操作都是对所有的比特进行的,相当于成倍使用资源。
观察操作是否需要多比特信号的所有位宽,如果不是,则可以只对需要的部分比特进行操作。

//访问一RAM的地址有8比特,而写入操作时从0开始,每隔32个地址写入一 个值,地址的产生可以有两种写法。//优化前
addr<=addr+'d32
//优化后
addr[7:5]<=addr[7:5]+1'b1;
addr[4:0]<=addr[4:0]+1'b0;

功耗

P d = ∑ a f C V 2 P_d=\sum_{}^{}{afCV^2} Pd=afCV2

P d P_d Pd:电路割点的功耗总和, a a a:该点电路的反转次数, f f f:电路的工作频率, C C C:该点的电容, V V V:电压值。

  • 负载电容c和工作电压v是RTL设计无法改变的因数。

  • RTL级设计降低功耗主要考虑降低电路的翻转频率。

  • 组合逻辑产生的毛刺也会大量消耗功耗,但毛刺在设计中无法避免,只能尽量减少毛刺在电路中的传播从而降低功耗。

功耗控制主要措施:

  • 使用门控时钟,门控时钟是电路设计最常用也是最有效的方法,在逻辑综合阶段可以让综合工具自行插入。

  • 增加使能信号,使得部分电路只有在需要工作时才工作

  • 对芯片各个模块进行控制,在需要工作时才工作

  • 减少毛刺在电路中的传播,尽量把产生毛刺的电路放在传播路径的最后。另外,可以使用一些减少毛刺的技术。

  • 对于有限状态机,可以通过低功耗编码来减少电路的翻转。

//状态转移
A:0101
B:1010
每次转移四个信号发生翻转
A:0101
B:0100
每次转移一个信号发生翻转

门控时钟和增加使能控制的区别:

  • 增加使能:电路的信号不在翻转,但时钟每个周期还会继续翻转。

  • 门控时钟:直接关掉时钟。(效果更好)

布线

  • 布线(routing):根据门级网表的描述实现各个单元的连接,是芯片设计的最后阶段。

  • 布线(routing) 是否成功,布局 (placement) 是最关键的因素

  • 但即使使用最好的布局工具,还是可能出现无法布通的情况。 出现这种问题,往往要去修改RTL级设计。

  • 在RTL编码阶段考虑代码可能对布线产生的影响,从而避免无法布通的情况。

热点

  • 热点是指设计的功能需要在一个面积内占用大量的布线资源,会影响布线质量。

img

  • 热点产生原因:RTL编码时使用了特定的结构,如很大的 MUX。
  • 这种结构产生的热点,在综合时导致的延迟无法看出 ,只有到了布线阶段才能给看到其负面影响。

在这里插入图片描述

  • 设计方法:将一个大的mux分解为多级较小的mux。

在这里插入图片描述

参考资料:

芯动力——硬件加速设计方法

可综合风格——在RTL书写中如何考虑延迟、面积、功耗、布线

这篇关于RTL书写与延迟、面积、功耗、布线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/891674

相关文章

ActiveMQ—消息特性(延迟和定时消息投递)

ActiveMQ消息特性:延迟和定时消息投递(Delay and Schedule Message Delivery) 转自:http://blog.csdn.net/kimmking/article/details/8443872 有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。 类似

MySQL主从同步延迟原理及解决方案

概述 MySQL的主从同步是一个很成熟的架构,优点为: ①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力; ②在从主服务器进行备份,避免备份期间影响主服务器服务; ③当主服务器出现问题时,可以切换到从服务器。 相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案。但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题。这种问题如何解决呢? MyS

JobScheduler 调用导致的运行时长30分钟的功耗问题

一、SDK 的使用情况与功耗影响 案例是否导致功耗变大onStartJob return true 且子线程没有调用jobFinished()告知系统功耗变大,最长带来30分钟的partial wakelock 长持锁onStartJob return true 且子线程调用jobFinished()告知系统功耗有影响,主要线程执行时长,标准是30秒内onStartJob return fals

利用向量积(叉积)计算三角形的面积和多边形的面积(hdu2036)

开始撸计算几何题目了。。。。。。。 预备知识:叉乘求多边形面积 参考证明资料: 公式证明: http://www.cnblogs.com/xiexinxinlove/p/3708147.html 高中知识: http://wenku.baidu.com/view/867e6edfad51f01dc281f11a.html #include<stdio.h>#inclu

百度之星初赛1006(计算几何:能包含凸包的最小矩形面积)

矩形面积    Accepts: 717    Submissions: 1619  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊有一个桌面,小度熊剪了很多矩形放在桌面上,小度熊想知道能把这些

HDU 2036 求多边形面积

题目: http://acm.hdu.edu.cn/showproblem.php?pid=2036 对用(按逆时针排列)描述的多边形,其面积为: 若按顺时针排列,取负数即可。 资料链接: http://zh.wikipedia.org/wiki/%E5%A4%9A%E8%BE%B9%E5%BD%A2 不知道这公式是咋推导的,网上找不到,先留着。 #

JD 1497:面积最大的全1子矩阵

OJ题目:click here~~ 题目分析:经典题目。。 const int maxn = 1008 ;int n , m ;int x[maxn][maxn] ;int h[maxn] , Left[maxn] , Right[maxn] ;void check(int &a , int b){if(b > a) a = b ;}void all_1_matrix()

20180108文献综述书写感悟

在写文献综述理清各章节脉络的时候,发现了以下几个问题,共勉之。 1、资源对接问题:章节应该明确标注出处,来源,例如(from 百度/某篇文章链接),不写,则默认为原创。 以方便下一个接着写的同学清晰了解资料来源。 2、质量低:上任对发展史做了整理,但并没有输出成原创性文字,重新阅读加大理解成本,并且思路不新不全局不清晰,需要重新绘之。

Flink全链路延迟的测量方式和实现原理

点击上方蓝色字体,选择“设为星标” 回复”面试“获取更多惊喜 本文已经加入「大数据成神之路PDF版」中提供下载。你可以关注公众号,后台回复:「PDF」 即可获取。 一、背景 Flink Job端到端延迟是一个重要的指标,用来衡量Flink任务的整体性能和响应延迟(大部分流式应用,要求低延迟特性)。 通过流处理引擎竞品对比,我们发现大部分流计算引擎产品,都在告警监控页面,集成了全链路时延指标

dispatch_after 的延迟执行分析

dispcth_after 是将block 中的任务延迟添加到它将要执行的队列中去,而并不一定添加到队列中就立即会去执行任务。 图中表示是在5秒中后将任务添加到主队列中,如果主队列中还有另外的任务假设A、B 要执行,那么这个任务会在任务A、B 执行完后才会开始执行。 验证的代码如下: dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int