香农扩展运算
11 Jan 2020 1467字 5分 次 Digital IC Design打赏作者 CC BY 4.0 (除特别声明或转载文章外)
1 前言
香农扩展(Shannon Expansion)是一种逻辑复制、增加面积、提高频率的时序优化手段。
2 定义
布尔逻辑可以做如下扩展:
F(a,b,c) = aF(,b,c) + āF(0,b,c)
从上面的定义可以看到,香农扩展即布尔逻辑扩展,是卡诺逻辑化简的反向运算。香农扩展相当于逻辑复制,可以提高频率;而卡诺逻辑化简相当于资源共享,可以节约面积。
3 举例说明
香农扩展通过增加MUX,从而缩短了某个优先级高,但是组合路径长的信号的路径时延,从而提高了该关键路径的工作频率。
设所需运算的逻辑表达式为:
F = ((({8{late}}|in0)+in1)==in2) & en;
其中,信号in0、in1和in2都是8bit的数据,信号late和信号en是控制信号,信号late是本逻辑运算的关键路径信号,延时最大。
使用香农扩展:
F = late.F(late=1) + ~late.F(late=0)
= late[((8’b1 + in1) == in2) & en] + ~late[((in0 + in1) == in2) & en]
这相当于一个以late为选择信号,以late[((8’b1 + in1) == in2) & en]和~late[((in0 + in1) == in2) & en]为两个输入信号的2选1的MUX。因此,late信号的优先级被提高,其信号路径的延时降低,但是其代价是设计的面积增加了,并且需要两个比较运算符。
未使用香农扩展的Verilog代码如下:
module un_shannon(
input [7:0] in0,in1,in2,
input late,en,
output out
);
assign out = ((({8{late}}|in0)+in1)==in2) & en;
endmodule
使用Synplify Pro 2018.03综合,目标器件为Altera Cyclone V 5CSEMA5F31C6,得到的RTL图如下:
未使用香农扩展是,从输入PAD late到输出PAD out之间共有4个逻辑单元,五段路径。其综合结果使用1了个8bit或门,1个8bit输入加法器,1个8bit比较器,1个2输入与门。
使用香农扩展的Verilog代码如下:
module shannon(
input [7:0] in0,in1,in2,
input late,en,
output out
);
wire late_eq_0,late_eq_1;
assign late_eq_0 = ((in0 + in1) == in2) & en;
assign late_eq_1 = ((8'b1 + in1) == in2) & en;
assign out = late ? late_eq_1 : late_eq_0;
endmodule
同样使用Synplify Pro 2018.03综合,目标器件为Altera Cyclone V 5CSEMA5F31C6,得到的RTL图如下:
使用香农定理后,从输入PAD late到输出PAD out之间共有1个逻辑单元,2段路径。其综合使用了2个8bit输入加法器,2个8bit比较器,2个数据与门和1个2输入选择器。
可以看出,使用香农扩展后,对于late这一关键路径,消除了3个逻辑层次,从而在一定程度上提高了设计的工作频率。作为提高工作频率的代价,多用了1个加法器和选择器,消耗了更多的面积。
是否使用香农扩展,关键要看被优化对象的优化目标是面积还是路径。
告辞。