events - std_logic_vector 上的 VHDL 事件关键字

标签 events process vhdl

我正在用 VHDL 实现数字设计,该设计必须低功耗。该设计有许多输入被声明为多个标准逻辑向量。如果任何输入发生任何变化,则允许唤醒设备。这必须是组合逻辑,因为设备处于断电状态。我想做的代码说明了一切:(ToggleSTDBY 是一个信号,所以这是合法的)

P_Wakeup: PROCESS (VEC1, VEC2, VEC3, Rst_N) IS
BEGIN
  IF Rst_N = '0' THEN
    ToggleSTDBY <= '0';
  ELSIF VEC1'event OR VEC2'event OR VEC3'event THEN
    ToggleSTDBY <= NOT(ToggleSTDBY);
  END IF;
END PROCESS P_Wakeup;    

这在模拟中是合法的,但在综合时它说“'事件仅支持单位信号”。我怎样才能解决这个问题?这些向量总共有 66 位,我真的不想编写 66 个进程来唤醒设备。对所有位进行按位“或”不会解决任何问题,因为大多数信号将为高电平,因此对所有位进行“或”将始终导致高电平。代码如下:

P_Wakeup: PROCESS (VEC, Rst_N) IS
BEGIN
IF Rst_N = '0' THEN
  ToggleSTDBY <= '0';
ELSE
  FOR i IN VEC'RANGE LOOP
    IF VEC(i)'EVENT THEN
      ToggleSTDBY <= NOT(ToggleSTDBY);
    END IF;   
  END LOOP;
END IF;
END PROCESS P_Wakeup;

给出错误“信号属性'EVENT的前缀必须是静态信号名称”。我该如何修复它并保持代码可读?

最佳答案

VHDL的HDL部分是硬件描述语言(HDL)的缩写, 因此,您可以使用的 VHDL 结构必须能够通过综合进行映射 工具到达目标。 'event 的使用通常与顺序相关 (时钟)硬件元件,如触发器或 RAM,以及综合工具 通常要求您以特定方式编写 VHDL,因此该工具可以 确定要使用的特定硬件元素。

即使您可以为模拟器(例如 ModelSim)编写 VHDL 代码, 可以编译并模拟 'event 的使用,如您的示例中所示,综合 工具通常无法将其映射到任何可用的目标硬件 元素,因为可能不存在诸如 'event 这样的硬件元素 探测器。

但是'事件实际上表示信号值的变化,所以你也许可以 在 VHDL 中明确编写信号值变化检测器,如下所示:

change <= '1' if (vec_now /= vec_previous) else '0';

根据可用的低功耗硬件元件,您可以启动时钟 当在 change 上异步检测到“1”时,可能通过 ToggleSTDBY,然后处理更改。进入之前的最后一件事 sleep 模式则捕获vec_previous中当前的vec值,因此 在 sleep 模式下可以检测到另一个变化。

进行我认为您正在做的低功耗设计的可能性 根据描述,完全取决于提供的功能 目标 FPGA/ASIC 技术。因此,在尝试正确使用 VHDL 语法之前, 您可能想要确定最终的硬件应该是什么样子,基于 可用的低功耗功能。

关于events - std_logic_vector 上的 VHDL 事件关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20098643/

相关文章:

javascript - 如何使用 d3 Canvas 渲染器添加鼠标事件以强制执行有向图?

java - Mozilla FireFox(无响应)-Selenium WebDriver 拒绝通过 driver.quit() 命令终止

java - java中如何杀死特定进程

vhdl - 进程语句中的(并发)信号分配是顺序的还是并发的?

events - 弹性 4 状态 : includeIn and component creationComplete

javascript - 使用 JavaScript 和 jQuery,跨浏览器处理按键事件 (F1-F12)

python - 按 T​​ab 或 Enter 键时获取 QTableView 单元格值

c# - 什么是 "Error initializing filter ' drawtext' with args..."在 c# 进程类中使用 ffmpeg 时出现错误?

type-conversion - SRA不能有这样的操作数吗?

vhdl - VHDL 中的 if 语句