Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VHDL:如何快速跳过我不知道的寄存器';你不在乎吗?_Vhdl_Asic - Fatal编程技术网

VHDL:如何快速跳过我不知道的寄存器';你不在乎吗?

VHDL:如何快速跳过我不知道的寄存器';你不在乎吗?,vhdl,asic,Vhdl,Asic,我有N个M位宽的寄存器。所有寄存器都用值填充,但我只想对符合特定模式的寄存器进行采样,例如只查看MSB为1的寄存器。在时钟的每个上升沿上,我想读取一个符合该模式的M位宽寄存器 例如: 有256个8位寄存器(reg0-reg255)。Reg0、Reg3和Reg255符合MSB=1的模式。在第一个上升时钟沿上,由于与模式匹配,所以将reg0发送到输出,第二个上升时钟沿Reg3发送到输出,第三个上升时钟沿上,将Reg255发送到输出 我对HDL非常了解,所以我非常感谢任何帮助。这是一个在时钟进程中使用

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

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

我对HDL非常了解,所以我非常感谢任何帮助。这是一个在时钟进程中使用for循环很有用的应用程序吗?哦,我正在用VHDL来解决这个问题

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

谢谢,
有一种方法可以做到这一点

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

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

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

将数据加载到寄存器中

如果检测到模式,则进行过程检查,在这种情况下,将相关寄存器的标志设置为“1”

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

/!\请小心,该机制非常复杂,并且会导致时序限制,您设计的时钟性能将受到影响,并且您将使用更多LUT


祝你好运

最好的开始是画一幅你想要创建的硬件的图片。然后你就可以问一些关于编写代码的更好的问题了——但在那一点上,你可能可以用VHDL在寄存器上搜索,或者用VHDL在多路复用器上搜索……正如Jim所写,你的第一个问题是数字硬件设计,而不是HDL编码。只有当你对你想要的硬件有了一个清晰的概念,HDL编码才会成为可能。这不是一个VHDL问题,而是一个更一般的设计问题。我会把它放在我读过的你描述中的两个任务上:模式识别和多路复用/总线仲裁。我们在说什么时钟频率?时间要求是什么?这不能用通用处理器实现吗?谢谢你的评论。我采纳了吉姆·刘易斯的建议,画了一幅我正在寻找的逻辑图。为了澄清,这最终是针对ASIC的,而不是FPGA。