gpt4 book ai didi

events - std_logic_vector 上的 VHDL 事件关键字

转载 作者:行者123 更新时间:2023-12-04 04:33:53 25 4
gpt4 key购买 nike

我正在用 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 个进程来唤醒设备。所有位上的按位 OR 不会解决任何问题,因为大多数信号都是高电平,因此所有位上的 OR 总是会导致高电平。以下代码:
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部分是Hardware Description Language (HDL)的缩写,
所以你可以使用的 VHDL 结构必须可以通过综合映射
工具到目标。 'event的使用通常与顺序相关
(时钟)硬件元素,如触发器或 RAM,以及综合工具
通常要求您以特定方式编写 VHDL,因此该工具可以
确定要使用的特定硬件元素。

即使您可以为模拟器编写 VHDL 代码,例如 ModelSim,
可以编译和模拟使用'event在你的例子中,综合
工具通常无法将其映射到任何可用的目标硬件
元素,因为可能没有像 'event 这样的硬件元素
探测器。

但是一个 'event实际上表示信号值的变化,所以你可以
在 VHDL 中明确地编写信号值变化检测器,例如:

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

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com