Vhdl 我';我在这个模拟中失踪了?

Vhdl 我';我在这个模拟中失踪了?,vhdl,modelsim,Vhdl,Modelsim,我正在尝试为键盘驱动程序编写一个VHDL代码,我需要从11位向量中读取8位,为了保持清楚,这里是读取输入信号的过程(有信号CLK和数据) 结果是: (可点击) 问题是我一直在读0xE1,而不是0xF0,其他一切都正常工作,我不明白为什么我缺少这个位。将0xF0的周期模式读为0xE1看起来像一个1位移位,这可能是由测试台生成时钟(键盘CLK)和数据引起的(键盘数据)同时 在硬件设计中,输出数据是时钟的结果,因此在时钟上升沿和新数据之间至少有一个增量周期延迟,但当前测试台设计同时生成时钟和数据,具有

我正在尝试为键盘驱动程序编写一个VHDL代码,我需要从11位向量中读取8位,为了保持清楚,这里是读取输入信号的过程(有信号CLK和数据)

结果是: (可点击)


问题是我一直在读
0xE1
,而不是
0xF0
,其他一切都正常工作,我不明白为什么我缺少这个位。

将0xF0的周期模式读为0xE1看起来像一个1位移位,这可能是由测试台生成时钟(
键盘CLK
)和数据引起的(
键盘数据
)同时

在硬件设计中,输出数据是时钟的结果,因此在时钟上升沿和新数据之间至少有一个增量周期延迟,但当前测试台设计同时生成时钟和数据,具有:

KEYBOARD_CLK <= '1';
KEYBOARD_DATA <= '0';

KEYBOARD\u CLK将0xF0的周期模式读取为0xE1看起来像是1位移位,这可能是由测试台同时生成时钟(
KEYBOARD\u CLK
)和数据(
KEYBOARD\u data
)引起的

在硬件设计中,输出数据是时钟的结果,因此在时钟上升沿和新数据之间至少有一个增量周期延迟,但当前测试台设计同时生成时钟和数据,具有:

KEYBOARD_CLK <= '1';
KEYBOARD_DATA <= '0';

KEYBOARD\u CLK感谢您的帮助!这是编写测试台的明智而高效的方式!再次感谢!感谢您的帮助!这是编写测试台的明智而高效的方式!再次感谢!
KEYBOARD_CLK <= '1';
KEYBOARD_DATA <= '0';
CLK_PROCESS : process 
BEGIN 
  KEYBOARD_CLK <= '1';
  wait for (KEYBOARD_CLK_PERIOD/2);
  KEYBOARD_CLK <= '1';
  wait for (KEYBOARD_CLK_PERIOD/2);
end process;

DATA_PROCESS : process
BEGIN
  KEYBOARD_DATA <= '0';
  for i in 1 to 5 loop  -- Number of cycles with same data
      wait until rising_edge(KEYBOARD_CLK);
  end loop;
  ...
  KEYBOARD_DATA <= '1';
  for i in 1 to 5 loop  -- Number of cycles with same data
      wait until rising_edge(KEYBOARD_CLK);
  end loop;
  ...
end process;