【前端验证】关于那道经典概率题,用UVM环境来仿真下是男孩的概率

在抖音上一直有一道争论不休的概率题:一个家庭有两个孩子,已知一个是男孩,另外一个也是男孩的概率是多大?A.1/2 B.1/3

对于概率论这个东西吧,我承认学的比较一般,尤其也没考过研所以对于大部分概率题是不敢去插嘴的。不过这个题感觉我又行了!

我秉承的观点是,概率是对大量随机事件分布统计结果的归纳与数学化。所以个人观点,就是把所有有两个孩子的家庭邀请过来,请两个女孩的家庭先回去,然后统计剩下这些有一个男孩的家庭数量a,再统计另外一个也是男孩的数量b,然后用b/a就得到了最终的概率。

鉴于芯片验证环境就是使用大量随机来模拟真实环境的,那么不妨我们用UVM的仿真环境来实测一下。使用 gen_uvm_agent 生成一个测试环境,那么不如我们就把两个孩子起名信号boy为0代表女孩为1代表男孩,之后根据题目进行一下约束:

rand bit [2 -1:0] boy;

constraint boy_transaction::boy_cons{
    |boy[1:0] == 1'b1;
}

约束也很简单,有一个是男孩那就是两个孩子“或”在一起是1就可以了,除此之外再没有其他的限制。那么接下来,让我们收集10000个家庭的情况也就是发10000个包,在driver中进行统计:

            if(req.boy[1:0] == 2'b11)begin
                boy_boy_cnt++;
            end

统计什么也很简单,就统计“2'b11”的家庭数量看看另一个也是男孩的总数是多少,然后在仿真结束后把boy_boy_cnt的数量打出来!

很显然,统计结果和我们的预期是一点都一样的:

UVM_INFO /home/xiaotu/Git_Path/gen_uvm_agent/gen_uvm_agent/boy_utils/src/boy_scb.sv(54) @ 1967530000: uvm_test_top.env.scb [boy_scb] Compare SUCCESSFULLY
boy-boy cnt = 3331
UVM_INFO /tools/synopsys/vcs/vcs-mx_vL-2016.06/etc/uvm-1.2/base/uvm_report_server.svh(894) @ 1968890000: reporter [UVM/REPORT/SERVER] 

显然,真实的统计结果就是10000个满足“一个家庭有两个孩子,已知一个是男孩”的家庭里,有3331个家庭满足“另外一个也是男孩”,所以概率是1/3。

已经把自己说服了(*^▽^*)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼德兰的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值