我有N个M位宽的寄存器。所有寄存器都填充了值,但我只想对那些适合某种模式的寄存器进行采样,例如只查看MSB为1的寄存器。在时钟的每个上升沿,我想读取一个M位宽注册符合该模式。
例如: 有256个8位寄存器(reg0 - reg255)。 Reg0,Reg3和Reg255满足MSB = 1的模式。在第一个上升时钟沿,reg0被发送到输出,因为它匹配模式,第二个上升时钟沿Reg3被发送到输出,并且在第3个时钟边沿Reg255被发送到输出端。
我对HDL很绿,所以我很感激任何帮助。这是一个在时钟进程中使用for循环的应用程序是否有用?哦,我正在使用VHDL解决这个问题。
我不是在寻找一个完整的答案,也许只是我应该查找的一些关键词。
谢谢, Ĵ
答案 0 :(得分:1)
有一种方法可以做到这一点。
每个寄存器应使用1个标志(二进制寄存器):
该标志指示是否在相关寄存器中检测到模式,将用于知道要发送的寄存器。当寄存器发送时,该标志将被复位。
开始时,强制所有寄存器标志为'0'(未检测到模式/无需发送寄存器)
您将数据加载到寄存器中。
进程检查是否检测到模式,在这种情况下将相关寄存器的标志设置为“1”
使用amor循环或BIG if else(不推荐)over flag。如果标志等于'1',则发送寄存器并重置。如果没有,请转到下一个。 最后一步可以在一个时钟周期内从寄存器传递到另一个寄存器,即使它们被一些其他寄存器(不需要发送)分开。
/!\小心,机制复杂并导致时序约束,设计时钟的性能会受到影响,你会使用更多的LUT。
祝你好运,祝你好运。