2013-03-12 5 views
1

У меня есть тестовый файл VHDL a.vhd.Если существует два компонента одного и того же имени, один в пакете и другой в архитектуре, какой из них имеет приоритет?

кошка a.vhd

package pak is 
component b is    -- 1st definition of component b. 
end component 
end pak; 

use work.pak.all;   -- 1st definition visible through this package use clause 
entity a is 
    port (in1 : in std_logic); 
end a; 

architecture a of a is 

component b     -- 2nd definition of component b. 
    port (in11 : in std_logic); 
end component; 

begin 
    inst : b port map (in11=> in1); -- there are two definitions of component b at this instance. 
end a; 

entity b is 
port (in11 : in std_logic); 
end b; 

architecture b of b is 
begin 
end b; 

Таким образом, при работе с ModelSim на него, не было никакого предупреждения/ошибки перегруженной компонента. Всегда ли мы отдаем предпочтение компоненту, объявленному в архитектуре над компонентом того же самого имени, объявленного в пакете. Может ли кто-нибудь сказать мне, что говорит LRM об этом? Пожалуйста, объясните это.

ответ

4

В этом конкретном примере компонент, который вы создаете в «a» как «inst», определенно является компонентом «b», объявленным в архитектуре, поскольку work.pak.b имеет другое объявление порта.

Если вы создали экземпляр «b» без портов в A, вы должны увидеть work.pack.b.

Понимать, однако, что между EITHER и «entity b» нет неотъемлемой связи. Только когда проект будет разработан (например, в начале моделирования), инструменты будут искать «b», который фактически соответствует объявлениям компонентов. В этом случае он может найти «b», объявленный в «a», но не найдет объект, соответствующий «work.pak.b».

На этом этапе вы можете использовать конфигурации (либо отдельные конфигурации, либо инструкции конфигурации, встроенные в арку A) для привязки определенного объекта «work.b» к «b». Это не будет работать с «work.pak.b» из-за несогласованных объявлений порта.

+0

Рассмотрите случай, когда компонент b, объявленный в пакете, также имеет тот же интерфейс, что и заявленный в архитектуре. В этом случае вы говорите, что во время разработки я должен увидеть work.pack.b. Я хочу знать, как принято отдавать предпочтение компоненту пакета над другим? Является ли это конкретным инструментом или это указано в VHDL LRM? – Dharmendra

+2

Извините, я не говорю, что вы увидите work.pack.b, если интерфейсы были идентичны. Я ожидаю местный «b». Я не могу указать точное правило LRM, которое разъясняет, что происходит, но это основной принцип в других областях VHDL (и его родительской Ada), что локальная декларация (например, локальная переменная) обычно скрывает эквивалентную, но более удаленную декларацию , В случаях, когда два варианта ARE видны (например, объявления функции «+» из разных библиотек), соглашение заключается в том, чтобы скрыть оба, а не делать произвольное и, возможно, неправильное решение между ними. –

+0

Thanx Brian.In LRM 1076-2008 Раздел 12.4 Использование статьи гласит: Для того, чтобы определить, какие заявления делаются непосредственно видимыми в данном месте путем использование положений, рассмотрит множество деклараций идентифицированного всех пункты назначения которых прицелы приложите это место. Любое объявление в этом наборе является потенциально видимым объявлением. Потенциально видна декларация на самом деле сделана непосредственно видимый за исключением следующих трех случаев: а) потенциально видна декларация не производится непосредственно видимым, если место считаются находится в непосредственной области видимости омографа декларации. – Dharmendra

 Смежные вопросы

  • Нет связанных вопросов^_^