在SRFF终端的测试平台上显示错误“;预期而不是标识符

问题描述 投票:1回答:1

我在SR FF的测试平台中发现了这个错误。 当我在终端中使用GHDL编译它时,它显示错误

;预期而不是''

我只是一个初学者,所以我找不到错误。 谁能帮帮我吗?

library ieee;
use ieee.std_logic_1164.all;

entity SR_tb is
end SR_tb;

architecture behavioral of SR_FF is
    component SR_FF is
        port  (S,R,CLOCK:in std_logic;
        Q,QBAR:out std_logic);  
    end component;
signal clock,s,r,q,qbar: std_logic;
constant clock_period : time := 10 ns;
begin
    port_map:SR_FF port map (clock=>CLOCK,s=>S,r=>R,q=>Q,qbar=>QBAR);

clock_process:process
 begin
      clock <='0';
      wait for clock_period/2;
      clock <= '1';
      wait for clock period/2;
end process;
stim_proc:process
begin 
       s<= '0';
        r<= '0';
        wait for 50 ns;   
        s<= '0';
        r<= '1';
        wait for 50 ns;
        s<= '1';
        r<= '0';
        wait for 50 ns;
        s<= '1';
        r<= '1';
        wait for 50 ns;
assert false report "reached end of test";
wait;
end process;

end behavioral;
terminal vhdl test-bench flip-flop ghdl
1个回答
0
投票

您的代码中有两个初始错误,它们在语法分析期间发生:

ghdl -a sr_tb.vhdl sr_tb.vhdl:22:22:错误:缺少“;”在声明结束时 sr_tb.vhdl:22:28:错误:“<=”或“:=”预期而不是'/' ghdl:错误:编译错误

第22行是clock_process进程中的最后一个wait语句:

  wait for clock period/2;

常量被声明为clock_period,你把它变成了两个独立的标识符,clockperiod。在wait语句的语法中没有连续标识符的期望(请注意错误语句中的差异,这是ghdl-0.36的预发布,当多个原因发生语法错误时,他们倾向于在他们不知道时进行推广)覆盖所有事件)。假设在clock之后缺少一个分号来终止等待语句。 period语法上将成为以下声明的一部分。

修复最后一个等待语句:

      wait for clock_period/2;  -- WAS clock period/2;

揭示了一个额外的语义问题:

ghdl -a sr_tb.vhdl sr_tb.vhdl:7:14:错误:未分析实体'sr_ff'

出现此错误是因为您没有提供sr_ff实体。如果它已经被分析到目标库中,那么由于架构中的实体名称错误,错误会更加广泛:

architecture behavioral of SR_FF is

错误:

ghdl -a sr_tb.vhdl sr_tb.vhdl:12:8:错误:标识符“clock”已用于声明 sr_ff.vhdl:5:16:错误:上一个声明:端口“时钟” sr_tb.vhdl:12:14:错误:标识符“s”已用于声明 sr_ff.vhdl:5:12:错误:上一个声明:port“s” sr_tb.vhdl:12:16:错误:标识符“r”已用于声明 sr_ff.vhdl:5:14:错误:上一个声明:端口“r” sr_tb.vhdl:12:18:错误:标识符“q”已用于声明 sr_ff.vhdl:6:5:错误:上一个声明:端口“q” sr_tb.vhdl:12:20:错误:标识符“qbar”已用于声明 sr_ff.vhdl:6:7:错误:上一个声明:端口“qbar” sr_tb.vhdl:19:7:错误:无法分配端口“时钟” sr_tb.vhdl:21:7:错误:无法分配端口“时钟” sr_tb.vhdl:26:8:错误:无法分配端口“s” sr_tb.vhdl:27:9:错误:无法分配端口“r” sr_tb.vhdl:29:9:错误:无法分配端口“s” sr_tb.vhdl:30:9:错误:无法分配端口“r” sr_tb.vhdl:32:9:错误:无法分配端口“s” sr_tb.vhdl:33:9:错误:无法分配端口“r” sr_tb.vhdl:35:9:错误:无法分配端口“s” sr_tb.vhdl:36:9:错误:无法分配端口“r” ghdl:错误:编译错误

这些都是由(重新)分析behavioral的架构SR_FF并找到已经声明的标识符引起的。实体和体系结构声明占用相同的声明区域,并且这些信号名称已在(错误)实体中声明为端口。

在这两种情况下,固化都是一样的。在testbench规范中,您应该引用testbench实体名称:

architecture behavioral of SR_tb is -- WAS SR_FF is

所有来自空间应该是架构规范中的下划线('_')和错误的实体名称。修复这两个并且ghdl不会产生分析错误。通过对sr_ff的实体和体系结构声明的分析,测试平台也进行了详细说明和模拟(注意你用一个断言来表示刺激的结束,但是不要停止模拟,这可以用if语句用函数now评估当前的模拟时间来完成在clock_process或-2008使用包装stop中的std.env函数)。

值得注意的是,当在接口列表(这里是端口映射)中使用命名关联时,在复合分隔符=>的左侧可以找到形式,而实际值在右侧列出。你对大写字母的使用暗示你试图以相反的方式做到这一点,将来可能会给你带来麻烦,因为形式和实际情况不同。

© www.soinside.com 2019 - 2024. All rights reserved.