序列检测器独立于循环

时间:2014-08-15 01:37:58

标签: system-verilog

如何编码可以检测1010的FSM,但可以在多个周期内保持“1”或“0”。典型的FSM检测连续时钟周期的1010个模式。是否有可能使用相同/相似的FSM来检测1010个模式,即使'1'可以在两个周期内保持'1'而'0'可以保持'0'两个周期......

1 个答案:

答案 0 :(得分:0)

原则上,您可以使用非常相似的序列检测FSM来检测序列,其中每个符号在线上停留两个或更多个周期而不是一个周期,这仅在符号位于线路上时才有效期。例如,如果1或0是一个序列字符,如果它在线上停留两个周期,那么你可以使用分频时钟为你的FSM计时,这样它的频率的一半或将你的序列扩展到11001100将解决你的问题(用于检测1010)。这适用于在固定数量的周期内定义值1或0的任何序列,即所有值将保持一段已知的时间。

但是,如果要检测具有在可变数量的周期内定义的值的序列,则这实际上是不可能的。要说你已经发现序列1010就是说线变为1,然后是0,然后是1,然后是0。如果线的定义变为1,则它是一个或多个周期的一个,那么就不可能确定在第一个周期中看到1然后在第二个周期中看到1是单个还是一个。例如,采用以下简短序列:

11001100110000

在固定情况下,每个时钟都有1个符号(您熟悉),序列就是它的读取方式:11001100110000。在我上面描述的每两个时钟固定周期为1个符号的情况下,序列现在是1010100.但是,如果我们说序列的符号可以是可变数量的时钟,则上面的序列可以解析为任意数量的序列: 101010 1101010, 1001010, 1011010, 1010010, 1010110, 1010100, 10101000, 101010000, 11001010, 11011010, 11010010, ... 11001100110000。

如果没有定义符号是什么,则很难创建FSM,因为任何输入序列都可以快速置换为大量可能的序列。因此,如果没有更多信息,就无法确定发送者意图。要么您需要另一个信号来确定何时对该线进行采样,要么需要区分解释所假设的内容。

如果你想确定FSM可以确定这些排列中的任何一个是否与给定序列匹配,那么你可以这样做,但将你的序列煮沸到最低要求。在我们上面的示例序列(11001100110000)中,如果我们想要查看该序列是否可以被解释为您的序列(1010),我们可以通过看到您必须在一段时间内看到1来找到所需的元素来制作可能的序列1010 (即,看到至少一个1),然后0一段时间(至少一个0),然后1一段时间(至少一个1),然后0一段时间(至少一个0)。请注意,任何交替的线都将匹配。

在像11001这样的非交替序列的情况下,我们可以查看线序列(1100110011000),寻找至少2个,然后至少2个零,然后至少1个。在你熟悉的FSM中,看到模式11000将导致返回弧开始,即没有看到模式11001。但是,在可变长度的情况下,FSM将保持在“看到的1100”状态,因为11000可以被解释为1100.

我不确定这是多么有用,因为由于我提到的问题无法确定在线上发送的预期序列,你无法确定什么构成符号。