La declaración Verilog always
, a saber
always @(/* condition */)
/* block of code */
ejecuta block of code
siempre que se cumpla condition
. ¿Cómo se implementa dicho bloque always
en hardware?
La declaración Verilog always
, a saber
always @(/* condition */)
/* block of code */
ejecuta block of code
siempre que se cumpla condition
. ¿Cómo se implementa dicho bloque always
en hardware?
En primer lugar, tenga en cuenta que no todos los Verilog diseños son synthesizable. Generalmente, sólo un subconjunto específico de las construcciones pueden ser utilizados en un diseño que se realiza en el hardware.
Una restricción importante que aparece es que cada reg
variable sólo puede ser asignado a más de un always
declaración. En otras palabras, reg
s tienen afinidad always
bloques.
Los siguientes tipos de always
bloques en general puede ser utilizado.
always @(*) begin
// combinatorial
end
always @(posedge clk) begin
// sequential
end
En el primer caso, el *
indica que el bloque debe ser ejecutado cada vez que cualquier señal utilizada en el bloque de cambios o, equivalentemente, que el bloque debe ser ejecutado de forma continua. Por lo tanto, reg
s que tienen afinidad de combinatoria always
bloques se implementan como señales calculadas a partir de otras señales usando la lógica combinatoria, es decir, puertas.
Los registros que tienen afinidad a always
bloques de este último tipo, por otro lado, son las salidas de los D flip-flops que se registró en el flanco ascendente de la clk
(flanco de bajada si negedge
se utiliza). Las entradas de los flip-flops son, de nuevo, calculada con la lógica combinatoria de otras señales.
Considere el siguiente, tanto artificial ejemplo.
reg out, out_n;
always @(*) begin
out_n = !out;
end
always @(posedge clk) begin
out <= !out;
end
Aquí, out_n
está asociado con la primera always
bloque, out
con el segundo. out_n
será implementada con una sola NO la puerta que va a la unidad out_n
y ser impulsado desde out
(tenga en cuenta que es un puro de la lógica combinatoria). Por otro lado, out
será impulsado por un flip-flop en la velocidad de reloj de clk
. La entrada del flip-flop volverá a ser computada por una puerta not desde out
(que es impulsado por el mencionado flip-flop). La optimización de los sintetizadores se combinan las dos NO las puertas y el uso de una puerta not y un flip-flop.
Dependiendo del hardware que se tienen disponibles otros tipos de construcciones que se pueden utilizar. Por ejemplo, si el flip-flops tienen asincrónica restablece, la siguiente construcción es también synthesizable.
always @(posedge clk or posedge rst) begin
if (rst)
// reset
else
// sequential
end
Un always
bloque es comúnmente usado para describir un flip-flop, un seguro o un multiplexor. El código sería implementado con un flip-flop, un seguro o un multiplexor.
En una FPGA de un flip-flop y un pestillo en general son sólo dos configuraciones diferentes de una más general-propósito registrar el dispositivo. Un multiplexor sería construido a partir de uno o más de uso general de la lógica de elementos (tablas de búsqueda).
En general, hay dos maneras de ir sobre diseño con Verilog:
Visualizar la lógica que usted desea en términos de compuertas y registros, luego de averiguar cómo describirlo en Verilog. La síntesis de la guía de los libros de la FPGA vendedores o herramienta de síntesis vendedores de dar la caldera de la placa para las estructuras más comunes es posible que desee trabajar con.
Acaba de escribir Verilog y no te preocupes acerca de lo que el hardware subyacente parece. Sin embargo, incluso si usted hace esto, usted todavía tiene que saber qué es y qué no es synthesizable. Así que, de nuevo, usted va a mirar a la plantilla proporcionada por la herramienta de proveedores y adaptarlo a su aplicación.
EDITAR
Avakar la respuesta es mucho mejor para tu pregunta, pero esto generó una interesante discusión acerca de las diferencias entre Xilinx y Altera así que no voy a borrar.
I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.