Cómo evitar que la señal se sintetice en FPGA Altera Quartus

Primero introduzca varias definiciones de atributos de uso común, la sintaxis es:

/ * síntesis, <atributo_específico_cualquier_empresa = valor_o_valor_opcional * /

Tenga en cuenta que las siguientes dos formas de escritura son equivalentes (sintaxis de verilog 2001),

(* preservar *) reg reg1;

reg reg1 / * preservación de síntesis * /;

Cuando uso cable, personalmente uso generalmente (* keep *) wire w1; esta forma de escribir; a veces encuentro que quartus no puede garantizar completamente que algunas señales de registro no se sintetizarán, y también estoy muy desconcertado acerca de las razones específicas. Grabarlo por ahora.

 

Los siguientes son varios atributos de síntesis de Altera de uso común,

Noprune

Un atributo de síntesis Verilog HDL que evita que el software Quartus II elimine un registro que no alimenta directa o indirectamente una salida de nivel superior o un pin bidir.

Por ejemplo:

reg reg1 / * síntesis noprune * /;

mantener (esto es principalmente efectivo para alambre)

Un atributo de síntesis de Verilog HDL que indica a Analysis & Synthesis que no minimice o elimine una red en particular al optimizar la lógica combinacional.

Por ejemplo:

wire keep_wire / * síntesis mantener * /;

preservar (esto es principalmente para registro)

Un atributo de síntesis de Verilog HDL que indica a Analysis & Synthesis que no minimice o elimine un registro en particular al eliminar registros redundantes o registros con controladores constantes.

Por ejemplo:

reg reg1 / * preservación de síntesis * /;

ram_init_file

Un atributo de síntesis de Verilog HDL que especifica el contenido inicial de una memoria inferida.

Por ejemplo:

reg [7: 0] mem [0: 255] / * síntesis ram_init_file = "my_init_file.mif" * /;

ramstyle

Un atributo de síntesis de Verilog HDL que especifica el tipo de bloque de memoria TriMatrix que se utilizará al implementar una RAM inferida.

M512 "," M4K "," M9K "," M144K "," MLAB "," M-RAM "

Por ejemplo:

reg [0: 7] my_ram [0:63] / * síntesis ramstyle = "M512" * /;

translate_off o translate_on

Directivas de síntesis Verilog HDL que dirigen a Analysis & Synthesis a ignorar partes del código de diseño que son específicas de la simulación y no relevantes para la síntesis lógica.

Por ejemplo:

parámetro tpd = 2; // Retrasos genéricos

// síntesis translate_off

#tpd;

// síntesis translate_on

La máquina de estado tiene los siguientes tres atributos integrales:

full_case Un atributo de síntesis de Verilog HDL que indica a Analysis & Synthesis que trate los valores de estado no especificados en una declaración de caso de archivo de diseño de Verilog como valores indiferentes y, por lo tanto, trate la declaración de caso como "completa".

Solo se usa en Verilog, se usa con la declaración de caso para indicar que a todos los estados posibles se les han dado valores que no requieren otra lógica para contener señales.

módulo full_case (a, sel, y); entrada [3: 0] a; entrada [1: 0] sel; salida y; reg y; siempre @ (a o sel) case (sel) // síntesis full_case 2'b00: y = "a" [0]; 2'b01: y = "a" [1]; 2'b10: y = "a" [2]; endcase endmodule

Paralelo_case Un atributo de síntesis de Verilog HDL que indica a Analysis & Synthesis que implemente la lógica paralela en lugar de un esquema de prioridad para todas las expresiones de elementos de caso en una declaración de caso de Verilog Design File.

Solo se usa en Verilog, se usa con la declaración de caso para forzar que se genere una estructura de multiplexación paralela en lugar de una estructura de decodificación de prioridad.

módulo caso_paralelo (sel, a, b, c); entrada [2: 0] sel; salida a, b, c; reg a, b, c; siempre @ (sel) comenzar {a, b, c} = 3'b0; casez (sel) // síntesis paralela_case 3'b1 ??: a = 1'b1; 3'b? 1 ?: b = 1'b1; 3'b ?? 1: c = 1'b1; endcase end endmodule

syn_encoding Un atributo de síntesis de Verilog HDL que determina cómo el software Quartus II debe codificar los estados de una máquina de estados inferidos. Obliga a volver a codificar el estado de la máquina de estados. Hay valores predeterminados, one-hot, secuenciales, grises, johnson, compactos , codificación de usuario

(* syn_encoding = "usuario" *) estado reg [1: 0]; parámetro init = 0, último = 3, siguiente = 1, más tarde = 2;

siempre @ (estado) comenzar caso (estado) init: out = 2'b01; siguiente: out = 2'b10; más tarde: out = 2'b11; último: out = 2'b00; final del caso final

En el ejemplo anterior, los estados se codificarán de la siguiente manera:

init = "00" último = "11" siguiente = "01"

 

referencia:

https://www.intel.com/content/www/us/en/programmable/quartushelp/17.0/hdl/vlog/vlog_file_dir_preserve.htm

Supongo que te gusta

Origin blog.csdn.net/tanmx219/article/details/112713457
Recomendado
Clasificación