控制信号变化时,计数器不会递增

时间:2016-03-23 18:57:44

标签: vhdl modelsim

我在VHDL中实现了一个简单的0到255设计计数器。它在FPGA板上按预期工作,但是当我在Modelsim中模拟它时,当我强制key(0)改变时,计数器不会添加。有什么想法吗?

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

ENTITY PROC_TEST     IS
  PORT(
    CLOCK_50: IN STD_LOGIC;
    KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
    LEDR: OUT STD_LOGIC_VECTOR(9 DOWNTO 0)
    );
END PROC_TEST;

ARCHITECTURE MAIN OF PROC_TEST IS
  SIGNAL COUNTER: INTEGER RANGE 0 TO 255;
BEGIN

  LEDR(7 DOWNTO 0)<= STD_LOGIC_VECTOR (TO_UNSIGNED(COUNTER,8));

  PROCESS (CLOCK_50)
  BEGIN
    IF (KEY(0)'EVENT AND KEY(0) = '0')THEN
      COUNTER<=COUNTER + 1;
    END IF;
  END PROCESS;
END MAIN;

1 个答案:

答案 0 :(得分:1)

过程敏感度列表中缺少信号<?php if(isset($_POST["option"])){ $option = $_POST["option"]; switch($option){ case 0: date_default_timezone_set ("America/Chicago"); $time = time(); echo(date("Y;m;d;H;i;s", $time)); } } else{ echo "No option set!"; } 。当您综合FPGA的代码时,通常会通过警告来指示。

进程只执行/恢复:

  • 模拟启动后,
  • 每当灵敏度列表中的一个信号发生变化时。

因此,您的流程仅在KEY(0)更改时执行,但在您在模拟器中强制更改CLOCK_50时则不会执行。因此,您必须将代码更改为:

KEY(0)

进行此更改后,模拟输出如下,其中10 MHz时钟应用于PROCESS (KEY(0))

simulation output

进一步评论:

正如您在我的模拟屏幕截图中看到的,信号KEY(0)LEDR(9)具有未定义的(&#39; U&#39;)值。发生这种情况是因为您忘记在架构中分配它们。这也应该通过综合来表示。合成器通常只分配“0”和“0”。 (逻辑低)到输出,可以通过以下方式明确实现:

LEDR(8)

其他输入信号在我的模拟中有一个未定义的值,因为它们是未使用的输入,我没有应用任何波形。