2014-01-16 3 views
0

У меня есть следующий код для структурного моделирования в VHDL. Когда я пытаюсь скомпилировать его (ghdl -a filename.vhdl), я получаю эту ошибку в 4-х строк комментировал ниже: «< =» или «: =» ожидается вместо портакарта порта в структурном коде VHDL

Кстати, я уже определены компоненты, используемые до кода ниже.

Что случилось с моим кодом? Мне не разрешено использовать port map внутри процесса/if-statement?

Что можно сделать, чтобы исправить это? Благодаря!

-- Entity Definition 
entity jk is 
    port(
     CP: in std_logic; -- clock signal 
     J : in std_logic; -- J signal 
     K : in std_logic; -- K signal 
     Q : inout std_logic; -- Q signal 
     QN : inout std_logic; -- Q' signal 
     reset : in std_logic -- reset signal 
    ); 
end entity jk; 

architecture dev1 of jk is 

    -- declare the singals that outputs the results of some gates 
    signal a, b, internal_q, internal_qn : std_logic; 

    -- get each component needed 
    component and3 is 
     port(o0 : out std_logic; i0, i1, i2: in std_logic); 
    end component and3; 
    component nor2 is 
     port(o0 : out std_logic; i0, i1: in std_logic); 
    end component nor2; 

begin 

    internal_q <= Q; -- used to show internal Q value 
    QN <= not Q;  -- inverse of Q 
    internal_qn <= QN; -- used to show internal QN value 

    process is 
    begin 
     if (reset = '0') then -- asynchronous reset 
      Q <= '0'; 
      internal_qn <= '0'; 
     elsif rising_edge(CP) then -- on positive clock edge 
      -- AND gate outputs 
      g0: and3 port map(a, internal_q, K, CP); -- error 
      g1: and3 port map(b, internal_qn, J, CP); - error 

      -- NOR gate outputs 
      g2: nor2 port map(Q, a, internal_qn); -error 
      g3: nor2 port map(QN, b, internal_q); -error 
     end if; 
    end process; 

end architecture dev2; 

ответ

2

Нет, вам не разрешено создавать компоненты (использовать карты портов) внутри процесса.

Вы должны создать экземпляр компонентов под инструкцией начала вашей архитектуры. Соберите их там надлежащим образом. Ваш процесс должен вести всю зарегистрированную логику. На самом деле я вообще не вижу необходимости в инструкции процесса в этом коде. Поскольку все ваши данные поступают от вашего объекта (я предполагаю), вам действительно не нужно делать какую-либо зарегистрированную логику в этом файле.

Можете ли вы опубликовать свою сущность? Я не вижу, где определяются сигналы J и K и CP, Q и QN.

+1

Его компоненты объявлены в правильном месте: он должен, однако, создавать их в комбинационной области (после «начала» и вне процесса) –

+0

@ Russell - я уже добавил компонент. Мне нужен этот процесс, потому что if-statement не может быть размещен нигде без него. Мне также нужен if-statement для boost_edge() для CP. –

+0

Извините, мое первое предложение верное, второе предложение было неправильным. Я изменил «вы должны объявить свои компоненты» на «вы должны создавать свои компоненты». Happy @BrianDrummond? :) – Russell

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