Pregunta
No sé lo que está mal con el código de abajo, ¿Puede alguien ayudarme depuración
module iloop(z,a);
input [31:0] a;
output z;
reg [4:0] i;
reg s, z;
initial begin
s = 0;
for(i=0; i<32; i=i+1) s = s | a[i];
z = !s;
end
endmodule
Solución
Su código tiene un bucle infinito. Usted ha declarado i
como un registro de 5 bits, lo que significa que su rango de valores es (decimal) 0 a 31. Sin embargo, los de bucle comprueba si i < 32
, que siempre es cierto.
Una vez que i = 31, i
se incrementa y rollos a 0.
$display
es su amigo. Si se agrega a su bucle, verá el problema:
for(i=0; i<32; i=i+1) begin $display(i); s = s | a[i]; end
Creo que quieres i<31
.
O, tal vez quieran o todos los bits de a
juntos, utilizando el bit a bit operador OR:
s = |a;
Se debe explicar con palabras lo que está tratando de lograr.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow