我来深化一下:
1>在verilog层面用loop, 在硬件层面就是用shift逐位比较,为一就用个counter计数
for (i = size; i > 0; i = i - 1) begin
cnt < = cnt + in(i);
end骚年把这个记住吧,在电路实现层面verilog能用到loop的地方屈指可数。
用这个的好处是输入数据位width未知,当lsb被shift out后cnt的数值就是输入数据1的个数
缺点是比较慢,多少width就要多少个时钟cycle。
2>用FA来实现,前提是已知width。优点是整个电路是pure combination,所以运算速度会很快,但是这是牺牲面积的前提下。
从这点出发上面两种选择很好的体现了面积和速度的trade off。