原创 pipeline RISC设计(11)--优化Multiplexer(三)--一步一步优化FPGA

2009-2-26 18:39 2660 4 4 分类: FPGA/CPLD

pipeline RISC设计(11)--优化Multiplexer(三)--一步一步优化FPGA RISC<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


 


传统的二分法MUX实现代价:



 


则实现RISCLE消耗如下图,



图中标识的是一个bit MUX实现消耗的LE个数;所以以32bit数据宽度计算,图中MUX总共消耗LE:14x32=448 LEs


 


而上图中逻辑/运算/比较单元消耗的LE如下图,



 


逻辑/算术/比较均是2输入1输出的Function,所以1bit对应一个LE32 bit共消耗LE:3×3296 LEs


 


可以看出,相比MUX消耗的资源,RISCFPGA实现中,运算部件消耗的资源要小得多。


 


使用优化得方法实现得MUX,资源消耗见下图,



MUX共消耗12×32384 LEs


 


还有什么地方可以减少LE呢?


已经知道registered 2-1 MUXregistered 3-1 MUX都是占用1LE,也就是上图中的那个2-1 MUX可以无代价的变为3-1 MUX。这样,就可以从External Memory Read这条数据路径借用新增的MUX路径,见下图,



这样,通过Balance数据路径,又减少了一个LEMUX总共消耗LE:11×32352


 


还有地方可以优化吗?


注意在上图中在移位器/乘法器出口,有一个3-1MUX,因为是non-registered型的,因此占用了两个LEs,这部分能不能再少用一个LE呢?重新审视以前移位器/乘法器的实现,如下图,



我们可以看出3-1 MUX3个输入不是独立的,能不能改变实现形式减少MUX的输入呢?见下图,



 


 


上图中OR逻辑被移近到MUX附近,从红色框外来看,输入的数据路径只有两条;而控制线需要几条呢?


红框中的MUX输出只有3中情形:


输出最左端(MUL_highSHRASR);


输出最右端(MUL_lowSHL);


输出中间(ROT)。


因此控制线只需要2个就够了。


红框中实现见下图,



从上图中可以看出,一个LE中实现了两个2-1 MUX,但并不是实现了一个3-1 MUX,而是实现了一个输入有相关性的”3-1 MUX。这样又减少了一个LE,总的MUXLE消耗变为:10×32=320


 


通常在优化过程中,还有一个特性可以利用来进行优化的,就是mostly zeros,也就是当某个地方出现很多0,可以对会出现很多0的数据路径进行优化。对于我们的RISC,有一个地方,就是比较运算的数据路径,回忆一下,


cmp.op ra, ra, rb  


该指令的功能是


If (ra op rb)


                            Ra=32h00000001;


                       Else


                            Ra=32h00000000;


 


也就是比较指令的数据路径31~1,无论那种选择情况,都是0,只有bit-0可能出现1。那么在对比较输出进行MUX时,可以省下31LE


也就是在设计逻辑运算-算术运算-比较运算3-1 MUX时,其中bit[0],真正使用3-1 MUX;而bit[31]~bit[1]只用2-1 MUX就行了,但是注意当出现比较运算时,要按时序对相关流水线寄存器的bit[31]~bit[1]进行同步复位。


这样,总的MUX LE消耗变为:320-31=289 LEs


 


到这里,相比未优化的实现,通过优化MUX,共节省了(448289/44896)=159/54429%的LE,其中MUX减少159/44835%。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条