2015-10-31 2 views
0
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; 

и я получаю следующие ошибкиОшибки в VHDL Xilinx ISE Project Navigator

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. 

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

ответ

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 инструментов вы можете использовать последовательные условные инструкции назначения сигналов в одном процессе.

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

+0

Это мой первый проект в xilinx vhdl, поэтому все новое для меня, так что вы можете объяснить мне последнюю часть с помощью «0» и «....» для чего? и как в конце iSEL = 1? И будет ли это работать с архитектурой поведенческих? – xena12

+0

Xilinx не является синонимом VHDL. «&» - это оператор конкатенации в этом случае, создающий std_logic_vector с длиной 1, большей, чем результат «+», добавив «0» к результату. «Как заканчивается iSEL = 1?» не анализируется хорошо на английском языке (синтез касается только двоичных эквивалентных значений, если это не «0», это «1»). Вы можете назвать архитектуру чем угодно. VHDL поддерживает несколько архитектур. Ваши инструменты Xilinx, вероятно, позволят вам указать используемую вами архитектуру, иначе указатель привязки по умолчанию указывает на последний проанализированный. – user1155120