Problema de programación de Verilog, encuentre el primer '1' en un dato
Dicotomía: use OR bit a bit para determinar si hay todos ceros.
Por ejemplo, si el resultado es de 5 bits, si los 16 bits superiores de la entrada son todos ceros, el bit más alto del resultado se establecerá en 0; de lo contrario, se establecerá en 1, y el resultado se dividirá en dos puntos.
--------------Adjunto se encuentra un método para encontrar el bit alto 1, el bit bajo es similar
reg [31:0 ] datos;
reg [ 4:0] posición;
reg [15:0] sel1;
reg [ 7:0] sel2; p>
reg [ 3:0] sel3;
reg [ 2:0] sel4;
siempre @(*) comenzar
if( |datos[31:16 ] == 0) inicio
posición[4] = 0;
sel1 = datos[15:0];
fin
else inicio
posición[4] = 1;
sel1 = datos[31:16];
fin
fin
siempre @(*) comenzar
if(|sel1[15:8] == 1'b0) comenzar
posición[ 3] = 0;
sel2 = sel1[7:0];
fin
si no comienza
posición[3] = 1;
sel2 = sel1[15:8];
fin
fin
siempre @(*) comienzo
if( |sel2[7:4] == 1'b0) comenzar
posición[2] = 0;
sel3 = sel2[3:0];
fin
si no comenzar
posición[2] = 1;
sel3 = sel2[7:4];
fin
fin
siempre @(*) comenzar
if(|sel3[3:2] == 1'b0) comenzar
posición[1] = 0;
sel4 = sel3[1:0];
fin
si no comenzar
posición[1 ] = 1;
sel4 = sel3[3:2];
fin
fin
siempre @(*) comenzar
if(sel4[1] == 1'b0) comenzar
posición[0] = 0;
finalizar
else comienza
posición[0] = 1;
fin
fin