Где объявить константу или тип, используемый в объявлении сущности? - PullRequest
3 голосов
/ 29 мая 2011

Если я не понял это полностью, константа или тип не могут быть объявлены на верхнем уровне файла. Только пакеты, объекты, архитектуры и т. Д. может быть объявлено там. Они могут быть объявлены в сущности, но не перед портом и общими предложениями.

Часто вы хотели бы определить тип или константу для использования в выражении порта или универсального объекта, но так как это не может быть объявлено на верхнем уровне файла, а также внутри объекта, где это должно быть объявлен

Ответы [ 2 ]

4 голосов
/ 29 мая 2011

Обычно они объявляются в пакете, который включен в начало вашего файла, так же, как вы включаете стандартные пакеты VHDL, а именно:

library ieee;

use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.math_real.all;

use work.My_Custom_Types_Pkg.all;

entity My_Entity is
    port (
        ...

Затем вы можете использовать свои пользовательские типы в объявлениях портови где-нибудь еще в вашей организации.

0 голосов
/ 30 мая 2011

Обратите внимание, что пакеты, сущности и т. Д. Не обязательно должны быть связаны с конкретным файлом. Таким образом, правильное место для констант находится в package. Пакет и его тело могут существовать в том же файле, что и объект / архитектура, или в отдельном файле. entity и architecture также могут существовать в отдельных файлах (это обсуждалось в других местах на SO )

Кроме того, еще одно замечание для новичков в VHDL, просто потому, что пакет может находиться в одном и том же файле, не делает его видимым для сущностей / архитектур в этом файле, вам все равно придется use пакет в точке, которая Вы объявляете объект (или архитектуру, если вам нужны только определения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...