0

我有 N 个 M 位宽的寄存器。所有寄存器都填充了值,但我只想对那些符合特定模式的寄存器进行采样,例如只查看 MSB 为 1 的寄存器。在时钟的每个上升沿上,我想读取一个 M 位宽注册符合该模式。

例如:有 256 个 8 位寄存器(reg0 - reg255)。Reg0、Reg3 和 Reg255 满足 MSB = 1 的模式。在第一个时钟上升沿,由于匹配模式,reg0 被发送到输出,第二个时钟上升沿 Reg3 被发送到输出,在第三个时钟边缘 Reg255 被发送到输出。

我对 HDL 非常满意,因此我将不胜感激。这是一个在时钟进程中使用 for 循环的应用程序有用吗?哦,我正在使用 VHDL 来解决这个问题。

我不是在寻找完整的答案,也许只是我应该查找的一些关键字。

谢谢,J

4

1 回答 1

1

有一种方法可以做到这一点。

您应该为每个寄存器使用 1 个标志(二进制寄存器):

该标志指示是否在相关寄存器中检测到模式,它将用于知道要发送哪个寄存器。当寄存器将被发送时,该标志将被重置。

一开始,您将所有寄存器标志强制为“0”(未检测到模式/无需发送寄存器)

您将数据加载到寄存器中。

进程检查是否检测到模式,在这种情况下,将关联寄存器的标志设置为“1”

在标志上使用 amor 循环或 BIG if else(不推荐)。如果标志等于“1”,则发送寄存器并将其复位。如果没有,请转到下一个。最后一步可以在一个时钟周期内从一个寄存器传递到另一个寄存器,即使它们被其他一些寄存器分开(不需要发送)。

/!\ 请注意,机制复杂并导致时序约束,您设计的时钟性能会受到影响,您将使用更多的 LUT。

最好的问候,祝你好运。

于 2017-07-06T19:01:01.907 回答