输入数据位宽是可变的,如何求出输入数据最高位的1所在的位置。如输入8’b00101001,输出为5。
verilog编程,要求使用时序逻辑,拍数要固定,不能因为位宽不同导致出来的算出结果所需的时间不一样
貌似优先编码器就能满足你的要求,不必时序逻辑就能完成
这个代码只用 1 个时钟
//可以把casez表做大点,我就是做了一个256位的表,实际综合后会根据实际位宽优化的
//我专门比较过,256位的表,实际只用16位的数去查表和只用16位的表用的资源是一样的。
reg [15:0] n;
reg [15:0] m;
always@(posedge clk)
begin
casez(n)
4'b1???: m<=4;
4'b01??: m<=3;
4'b001?: m<=2;
4'b0001: m<=1;
default: m<=0;
endcase
end