Encontré esta descripción en un libro para un comparador de magnitud, y no entiendo la explicación o por qué funciona. He comentado todo lo que entendí, pero esa única línea me mata:
//Behavioral Magnitude Comparator
module MagComp(a,b,gt);
parameter k = 8;
input [k-1:0] a,b;
output gt;
wire[k-1:0] eqi = a~^b; // returns 1 whenever corresponding bits in a and b are equal
wire[k-1:0] gti = a&~b; // returns 1 whenever an a-bit is greater than a b-bit
wire[k:0] gtb = { ( (eqi[k-1:0] & gtb[k-1:0]) | gti[k-1:0] ) , 1'b0 }; // ??
assign gt = gtb[k]; // returns 1 if a>b
endmodule
Parece que está asignando gtb de forma recursiva. ¿Cómo puede funcionar esto si gtb ni siquiera se declara en una primera instancia? ¿Por qué está concatenando un 0 al final? ¿Cómo puede haber algún tipo de recursión si no hay comandos secuenciales?