目录
一、问题背景
如果我们需要设计如下的编码器:
输入64bit数据,其中有且仅有1bit 1,其余为0,需要计算出该1的位置,
例如:
输入'b ....0100,则返回2;
输入'b ....1000,则返回3;
二、错误的做法
我们考虑使用判断bit位是否为1的写法,代码如下:
input [63:0] data_raw;
output [5:0] index;
int i;
always@(*)begin
index =0;
for(i=0;i<64;i++)begin
if(data[i] == 1'b1)
index = i;
end
end
上述代码综合的时候会加入优先级,因为排在较低位的1有优先选择,实际上电路是64级选择器,面积虽然不大(每一级都是1一个2选1mux),但是延迟很长。