Verilog序列模三整除3检测器

文章资讯 2020-07-19 14:15:45

Verilog序列模三整除3检测器

例如:
序列=1,out=0;
序列=11,out=1;
序列=110,out=1;
序列=1101,out=0;

首先需要找一下规律,一个数被三除,只可能会有三种情况:
1.余数为0;
2.余数为1;
3.余数为2;

假设当前序列表示的数是x,商为a,余数为b, 则有:
[3a+b = x ]
需要注意的是:当新进来1bit数据时,实际上隐含了一个条件就是序列将被左移,也就是说如果当前序列为(x),输入数据为0,则此时序列表示的数是(2x),如果输入是1,则此时序列表示(2x+1).
下面分类讨论:

余数为0的情况,也就是(3a=x):
输入为0,因为之前余数为0表示已经能整除3,这时输入为0相当于序列乘上个2,仍然能被3整除,输出为1;
输入为1,则有(6a+1=2x),可见此时余数为1;
余数为1的情况,也就是(3a+1=x):
输入为0,则有(6a+2=2x),可见此时余数为2;
输入为1,则有(6a+3=2x+1),此时序列可以被三整除,可见此时余数为0,输出为1;
余数为2的情况,也就是(3a+2=x):
输入为0,则有(6a+4=2x),可见此时余数为4 mod 3 = 1;
输入为1,则有(6a+5=2x+1),可见此时余数为5 mod 3 = 2;