Error de VHDL 10481: no hay unidad primaria

1

Estoy diseñando un circuito que usa Simulink para generar VHDL para ser quemado en un FPGA. El modelo de Simulink funciona bien en Simulink, sin embargo, cuando intento compilar el código VHDL utilizando Quartus II, aparece el siguiente error:

  

Error (10481): Error de cláusula de uso de VHDL en dsc_escalado.vhd: diseño   la biblioteca "mylib" no contiene la unidad primaria "sen"

Mi código de nivel superior es dsc_escalado.vhd, que usa la biblioteca "mylib" generada por Simulink, que contiene un archivo llamado sen.vhd donde el algoritmo CORDIC se usa para generar ondas sinusoidales.

Todos los archivos generados por Simulink, no he modificado ninguna línea de código. Funciona en Simulink, pero no se compila en Quartus.

Actualizar He incluido todos los archivos en el proyecto, sin embargo me sale el mismo error. Aquí está el registro generado por Quartus:

  
  • Advertencia (20028): la compilación paralela no tiene licencia y se ha deshabilitado
  •   
  • Información (12021): Se encontraron 0 unidades de diseño, incluidas 0 entidades, en el archivo fuente sen.vhd
  •   
  • Información (12021): Se encontraron 0 unidades de diseño, incluidas 0 entidades, en el archivo fuente sen_120_not_ascii.vhd
  •   
  • Información (12021): Se encontraron 0 unidades de diseño, incluidas 0 entidades, en el archivo fuente sen_240_not_ascii.vhd
  •   
  • Información (12021): Se encontraron 2 unidades de diseño, incluidas 1 entidades, en el archivo fuente dsc_escalado.vhd
  •   
  • Información (12022): Unidad de diseño encontrada 1: DSC_escalado-rtl
  •   
  • Información (12023): Entidad encontrada 1: DSC_escalado
  •   
  • Error (10481): Error de cláusula de uso de VHDL en DSC_escalado.vhd (90): la biblioteca de diseño "mylib" no contiene la unidad primaria "sen"
  •   
  • Error: análisis de 64 bits de Quartus II & La síntesis no tuvo éxito. 1 error, 1 advertencia
  •   

El código VHDL para sen.vhd obtenido del comentario link

Nota del editor: la línea de comentarios del archivo fuente en cuestión muestra

  

- Ruta de origen: DSC_escalado / sen

mientras que en el original los tres últimos caracteres consisten en un espacio (x "20), un SUB (x" 1A ") y un LF (x" 0A ") en el archivo original. No hay una manera de demostrando el carácter ilegal sin tener que recurrir a otra herramienta debido a que la asignación original de caracteres iso8859-1 y la red StackExchange usando UTF-8.)

-- -------------------------------------------------------------
-- 
-- File Name: hdl_prj\hdlsrc\DPWMfinal\sen.vhd
-- Created: 2018-06-27 14:40:51
-- 
-- Generated by MATLAB 9.0 and HDL Coder 3.8
-- 
-- -------------------------------------------------------------


-- -------------------------------------------------------------
-- 
-- Module: sen
-- Source Path: DSC_escalado/sen 
-- Hierarchy Level: 1
-- 
-- -------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;

LIBRARY WORK;
USE WORK.ALL;

ENTITY sen IS
  PORT( clk                               :   IN    std_logic;
        reset                             :   IN    std_logic;
        enb                               :   IN    std_logic;
        angle                             :   IN    std_logic_vector(31 DOWNTO 0);  -- sfix32_En28
        sin                               :   OUT   std_logic_vector(31 DOWNTO 0)  -- sfix32_En30
        );
END sen;

Así es como Quartus II muestra el carácter ilegal.

    
pregunta DanielG

1 respuesta

1

Hay herramientas de VHDL que no aceptan valores de caracteres no gráficos de carácter o de efector no de formato en los comentarios.

La línea de comentarios:

-- Source Path: DSC_escalado/sen 

tiene tres caracteres finales compuestos por valores de caracteres x "20, x" 1A "y X" 0a ", espacio respectivo, sub y nueva línea de caracteres ASCII. Desafortunadamente, x" 1A "no es un carácter gráfico ni un efector de formato.

Ver IEEE Std 1075-1993 13.1 conjunto de caracteres

  

Los únicos caracteres permitidos en el texto de una descripción de VHDL son los caracteres gráficos y los efectores de formato. ...

Eso incluye comentarios.

Mientras esté en -2002 o posterior (se muestra -2008):

15.2 conjunto de caracteres

  

Los únicos caracteres permitidos en el texto de una descripción de VHDL (excepto dentro de los comentarios, ver 15.9, y dentro del texto tratado especialmente debido al efecto de las directivas de herramientas, ver 15.11) son los caracteres gráficos y los efectores de formato. ...

La presencia de caracteres no gráficos o de efector no de formato en los comentarios no cumple con los estándares VHDL antes de la revisión -2002.

Usted esperaría que QuartusII fuera -1993 y esperaría un mensaje de error (la arquitectura requiere que la unidad primaria se analice previamente), así como un estado visible que indica que la entidad no está analizada.

Después de sustituir "^ Z" por la parte del comentario que consta de x "20, x" 1A ", los valores de byte que su unidad de diseño analiza con una herramienta VHDL compatible con -1993. (Mis editores muestran la cola del comentario de esa manera , el personaje también se puede eliminar).

Considere proporcionar su unidad de diseño principal en su pregunta sin cambios con el comentario intacto permitiendo a los lectores duplicar el problema. No se garantiza que los enlaces externos persistan durante toda la vida de la pregunta.

Simulink está haciendo algo que sería inofensivo (aunque no sea particularmente útil) en revisiones posteriores del estándar VHDL.

VHDL -1993 y posteriores usan el conjunto de caracteres iso8859-1 donde los caracteres gráficos y los efectores de formato pueden mostrarse como valores de caracteres de 8 bits que pertenecen a rangos:

#define is_graphic_char(x)      (((x <= 0x7e) && (x >= 0x20)) || \
                                 ((x >= 0xa0)) )

#define is_format_effector(x)   ((x <= 0x0d) && (x >= 0x09))

(Estos son de un archivo incluido que proporciona clasificadores de caracteres similares a ctype.h en una implementación de analizador VHDL).

El problema se descubrió originalmente mediante el uso de ghdl:

ghdl -a sen.vhd
sen.vhd:14:34:error: invalid character, even in a comment
ghdl:error: compilation error

Esto proporciona una: línea: carácter: ubicación.

La solución del problema requiere un editor que muestre el conjunto de caracteres iso8859-1 lo suficiente como para mostrar dónde se encuentra el carácter ilegal, utilizando un editor que rastrea el puntero a la posición de la línea y el carácter, o un editor hexadecimal. (También podríamos utilizar la fuerza bruta y reemplazar cualquier cosa que tenga a mano).

El carácter 0A es un final de línea LF que normalmente no se eliminaría.

    
respondido por el user8352

Lea otras preguntas en las etiquetas