热度 22
2014-11-8 11:36
1372 次阅读|
0 个评论
群里突然有人发问优化代码段: module youhua(input a, input b, input c, input d, input sel, output /*reg*/ sum); always @(a,b,c,d,sel) if(sel) sum = a+b; else sum = c+d; 很早之前就看到了类似的题目,好像也是面试题,所以我很快就想到了减少加法器。 但是群里有人说用assign sum = sel? (a+b):(c+d);代替上面的always块, 我觉得很奇怪,这样跟上面的完全没有什么两样,起不到任何优化的效果 我想到的是用多路选择器选择a,b,c,d然后接入加法器: reg a_r,b_r; always @(a,b,c,d,sel) if(sel) begin a_r = a; b_r = b; end else begin a_r = c; b_r = d; end assign sum = a_r + b_r; RTL如下