2014-10-28 3 views
0
entity fourbitmult is 
    Port (a,b : in STD_LOGIC_VECTOR (3 downto 0); 
     p : out STD_LOGIC_VECTOR (7 downto 0)); 
end fourbitmult; 

architecture Behavioral of fourbitmult is 
component twobitmult 

port(a,b:in std_logic_vector(1 downto 0); 
p:out std_logic_vector (3 downto 0)); 
end component; 
component rca 
port(a,b:in std_logic_vector(3 downto 0); 
s:out std_logic_vector(3 downto 0); 
carry:out std_logic; 
cin:in std_logic='0' 
); 
end component; 
component halfadder 
port(a,b:in std_logic; 
s,c:out std_logic); 
end component; 
signal c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22: std_logic; 
begin 
m1:twobitmult port map(a(0),a(1),b(0),b(1),p(0),p(1),c1,c2); 
m2:twobitmult port map(a(2),a(3),b(0),b(1),c15,c16,c17,c18); 
m3:twobitmult port map(a(0),a(1),b(2),b(3),c19,c20,c21,c22); 
m4:twobitmult port map(a(2),a(3),b(2),b(3),c7,c8,c9,c10); 
r1:rca port map(c15,c16,c17,c18,c19,c20,c21,c22,c3,c4,c5,c6,c12); 
r2:rca port map(c1,c2,c7,c8,c3,c4,c5,c6,p(2),p(3),p(4),p(5),c11); 
c13<=c11 or c12; 
h1:halfadder port map(c13,c9,p(6),c14); 
h2:halfadder port map(c14,c10,p(7)); 
end Behavioral; 

Я написал код VHDL для 4-битного ведического множителя. Я получаю сообщение об ошибке, как:vhdl 4 бит ведический множитель

Line 45. parse error, unexpected EQ, expecting SEMICOLON or CLOSEPAR".. 

Синтаксис совершенно прав, я не понимаю, почему это ошибка. Что может быть неправильным?

ответ

1

The syntax is perfectly right

Не совсем.

cin:in std_logic='0' 

Должно быть

cin: in std_logic := '0' 
------------------^ 

Вы также отсутствует пункт контекстного в начале:

library ieee; 
use ieee.std_logic_1164.all; 

Вы удалили, что и некоторые комментарии заголовка, по-видимому, без указания, какая линия была строка 45 (и это строка, взятая выше). Ваш пример не совсем Minimal, Complete, and Verifiable example.

Ошибки синтаксиса обычно проявляются легко, когда вы используете пробел и отступы последовательно и хорошо.

Готов ли подать иск о семантике?

Дополнения к «Больше чем фактическому найденным формалям в карте порта»

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

В «Больше чем Actuals найдены формали в карте порта» для оригинальных линий 54 - 59 является, потому что вы не имеете такое же количество портов в карте порта ассоциациях, объявлены в декларациях компонентов для twobitmult и rca экземпляров ,

Вы можете излечить их, используя именованную ассоциацию, которая позволяет использовать элементы массива формального элемента, связанные с фактическим типом базового элемента массива. (Разрешить больше записей списка ассоциаций, чем количество портов).

Обратите внимание, что у вас возникла ошибка с объявлением компонента rca, показано больше ассоциаций карт портов, чем это возможно, путем расширения типов массивов.

Похоже, что carry предназначен для типа массива (и для его отражения были аннотированы ниже).

Также обратите внимание, что ваши типы массивов в ваших компонентах объявляются с индексами элементов порта в порядке убывания, и вы связываете их с элементами возрастания объекта fourbitmult портов типа массива.

Если вы можете использовать срезы фактических данных с таким же диапазоном направления, как они объявлены, запись списка ассоциаций может быть упрощена, например, как a => a(1 downto 0),. То же самое справедливо и для других мест, в которых вы можете подключить фактические данные среза.

Так что делают количество портов матча с помощью формальных элементов:

library ieee; 
use ieee.std_logic_1164.all; 

entity fourbitmult is 
    port ( 
     a,b:  in std_logic_vector (3 downto 0); 
     p:   out std_logic_vector (7 downto 0)); 
end fourbitmult; 

architecture behavioral of fourbitmult is 
    component twobitmult 
     port (
      a,b: in std_logic_vector (1 downto 0); 
      p:  out std_logic_vector (3 downto 0) 
     ); 
    end component; 
    component rca 
     port ( 
      a,b: in std_logic_vector (3 downto 0); 
      s:  out std_logic_vector (3 downto 0); 
      carry: out std_logic_vector (3 downto 0); -- std_logic; 
      cin: in std_logic := '0' -- formerly line 45 
    ); 
    end component; 
    component halfadder 
     port (
      a,b: in std_logic; 
      s,c: out std_logic 
     ); 
    end component; 
    signal c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12, 
      c13,c14,c15,c16,c17,c18,c19,c20,c21,c22: std_logic; 
begin 
m1: 
    twobitmult 
     port map (
      -- a(0),a(1),b(0),b(1),p(0),p(1),c1,c2 
      a(1) => a(0), 
      a(0) => a(1), 
      b(1) => b(0), 
      b(0) => b(1), 
      p(3) => p(0), 
      p(2) => p(1), 
      p(1) => c1, 
      p(0) => c2 
     ); 
m2: 
    twobitmult 
     port map ( 
      -- a(2),a(3),b(0),b(1),c15,c16,c17,c18 
      a(1) => a(2), 
      a(0) => a(3), 
      b(1) => b(0), 
      b(0) => b(1), 
      p(3) => c15, 
      p(2) => c16, 
      p(1) => c17, 
      p(0) => c18 
     ); 
m3: 
    twobitmult 
     port map (
      -- a(0),a(1),b(2),b(3),c19,c20,c21,c22 
      a(1) => a(0), 
      a(0) => a(1), 
      b(1) => b(2), 
      b(0) => b(3), 
      p(3) => c19, 
      p(2) => c20, 
      p(1) => c21, 
      p(0) => c22 
     ); 
m4: 
    twobitmult 
     port map (
      -- a(2),a(3),b(2),b(3),c7,c8,c9,c10 
      a(1) => a(2), 
      a(0) => a(3), 
      b(1) => b(2), 
      b(0) => b(3), 
      p(3) => c7, 
      p(2) => c8, 
      p(1) => c9, 
      p(0) => c10 
     ); 
r1: 
    rca 
     port map (
      --c15,c16,c17,c18,c19,c20,c21,c22,c3,c4,c5,c6,c12 
      a(3) => c15, 
      a(2) => c16, 
      a(1) => c17, 
      a(0) => c18, 
      b(3) => c19, 
      b(2) => c20, 
      b(1) => c21, 
      b(0) => c22, 
      carry(3) => c3, 
      carry(2) => c4, 
      carry(1) => c5, 
      carry(0) => c6, 
      cin => c12 
     ); 
r2: 
    rca 
     port map (
      -- c1,c2,c7,c8,c3,c4,c5,c6,p(2),p(3),p(4),p(5),c11 
      a(3) => c1, 
      a(2) => c2, 
      a(1) => c7, 
      a(0) => c8, 
      b(3) => c3, 
      b(2) => c4, 
      b(1) => c5, 
      b(0) => c6, 
      carry(3) => p(2), 
      carry(2) => p(3), 
      carry(1) => p(4), 
      carry(0) => p(5), 
      cin => c11 
     ); 

     c13 <= c11 or c12; 

h1: 
    halfadder 
     port map ( 
      c13,c9,p(6),c14 
     ); 
h2: 
    halfadder 
     port map ( 
      c14,c10,p(7) 
     ); 
end behavioral; 

Этого анализ, но без лица/архитектура пара для заявленных компонентов не может быть разработана, ни функциональность проверена.

+0

Я попробовал ур предложение, но я получаю ошибку, как «Более актуальные факты, чем форматы в карте порта» в строках от 54 до 59.plz дать некоторые другие предложения.Спасибо вам сэр – Jyoti

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