vhdl 4位vedic乘数

时间:2014-10-28 08:59:33

标签: syntax-error vhdl

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;

我为4位vedic乘数写了一个VHDL代码。 我收到一个错误:

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

语法完全正确,我不明白为什么这是一个错误。可能有什么不对?

1 个答案:

答案 0 :(得分: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

当您始终如一地使用空格和缩进时,语法错误很容易出现。

是否愿意对语义提出主张?

附录&#34;在端口映射&#34;

中找到比正式更多的实际值

正如您所发现的那样,您也会出现语义错误以及上述语法错误。虽然您没有更新您的问题,但这些错误也可以在这里解释。

&#34;在港口地图中找到比正式更多的实际信息&#34;对于原始行54-59,因为您在端口映射关联中没有与twobitmultrca实例的组件声明中声明的端口数相同的端口。

您可以通过使用命名关联来解决这些问题,该关联允许您使用与数组基本元素类型actual相关联的正式数组端口元素。 (允许更多关联列表条目而不是端口数。)

请注意,您似乎在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;

这可以进行分析,但是如果没有所声明组件的实体/体系结构对,则无法进行详细说明,也无法验证功能。