本帖最后由 vongy 于 2012-3-20 12:00 编辑
你这样写实在太累人
换个写法
case(1'b1)
intermediate8[63]: out = 6'd0;
intermediate8[62]: out = 6'd1;
............
endcase
当然了,这样写还不能减小电路的面积和延时。
你可以手动优化。
从你给出的数据看,其实可以将问题转化成【从最高位开始找1,这个1出现在哪个位置】, 比如7FFFFFFFFFFFFFFF最高位的1出现在第62位,那么63-62==1即可
wire [63:0] temp = intermediate8;
wire temp5_en = |temp[63:32];
wire[31:0] temp5 = temp5_en ? temp[63:32] : temp[31:0];
wire temp4_en = |temp5[31:16];
wire[15:0] temp4 = temp4_en ? temp5[31:16] : temp5[15:0];
wire temp3_en = |temp4[15:8];
wire[7:0] temp3 = temp3_en ? temp4[15:8] : temp4[7:0];
wire temp2_en = |temp3[7:4];
wire[3:0] temp2 = temp2_en ? temp3[7:4] : temp3[3:0];
wire temp1_en = |temp2[3:2];
wire[1:0] temp1 = temp1_en ? temp2[3:2] : temp2[1:0];
wire temp0_en = temp1[1];
wire [5:0] out_temp = 6'd63 - {temp5_en, temp4_en, temp3_en, temp2_en, temp1_en, temp0_en};
assign out = (intermediate8==64'b0) ? 6'd0 : out_temp; |