Vhdl 当控制信号改变时,计数器不增加

Vhdl 当控制信号改变时,计数器不增加,vhdl,modelsim,Vhdl,Modelsim,我用VHDL实现了一个简单的计数器0到255的设计。它在FPGA板上按预期工作,但当我在Modelsim中模拟它时,当我强制更改键(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 DOWN

我用VHDL实现了一个简单的计数器0到255的设计。它在FPGA板上按预期工作,但当我在Modelsim中模拟它时,当我强制更改
键(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;
IEEE库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体过程测试是
港口(
时钟50:在标准逻辑中;
键:标准逻辑向量(3到0);
LEDR:OUT标准逻辑向量(9到0)
);
结束过程试验;
PROC_测试的主要架构是
信号计数器:0到255的整数范围;
开始
LEDR(7向下至0)过程灵敏度列表中缺少信号
键(0)
。当您为FPGA合成代码时,这通常由警告指示

进程仅执行/恢复:

  • 一旦模拟启动后
  • 每当灵敏度列表中的一个信号改变时
因此,您的过程仅在
CLOCK_50
发生更改时执行,而不是在模拟器中强制更改
键(0)
时执行。因此,您必须将代码更改为:

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


进一步说明:

正如您在我的模拟屏幕截图中看到的,信号
LEDR(9)
LEDR(8)
具有未定义的('U')值。这是因为您忘记在体系结构中分配它们。这也应该通过合成来说明。合成器通常只将“0”(逻辑低)分配给输出,这可以通过以下方式明确实现:

LEDR(9 downto 8) <= "00";

LEDR(从9到8)我美化了你的代码并改进了你的文本,希望一切正常。只需在浏览器中重新加载页面或单击问题上方的通知即可。谢谢,我看不到您所做的更改。