【问题标题】:I am unable to find error in my simulation file of VHDL我在 VHDL 的模拟文件中找不到错误
【发布时间】:2016-07-20 17:36:45
【问题描述】:
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]

【问题讨论】:

  • 您没有显示与您的设计对应的行号。有四个信号声明(A、B、SUM、CARRY),复合分隔符“:=”中的“:”和“=”之间有多余的空格,用于提供默认值“0”。在端口映射中,',' 应该用作关联列表中的分隔符,而不是 ';'。最后一个关联不需要后面的逗号(它用作分隔符)。标签 clk_gena 和 clk_genb 中有一个空格而不是下划线。标签是单个标识符。修复这些后,您的代码分析。没有进一步的保证。
  • 恒定时钟周期:时间:= 1000 ns;就在这行代码

标签: vhdl simulation vivado


【解决方案1】:

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

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

有四个信号声明(A、B、SUM、CARRY),在复合分隔符“:=”中的“:”和“=”之间有多余的空格,用于提供默认值“0”。

这些应该是:

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

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

在端口映射中,',' 应该用作关联列表中的分隔符,而不是 ';'。

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,并且没有隐式最后一个等待语句等待敏感列表元素的进程将在执行最后一个后愉快地开始执行该进程的第一个顺序语句。

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

testbench 中(目前)尚未使用您的常量 clock_period。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多