2015-09-06 3 views
0

Я новичок в VHDL и проблема, связанная с переносом карты на землю.Порт Картографирование на землю в VHDL

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.STD_LOGIC_ARITH.ALL; 
use IEEE.STD_LOGIC_UNSIGNED.ALL; 

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

entity msPC4 is 
    Port (b : in STD_LOGIC_VECTOR (3 downto 0); 
      clk : in STD_LOGIC; 
      reset : in STD_LOGIC; 
      a : out STD_LOGIC_VECTOR (3 downto 0); 
       co : out STD_LOGIC); 
end msPC4; 

architecture Structure of msPC4 is 

    component msdff4 
     Port (d : in STD_LOGIC_VECTOR (3 downto 0); 
       clk : in STD_LOGIC; 
       q : out STD_LOGIC_VECTOR (3 downto 0)); 
    end component; 

    component msFA4bit 
    Port (a : in STD_LOGIC_VECTOR (3 downto 0); 
      b : in STD_LOGIC_VECTOR (3 downto 0); 
      ci : in STD_LOGIC; 
      s : out STD_LOGIC_VECTOR (3 downto 0); 
      co : out STD_LOGIC); 
    end component; 

    component ms21mux4 
    Port (d1 : in STD_LOGIC_VECTOR (3 downto 0); 
      d0 : in STD_LOGIC_VECTOR (3 downto 0); 
      s : in STD_LOGIC; 
      z : out STD_LOGIC_VECTOR (3 downto 0)); 
    end component; 

    signal w0, w1, w2, w3: STD_LOGIC_VECTOR (3 downto 0); 
    signal w4 : STD_LOGIC; 


w4 <= '0'; 
w3 <= '0000'; 

begin 
gmsPC4g1: msdff4 port map (w1,clk,w2); 
gmsPC4g2: msFA4bit port map (w2,b,w4,w0,co); 
gmsPC4g3: ms21mux4 port map (w0,w3,clk,w1); 
a <= w2; 

end Structure; 

Так что, если вы заметите, у меня есть 3 компонента, пара сигналов для подключения всего и того.

Что я ДЕЙСТВИТЕЛЬНО хочу, это для сигналов w3 и w4 для установки на землю (как бы низко привязаны к логике), но по какой-то причине я не могу для жизни меня понять, как я должен сделай это.

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

Редактировать: ошибка возникает в строках, где w3 установлен на '0', w4 - на '0000'. Двойные кавычки не исправляют эту ошибку. Перемещение внутри начала не устраняет ошибку. Внутри начального набора я получаю «НЕОПРЕДЕЛЕННЫЙ БЛОК», и за пределами начального набора я получаю «НЕОПРЕДЕЛЕННЫЙ ИДЕНТИФИКАТОР». Это просто не хочет позволять мне принимать решение о ценности чего-то.

+1

Неужели они больше не учат разнице между заявлениями и утверждениями? –

+0

Вы не можете назначить значение между архитектурой и начать. – Paebbels

+0

Неожиданный тик, потому что векторные литералы должны быть заключены между двойными кавычками, а не тиками ('' 0000 "', а не '' 0000''). Неожиданный идентификатор, потому что два назначения должны быть отправлены в тело архитектуры (после 'begin'), а не в объявлении архитектуры (до' begin'). Вы случайно попробовали несколько решений, но не все: вы забыли комбинацию двойных кавычек + после начала. Если вы попытаетесь решить все ваши проблемы с помощью этой случайной стратегии, вам потребуется время, прежде чем вы изучите VHDL. Книги и классы, вероятно, более эффективны. –

ответ

1

Изменение кода:

-- w4 <= '0'; 
-- w3 <= '0000'; 

begin 
    w4 <= '0'; 
    w3 <= "0000"; 

позволяет успешно анализа, отметив, нет никаких других водителей от w4 или w3.

В качестве альтернативы вы можете указать значения по умолчанию в декларациях:

signal w0, w1, w2: STD_LOGIC_VECTOR (3 downto 0); 
    signal w3: STD_LOGIC_VECTOR (3 downto 0) := "0000"; 
    signal w4 : STD_LOGIC := '0'; 


-- w4 <= '0'; 
-- w3 <= '0000'; 

Это также анализирует.

Значение по умолчанию представляет собой значение сигнала перед назначением сигнала.

Вы также можете ввести значения непосредственно:

gmsPC4g1: msdff4 port map (w1,clk,w2); 
gmsPC4g2: msFA4bit port map (w2,b,'0',w0,co); -- w4 
gmsPC4g3: ms21mux4 port map (w0,"0000",clk,w1); -- w3 

Этот анализ.

Или обеспечивают постоянные значения:

signal w0, w1, w2: STD_LOGIC_VECTOR (3 downto 0); 
    constant w3: std_logic_vector(3 downto 0) := "0000"; 
    constant w4 : STD_LOGIC := '0'; 


-- w4 <= '0'; 
-- w3 <= '0000'; 

begin 

gmsPC4g1: msdff4 port map (w1,clk,w2); 
gmsPC4g2: msFA4bit port map (w2,b,w4,w0,co); 
gmsPC4g3: ms21mux4 port map (w0,w3,clk,w1); 

, который также анализирует.

Обратите внимание на двойные кавычки, используемые в строковых литералах ("0000"). Одиночные кавычки (тики) используются для символьных литералов с графическим представлением.

Вы не используете ни пакет std_logic_arith, ни std_logic_unisigned. Их пункты использования являются излишними.