Ошибки в VHDL Xilinx ISE Project Navigator

 library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity DruigZadatak is
 Port ( iSW : in  STD_LOGIC_VECTOR (7 downto 0);
       iSEL : in  STD_LOGIC;
       oLED : out  STD_LOGIC_VECTOR (7 downto 0));
 end DruigZadatak;

 architecture Behavioral of DruigZadatak is

begin
    oLED <= "11111111" when iSEL ='0' else
            oLED(3 downto 0) <= (iSW(5 downto 3) + iSW(2 downto 0)),
            oLED(6 downto 4) <= "111" when iSW(7)='1' else
            "110" when iSW(6)='1' else
            "101" when iSW(5)='1' else
            "100" when iSW(4)='1' else
            "011" when iSW(3)='1' else
            "010" when iSW(2)='1' else
            "001" when iSW(1)='1' else  
            "000" when iSW(0)='1';  
    oLed(7) <= '0' when iSW ="00000000" else
        iSEL;
 end Behavioral;

и я получаю следующие ошибки

ERROR:HDLCompiler:288 -Line 45: Cannot read from 'out' object oled ; use 'buffer' or 'inout'
ERROR:HDLCompiler:1731 -Line 45: found '0' definitions of operator "<=", cannot determine exact overloaded matching  definition for "<="
ERROR:HDLCompiler:288 -Line 47: Cannot read from 'out' object oled ; use 'buffer' or 'inout'
ERROR:HDLCompiler:1731 -Line 47: found '0'   definitions of operator "<=", cannot determine exact overloaded matching definition for "<="
ERROR:HDLCompiler:854 -Line 39: Unit <behavioral> ignored due to previous errors.

если бы кто-нибудь мог объяснить мне, что мне делать и почему эти ошибки продолжают появляться, было бы здорово, спасибо. Надеюсь, вы понимаете, в чем был смысл моего проекта..


person xena12    schedule 31.10.2015    source источник


Ответы (1)


В оператор условного присваивания сигнала не может быть встроен другой оператор условного присваивания сигнала.

Разбейте задания на три части вместо двух:

 architecture foo of DruigZadatak is

 begin
     oLED (6 downto 4) <= "111" when iSEL = '0' or iSW(7) = '1' else 
                          "110" when iSW(6)='1' else
                          "101" when iSW(5)='1' else
                          "100" when iSW(4)='1' else
                          "011" when iSW(3)='1' else
                          "010" when iSW(2)='1' else
                          "001" when iSW(1)='1' else  
                          "000" when iSW(0)='1';                       

     oLED ( 3 downto 0) <= "1111"                    when iSEL = '0' else
                           '0' & (iSW(5 downto 3) + iSW(2 downto 0)) ;
     oLed(7) <= '0'   when iSW ="00000000" else    
                iSEL;                      
 end architecture;

Также обратите внимание на объединение «0» с результатом сложения, чтобы длина выражения правой части соответствовала левой части присваивания.

Эти три присваивания превращаются в эквивалентные процессы с операторами if. Вы можете объединить операторы if в один процесс, все они будут иметь одинаковые списки конфиденциальности.

С инструментами, совместимыми с VHDL-2008, вы можете использовать последовательные операторы условного назначения сигналов в одном процессе.

Вышеупомянутая архитектура с тремя одновременными операторами назначения сигналов анализирует, уточняет и моделирует (говоря нам, что нет несоответствий длины и все соединяется).

person Community    schedule 31.10.2015
comment
Это мой первый проект в xilinx vhdl, поэтому для меня все в новинку, так что можете ли вы объяснить мне последнюю часть с «0» и .... что это такое и для чего? а как в конце iSEL=1? И будет ли это работать с поведенческой архитектурой? - person xena12; 31.10.2015
comment
Xilinx не является синонимом VHDL. & в этом случае является оператором конкатенации, создающим std_logic_vector с длиной, на 1 превышающей результат +, путем добавления '0' к результату. 'как в конце iSEL=1?' плохо анализируется на английском языке (синтез имеет дело только с двоичными эквивалентными значениями, если это не «0», это «1»). Вы можете назвать архитектуру как угодно. VHDL поддерживает несколько архитектур. Ваши инструменты Xilinx, вероятно, позволяют вам указать используемую архитектуру, иначе индикация привязки по умолчанию будет указывать на последнюю проанализированную. - person ; 31.10.2015