Синтаксическая ошибка в VHDL

Я пытаюсь реализовать однобитовый счетчик, используя структурный VHDL и компоненты. Я получаю синтаксическую ошибку при попытке сделать карту портов. Ошибка: «Ошибка (10028): не удается разрешить несколько постоянных драйверов для сети «P» в Assign4.vhd (47)». Вот что у меня есть на данный момент: заранее спасибо за любые идеи.

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
--------------------------------------------------------------
Entity Assign4 is
      Generic (bits: POSITIVE := 1);
      Port (CLK: in std_logic;
            SE1,SE2: in std_logic;
            P: out std_logic);
End Entity Assign4;
---------------------------------------------------------------
Architecture Structural of Assign4 is 
--------------------------------
Component Counter is
--    Generic (N: Positive := 1);
    Port(clock,sel1,sel2: in std_logic;
         Q: out std_logic);
End Component;
--------------------------------
Signal x,y,z: std_logic;

begin
P <= x;
--Qn <= x;
  process(CLK)
  begin
    if (Clk'event and CLK = '1') then
        x <= x xor (SE1 and SE2);

    end if;
  end process;

--------------COUNTER-------------------------------------
count1: Counter PORT MAP (clk,SE1,SE2,P);
---------------END COUNTER--------------------------------


-- The generate will be used later for implementing more bits in the counter
--gen: FOR i IN 0 TO 1 GENERATE
--  count1: Counter PORT MAP (SE1 <= inbits(0),SE2 <= inbits(1),clock <= CLK, 
--                            outA <= SE1 and SE2, q <= outA xor  q);
--end GENERATE gen;

---------------------------------------------------

end Architecture;

person n-2r7    schedule 22.02.2011    source источник
comment
У @TomiJ есть правильный ответ. Но в вашем коде есть и другие проблемы: 1. Избегайте использования ieee.std_logic_unsigned.all. Вместо этого используйте ieee.numeric_std: parallelpoints.com/node/3 2. У вас есть два мертвых сигнала. Y и Z. Бьюсь об заклад, вы написали их, потому что хотели использовать их позже.   -  person Philippe    schedule 22.02.2011
comment
Не забудьте добавить сброс для инициализации X (вашего состояния), иначе ничего не произойдет.   -  person Hendrik    schedule 22.02.2011
comment
Большое спасибо, ребята. И да, ты прав, ТомиДжей был прав. Теперь код работает.   -  person n-2r7    schedule 23.02.2011


Ответы (2)


Сообщение об ошибке говорит само за себя: вы управляете P из двух разных мест:

P <= x;

а также

count1: Counter PORT MAP (clk, SE1, SE2, P);

(В компоненте Counter вы указали последний порт как выход, поэтому он также управляет P.)

Я не могу сказать, какое утверждение вы хотите, хотя, вероятно, последнее; вы захотите закомментировать первое назначение, которое устранит эту ошибку компиляции.

person Tomi Junnila    schedule 22.02.2011

в операторах карты портов синтаксис

label: componentName PORT MAP (componentSig => externalSig, ...)

ваши стрелки указывают не в ту сторону.

person Scott M.    schedule 22.02.2011
comment
Этот раздел в коде jualin, кажется, все равно закомментирован. - person Tomi Junnila; 22.02.2011
comment
@Jualin, возможно, вы захотите удалить закомментированный код в своем вопросе. Это только смутит людей, которые прочитают это позже. - person Philippe; 22.02.2011
comment
Да, это было из предыдущего тестирования. Я забыл его снять. - person n-2r7; 23.02.2011
comment
ах, ну, я, должно быть, пропустил символы комментария. Стрелки все еще назад, но это не проблема. Томидж прав. - person Scott M.; 23.02.2011