关于2个多bit数的相等或者不相等的判断,见过两种写法。
以不等于的逻辑为例:
1. assign c = (a !=b)
直观,不解释;
2. assign c = |( a ^ b )
a和b先异或,这样只要a中任一比特和b中对应比特不相等,都会得到1'b1,然后再位或,最后的结果必然是1'b1;
这两种写法比较常见,以前总觉得之所以有这2中写法,那么肯定有优有劣,而且根据我这个懒人的惯性思维,
总觉得可读性差的效果好,所以一直以为第二种写法生成的组合逻辑的延迟小;
今天用Q II比较了下这种写法的综合和时序分析结果,自己也思考了下这两个逻辑的实现电路,有了不同的认识;
这两种方式写法不同,综合出的电路也不相同,但是有共同点,即可以认为是综合器并行处理了这个组合逻辑;
所以从输入到输出经过的LUT的数量是相同的;
若a和b均是64-bits,且FPGA内的LUT是6-input的;
那么由于6^3=216>(64+64)
因此这两种写法,从a和b到c的每条路径,都是经过3个LUT级联输出,消耗资源相同,延迟也相同;
所以根据可读性而言,使用第一种写法较好;
网友回复:
我觉得和综合器应该有一定的关系吧,算法不一样门级电路可能会不一样,asic到门可能就完了,不同的门级结构不同的资源一目了然,fpga到门以后还要重新打包成对应器件的LUT,甚至在综合的时候就按利于LUT结构的算法进行优化了,有可能导致不同门级结构转为LUT后资源占用又一样多了.....应该是这么个意思吧。