Statistics 什么';s N位数组中X*连续*位设置为1的概率?

Statistics 什么';s N位数组中X*连续*位设置为1的概率?,statistics,hardware,verification,Statistics,Hardware,Verification,我试图编写一个简单、足够精确的过滤器,用于在RTL模拟中验证硬件。我们通过将设计中的所有触发器随机初始化为0或1来模拟芯片触发器固有的随机性。这对应于芯片的触发器在通电期间获得一些随机值。我们还将重置树中的触发器随机化(重置树中没有反馈循环),这意味着您可以在重置线上获得错误的闪烁 e、 g。 ||| 第n复位树触发器 +----+ +----+ +----+ / / +----+ 重置输入| | 0 | | | 1 | | 0/| |重置输

我试图编写一个简单、足够精确的过滤器,用于在RTL模拟中验证硬件。我们通过将设计中的所有触发器随机初始化为0或1来模拟芯片触发器固有的随机性。这对应于芯片的触发器在通电期间获得一些随机值。我们还将重置树中的触发器随机化(重置树中没有反馈循环),这意味着您可以在重置线上获得错误的闪烁

e、 g。 ||| 第n复位树触发器 +----+ +----+ +----+ / / +----+ 重置输入| | 0 | | | 1 | | 0/| |重置输出 -------->D Q>-->D Q>-->D Q>-/../-->D Q>---- | | | | | | \ \ | | | | | | | | \ \ | | +^---+ +^---+ +^---+ / / +^---+ | | | / / | 时钟----------------------------------------------------//---+

您将看到一个0->1->0,看起来像是重置,但实际上是一个小故障

我想构建一个过滤器,查找一定数量的连续1值,以确定我刚才看到的重置是来自重置控制器的重置还是虚假重置

我知道这是统计数据,可能与泊松分布有关,但我如何确定N个位中任意X个连续位为1的概率


附言:是的。我知道4-val RTL模拟。我们也在这样做,但一些Verilog构造在传播X和Z时没有足够的悲观情绪。

好的,我发现:

p=1-Q(X)

在哪里

Q(X)=[1-1/2(Z)]/[(X+1-XZ)x1/2xz^(X+1)]

在哪里

Z=1+(1/2)(1/2)^X+(X+1)[(1/2)(1/2)^X]^2+

这里有一些数学链接:


编辑:下面的内容没有回答问题,对不起。。。评论澄清了真正的问题是n位中x连续1的概率,而不仅仅是我假设的简单事情。 快速看一下这个:这可能就是你想要的——它似乎要计算出一个更大的托因科塞人群体中托因科塞人的概率,所以听起来很相似。但是已经很晚了,我很累,所以我还没有破解数学:)

过时的: 听起来你基本上是在处理二项式概率-参见

我必须承认我已经有20年没有做过计算了,所以有些生疏了

基本上,二项式允许您将事件发生多次的概率“相加”,每次只有两种可能的结果。 在你的情况下,顺序很重要,所以它应该像乘以概率一样简单
对于1位,它是50%
对于2位,它是50%^2=25%
3位为50%^3=12.5%

换个角度看,
1位只有2种可能的组合,其中一种是所有1=50%
2位有4种可能的组合(10、01、11、00),其中只有一种组合都是1-25%
3位有2^3=8个可能的组合,其中只有一个是全1,因此1/8=12.5%


所以。。。n位全部为1=1/(2^n)的概率。

您可以执行递归程序(python):

prob(x,n)给出了你想要的结果



如果您想快速测试一个位序列是否基于1的最长条纹是随机的,您可以使用一个事实,即N个位中预期的最长条纹为Θ(log(N))

此外,最长条纹超过r*log的概率₂(N) 位最多为1/N^(r-1),同样,最长条纹小于对数的概率₂(N) /r位最多为1/N^(r-1)


这些结果在

中“计数和概率”一章的“条纹”一节中得到。我的方法是定义一个FSA,它接受正确类型的位模式,然后模拟每个位数的模式。i、 e

import math

def prob(x,n,i=0):
    if i == x: return 1
    if (x+i) > n: return 0
    t = .5 * prob(x,n-1,i+1) + .5 * prob(x,n-1,i)
    return t
状态映射[]={
0=>{0->0;1->1;accepts=false},
1=>{0->0;1->2;accepts=false},
2=>{0->0;1->3;accepts=false},
3=>{0->3;1->3;accepts=true}
};
状态[t:0,s:0]=1.0;
状态[t:0,s:1]=0.0;
状态[t:0,s:2]=0.0;
状态[t:0,s:3]=0.0;
对于(t=0;t对于(s=0;如果比特概率是相关的,请告诉我,我会删除我的答案。我正在努力,但我也可以通过电子邮件发送IEEE论文的pdf。你有IEEE论文的链接吗?或者它们是在用户墙后面吗?我在原始帖子中加粗了“连续”关键字,但这对问题至关重要。我不想要任何X/N bits为1。我希望N位中的任何连续X位都为1。啊……这也使我的答案无效……我必须去思考一下这个问题——看看博弈论,这是一个众所周知的问题……似乎“算法简介”链接已断开(只需重定向到主页):(
import math

def prob(x,n,i=0):
    if i == x: return 1
    if (x+i) > n: return 0
    t = .5 * prob(x,n-1,i+1) + .5 * prob(x,n-1,i)
    return t
State state_map[] = {
    0 => { 0 -> 0; 1 -> 1; accepts = false },
    1 => { 0 -> 0; 1 -> 2; accepts = false },
    2 => { 0 -> 0; 1 -> 3; accepts = false },
    3 => { 0 -> 3; 1 -> 3; accepts = true }
};

state[t: 0, s: 0] = 1.0;
state[t: 0, s: 1] = 0.0;
state[t: 0, s: 2] = 0.0;
state[t: 0, s: 3] = 0.0;

for (t = 0; t < N; t++)
    for (s = 0; s<NUM_STATES; s++)
        state[t: t+1, s: state_map[s].0] += state[t, s] * .5
        state[t: t+1, s: state_map[s].1] += state[t, s] * .5

print "Probability: {0}", state[t: N, s: 3],