我无法在VHDL的模拟文件中找到错误

时间:2016-07-20 17:36:46

标签: vhdl simulation vivado

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity test_adder_vhdl is
end test_adder_vhdl;

architecture Behavioral of test_adder_vhdl is
constant clock_period : time := 1000 ns ;
component adder is
PORT (A: in STD_LOGIC;
     B: in STD_LOGIC;
     SUM: out STD_LOGIC;
     CARRY: out STD_LOGIC);
end component adder;

SIGNAL A: STD_LOGIC : ='0';
SIGNAL B: STD_LOGIC : ='0';
SIGNAL SUM: STD_LOGIC : ='0';
SIGNAL CARRY: STD_LOGIC : ='0';
begin

uut: adder port map(
A=> A;
B=> B;
SUM => SUM;
CARRY => CARRY;
);

clk gena: process
begin
wait for 100 ns;
A <= not A;
end process;

clk genb: process
begin
wait for 50 ns;
B <= not B;
end process;
end Behavioral;

上述代码中的错误是

  

[HDL 9-806]“:”附近的语法错误。 [ “F:/practiceWorkspace/practice1/practice1.srcs/sim_1/new/test_adder_vhdl.vhd”:38]

1 个答案:

答案 0 :(得分:2)

您没有显示与您的设计的行号对应关系。该错误似乎与A的信号声明相对应。语法错误更多。

语句由分号分隔。接口声明由分号分隔。其他对象声明由分号分隔。多个元素(在此处的关联列表中)以逗号分隔。

有四个信号声明(A,B,SUM,CARRY),在&#39;:&#39;之间有无关的空格。和&#39; =&#39;在复合定界符&#34;:=&#34;用于提供默认值&#39; 0&#39;。

这些应该是:

SIGNAL A: STD_LOGIC := '0';
SIGNAL B: STD_LOGIC := '0';
SIGNAL SUM: STD_LOGIC := '0';
SIGNAL CARRY: STD_LOGIC := '0';

:=用于表示变量赋值,常量值和对象的默认表达式(值)。

在端口地图中,&#39;应该用作关联列表中的分隔符而不是&#39 ;;&#39;。

uut: adder port map (
A=> A,
B=> B,
SUM => SUM,
CARRY => CARRY  -- NO TRAILING SEPARATOR
);

最后一个关联不需要以下逗号(用作分隔符的分隔符)。

标签clk_gena和clk_genb中有空格而不是下划线。

clk_gena: process
begin
wait for 100 ns;
A <= not A;
end process;

clk_genb: process
begin
wait for 50 ns;
B <= not B;
end process;

标签是单个标识符,由一个字母后跟一个或多个由零或一个下划线字符分隔的字母或数字组成。这些过程标记为(命名)clk_gena和clk_genb。

修复这些代码后进行分析(编译)。如果没有组件加法器的实体和体系结构对,则无法对代码进行详细说明(链接)或模拟。

请注意,这两个进程暂停50 ns,并且没有隐含的last wait语句等待敏感列表的元素的进程将在执行最后一个进程后快速开始执行进程的第一个顺序语句。

期望您可以通过依赖于实现的方法添加尾随等待语句或控制模拟(例如,运行一些模拟时间间隔)。

testbench

中未使用您的常量clock_period(至今)