【问题标题】:VHDL Counter Error (vcom-1576)VHDL 计数器错误 (vcom-1576)
【发布时间】:2015-10-13 12:58:44
【问题描述】:

我想用 VHDL 编写一个简单的计数器,但我总是收到这个错误:

Error: C:/Users/usrname/dir1/dir2/dir3/counter.vhd(22): near "rising_edge": (vcom-1576) expecting == or '+' or '-' or '&'.

这是我的代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity counter is
port (
EXT_RST : in std_logic;
EXT_CLK : in std_logic;
EXT_LED : out std_logic_vector(7 downto 0)
);
end counter;

architecture fast of counter is

signal count : std_logic_vector(7 downto 0);

begin
process(EXT_CLK, count)
  begin
    if (EXT_RST = '1') then
    count <= "00000000";
    elseif rising_edge(EXT_CLK) then
    count <= count + '1';
    end if;
 end process;
EXT_LED <= count;
end fast;

有人知道我为什么会收到这个错误吗?

【问题讨论】:

  • 提示:elseif 不是 VHDL 关键字。
  • 当我使用else if 我得到更多的错误:S
  • 改用 'elsif'。

标签: vhdl counter modelsim


【解决方案1】:

除了elsif Lars Asplund 在他的评论中建议使用`count 的类型转换:

count <= std_logic_vector(unsigned(count) + 1);

或使用包 numeric_std_unsigned(仅限 VHDL -2008)而不是 numeric_std。

注意 1 而不是 '1' 和类型转换。 numeric_std_unsigned 不需要这些,它具有带有此签名的“+”添加运算符函数:

[STD_ULOGIC_VECTOR,STD_ULOGIC return STD_ULOGIC_VECTOR]

使用包 numeric_std 您还可以将 count 设为无符号而不是 std_logic_vector 并转换为 LED 分配 -

EXT_LED <= std_logic_vector(count);

另外,count 不需要在进程敏感度列表中:

process(EXT_CLK)

在使用count 的值的过程中除了时钟边沿之外没有任何分配。

使用第一个建议和缩进修改您的代码(这有助于显示敏感度列表不需要count

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity counter is
    port (
        EXT_RST : in std_logic;
        EXT_CLK : in std_logic;
        EXT_LED : out std_logic_vector(7 downto 0)
    );
end counter;

architecture fast of counter is

signal count : std_logic_vector(7 downto 0);

begin
process(EXT_CLK)
  begin
    if (EXT_RST = '1') then
        count <= "00000000";
    elsif rising_edge(EXT_CLK) then
        count <= std_logic_vector(unsigned(count) + 1);
    end if;
 end process;
    EXT_LED <= count;
end fast;

这会分析、阐述并将模拟。

这提出了一个问题:如果您实际综合您的设计,EXT_RSTEXT_CLK 是如何派生的。如果它们来自按钮(尤其是时钟),则即使薄膜开关会老化并随后会反弹,也可能需要去抖动。

【讨论】:

  • 非常感谢!通过这个例子我学到了很多东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多