2016-12-09 9 views
0

У меня есть проект со следующими 3 файлов, и я получаю эту ошибку в файле CA:значение (VHDL) std_logic_vector

 
Line 65: Type error near state_int ; current type std_logic_vector; expected type std_logic 
ERROR:HDLCompiler:854 - "" Line 40: Unit ignored due to previous errors. 

CA FILE

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

-- Uncomment the following library declaration if using 
-- arithmetic functions with Signed or Unsigned values 
--use IEEE.NUMERIC_STD.ALL; 

-- Uncomment the following library declaration if instantiating 
-- any Xilinx primitives in this code. 
--library UNISIM; 
--use UNISIM.VComponents.all; 

entity CA is 

    port(clk,rst:in std_logic; 
      state:out std_logic_vector(0 to 8) 
      ); 

end CA; 

architecture Behavioral of CA is 

    Component cell 
     port(L,R,clk,rst:in std_logic; 
       state:out std_logic 
      ); 
    end component; 

    Component cellm 
     port(L,R,clk,rst:in std_logic; 
       state:out std_logic 
      ); 
    end component; 

    signal state_int:std_logic_vector(0 to 8); 

begin 


    state <= state_int; 
    U_cell0:cell 

    port map(clk => clk, 
       rst =>rst, 
       L => '0', 
       R => state_int, 
       state => state_int(0) 
       ); 


end Behavioral; 

CELL FILE

entity cell is 

    port(L,R,clk,rst:in std_logic; 
       state:out std_logic 
      ); 

end cell; 

architecture Behavioral of cell is 

signal state_pr,state_nx:std_logic; 

begin 

    state_nx <= ((not L) and R and state_pr) or (L and (not R)); 

    Process(clk,rst) 
    Begin 
     if rst = '0' then 
      state_pr <= '0';  
     elsif rising_edge(clk) then 
      state_pr <= state_nx; 
     end if; 
    end process;  

end Behavioral; 

CELLM FILE

entity cellm is 

    port(L,R,clk,rst:in std_logic; 
       state:out std_logic 
      ); 

end cellm; 

architecture Behavioral of cellm is 

    signal state_pr,state_nx:std_logic; 

begin 

    state_nx <= ((not L) and R and state_pr) or (L and (not R)); 

    Process(clk,rst) 
    Begin 
     if rst = '0' then 
      state_pr <= '1';  
     elsif rising_edge(clk) then 
      state_pr <= state_nx; 
     end if; 
    end process; 
end Behavioral; 

Что я делаю неправильно?

+0

Прошло некоторое время с тех пор, как я сделал VHDL, но кажется, что вы пытаетесь подключить сигнал 'std_logic_vector' и порт' std_logic'. Это, очевидно, не будет работать из-за несоответствия (single vs multi-lane). – MasterAM

+0

Вы сопоставили R (std_logic) с state_int (std_logic_vector) в компоненте U_cell0: 'R => state_int' –

ответ

1

На самом деле у вас есть три проблемы в вашем дизайне. Первые две проблемы были упомянуты в комментариях:

  1. вы пытаетесь подсоединения STD_LOGIC_VECTOR сигнал state_int и А std_logic порт ¨R. Это, очевидно, не работает из-за несоответствия (одного против многополосных)
  2. В следующей строке также пытается для подключения STD_LOGIC_VECTOR сигнал состояние и ä std_logic порт state_int (0).
  3. У вас также есть другая проблема в вашей ячейке. Состояние выход никогда не привязан ни к чему. Таким образом, фактический вывод из объекта ячейки не будет. Вы можете получить предупреждение от компилятора об этом.
+0

Пожалуйста, сделайте свой ответ автономным. Предоставление кредита всегда вежливое, но включать соответствующую информацию в ваш ответ, потому что комментарии могут исчезнуть. – rici

+0

ОК, спасибо! Я только что отредактировал его. – Renato

+0

1. 'R' и' state_int' являются разными * типами * и не могут быть связаны. Связанный вход 'R' с индексированным именем' state_int (0) '? 2. Подключение формального 'state' к фактическому, которое является индексированным именем (' state_int (0) '), является законным. Базовый тип типа элемента std_logic_vector совпадает с базовым типом std_logic (std_ulogic или std_logic, зависящим от -2008 или ранее). 3. Этот код выглядит незавершенным. 'U_cell0' output' state' ассоциируется с 'state_int (0)', который может быть назначен элементу выходного порта 'state' .. – user1155120

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

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