在Xilinx中需要帮助VHDL

时间:2015-01-06 00:27:17

标签: vhdl xilinx

所以,我正在做一个大学项目,我必须使用Xilinx对3个计数器进行VHDL仿真。其中一个计数器从5下降到0,另一个从4下降到0,另一个从13变为0,但它用一个时钟信号计数两次。我开发的代码是这样的(它基于原理图,所以我认为实体和架构应保持不变):

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY projetesquema2_projetesquema2_sch_tb IS
END projetesquema2_projetesquema2_sch_tb;
ARCHITECTURE behavioral OF projetesquema2_projetesquema2_sch_tb IS 

COMPONENT projetesquema2
PORT( CLOCK :   IN  STD_LOGIC; 
      ACL   :   IN  STD_LOGIC; 
      CAT   :   OUT STD_LOGIC; 
      CRT   :   OUT STD_LOGIC; 
      CLT   :   OUT STD_LOGIC; 
      ACA   :   IN  STD_LOGIC);
END COMPONENT;

SIGNAL CLOCK    :   STD_LOGIC;
SIGNAL ACL  :   STD_LOGIC;
SIGNAL CAT  :   STD_LOGIC;
SIGNAL CRT  :   STD_LOGIC;
SIGNAL CLT  :   STD_LOGIC;
SIGNAL ACA  :   STD_LOGIC;

BEGIN

UUT: projetesquema2 PORT MAP(
    CLOCK => CLOCK, 
    ACL => ACL, 
    CAT => CAT, 
    CRT => CRT, 
    CLT => CLT, 
    ACA => ACA
);

*** Test Bench - User Defined Section ***

tb : PROCESS
BEGIN
 process (CLOCK)
begin
    if (CLOCK'event and CLOCK='1') then
      if (ACA='0') then
        CAT <= "0000";
      else
        CAT <= CAT + 1;
      end if;
    end if;
 end process;

  process (CAT)
 begin
    if (CAT'event and CAT='1') then
        CRT <= CRT + 1;
      end if;
    end if;
 end process;

  process (CLOCK)
 begin
    if (CLOCK'event and CLOCK='1') then
      if (ACL='0') then
        CLT <= "0000";
      else
        CLT <= CLT + 1;
      end if;
    end if;
 end process;

 end Behavioral;
  WAIT; -- will wait forever
 END PROCESS;
*** End Test Bench - User Defined Section ***

 END;

这给了我一些我不知道如何解决的错误,希望有人能真正帮助我。 错误是:

错误:第54行:&#34;进程&#34;附近的语法错误。

错误:第55行:&#34;开始&#34;。

附近的语法错误

错误:第58行:类型std_logic与字符串文字

不匹配

错误:第60行:找到&#39; 0&#39;运算符&#34; +&#34;的定义无法确定&#34; +&#34;

的精确重载匹配定义

错误:第68行:找到&#39; 0&#39;运算符&#34; +&#34;的定义无法确定&#34; +&#34;

的精确重载匹配定义

错误:第70行:语法错误接近&#34;如果&#34;。

错误:第77行:类型std_logic与字符串文字

不匹配

错误:第79行:找到&#39; 0&#39;运算符&#34; +&#34;的定义无法确定&#34; +&#34;

的精确重载匹配定义

错误:第22行:由于先前的错误而忽略了单位。

错误:第85行:&#34; WAIT&#34;附近的语法错误。

2 个答案:

答案 0 :(得分:1)

假设星号分隔的注释不是VHDL设计规范的一部分:

你有一个无关的进程并且开始:

tb : PROCESS
BEGIN
 process (CLOCK)
begin

还有end if

  process (CAT)
 begin
    if (CAT'event and CAT='1') then
        CRT <= CRT + 1;
      end if;
    end if;
 end process;

还有更多无关的陈述:

 end Behavioral;
  WAIT; -- will wait forever
 END PROCESS;
-- *** End Test Bench - User Defined Section ***

 END;

这应该只是:

end Behavioral; 

end architecture Behavioral;

现在我们发现了语义错误:

&#39; CAT&#39;被定义为标量std_logic:

    SIGNAL CAT  :   STD_LOGIC;
    SIGNAL CRT  :   STD_LOGIC;
    SIGNAL CLT  :   STD_LOGIC;
    SIGNAL ACA  :   STD_LOGIC;

并用于projetesquema2的组件声明。

您无法将其提升为std_logic_vector值:

        CAT <= "0000";
      else
        CAT <= CAT + 1;

或者向它添加一个整数,就像它被声明为unsigned一样(use子句引用包numeric_std,BTW可以转储unisim东西)。

同一论点适用于CRTCLAprojetesquema似乎翻译成英语作为项目计划,没有足够的信息建议回答者如何解决这些问题。

也许如果您为projetesquema2提供了实体和架构,或者告诉我们它的作用以及端口名称的含义?

看来你或者被抛到深处,错过了阅读清单的一部分,或者从我们目前所看到的错误中没有在课堂上引起注意。

Stackoverflow可能不是您应该作为学习VHDL的第一资源,而Xilinx工具对错误消息有些不友好。

我知道这是用英语写的,但请尝试使用reference来概述VHDL。

答案 1 :(得分:0)

就在这里,你开始在流程中定义流程,这是不合法的。它也没有多大意义。

tb : PROCESS
BEGIN
 process (CLOCK)
begin
    if (CLOCK'event and CLOCK='1') then