赞
踩
设计方法
if语句输入信号延迟
//修改前
module mult_if(
input a,b,c,d,
input [3:0] sel,
output reg z
);
always@(*)begin
z = 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@(*)begin
z = 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) begin
if(A + B < 'd24)
Z <= C;
else
Z <= 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) begin
if(A<'d24 - B)
Z <= C;
else
Z <= 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编码阶段考虑代码可能对布线产生的影响,从而避免无法布通的情况。
热点
参考资料:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。