Diferencia al programar verilog en Quartus o en Xilinx
Publicado: 03 Sep 2018, 12:21
Estoy haciendo unas pruebas con un core que quiero llevar al UnAmiga y al mismo tiempo al ZXDOS.
Unamiga se programa con Quartus, ZXDOS con Xilinx, ambos en verilog. Pero me he encontrado una diferencia notable entre unoy otro sistema, que aún desconozco su razón de ser.
El mismo código compilado en Xilinx da errores de "variables ya creadas por defecto", mientras que en Quartus, no dice nada, y compila bien.
Al parecer, Xilinx, si se encuentra una referencia a una variable (wire) "no" declarada previamente, la declara por defecto, pero si luego, mas adelante, se encuentra con la variable ya declarada, da el error indicado.
Explicado mejor: si en un código verilog, dentro de xilinx, hacemos referencia a un wire, arriba del todo, por ejemplo, "assign prueba = 1'b1;" y luego, mas abajo del código, lo definimos con "wire prueba;" el compilador da error y se detiene, diciendo que la variable "prueba" ya ha sido definida anteriormente por defecto.
En cambio, el Quartus, no dice nada, y le da igual si definimos al revés la variable.
Lo normal, para que no de error, es poner el "wire prueba;" arriba del todo, y luego, por debajo de la difinición, la usamos con "assign prueba=1'b1; " y de ese modo, funciona bien tanto en Quartus como en Xilinx.
desconozco la razón, solo sé que ocurre. Es bueno saberlo.
En concreto, esto lo he descubierto en el core el "Sinclair QL"
Unamiga se programa con Quartus, ZXDOS con Xilinx, ambos en verilog. Pero me he encontrado una diferencia notable entre unoy otro sistema, que aún desconozco su razón de ser.
El mismo código compilado en Xilinx da errores de "variables ya creadas por defecto", mientras que en Quartus, no dice nada, y compila bien.
Al parecer, Xilinx, si se encuentra una referencia a una variable (wire) "no" declarada previamente, la declara por defecto, pero si luego, mas adelante, se encuentra con la variable ya declarada, da el error indicado.
Explicado mejor: si en un código verilog, dentro de xilinx, hacemos referencia a un wire, arriba del todo, por ejemplo, "assign prueba = 1'b1;" y luego, mas abajo del código, lo definimos con "wire prueba;" el compilador da error y se detiene, diciendo que la variable "prueba" ya ha sido definida anteriormente por defecto.
En cambio, el Quartus, no dice nada, y le da igual si definimos al revés la variable.
Lo normal, para que no de error, es poner el "wire prueba;" arriba del todo, y luego, por debajo de la difinición, la usamos con "assign prueba=1'b1; " y de ese modo, funciona bien tanto en Quartus como en Xilinx.
desconozco la razón, solo sé que ocurre. Es bueno saberlo.
En concreto, esto lo he descubierto en el core el "Sinclair QL"