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


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

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

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

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

    1. rand bit [2 -1:0] boy;
    2. constraint boy_transaction::boy_cons{
    3. |boy[1:0] == 1'b1;
    4. }

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

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

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

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

    1. 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
    2. boy-boy cnt = 3331
    3. 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。

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

  • 相关阅读:
    flink-sql所有表连接器-1.14
    Linux shell编程学习笔记9:字符串运算 和 if语句
    Linux入门笔记-尚硅谷韩顺平-基础篇&实操篇
    二层网络数据转发模式
    VS2019中配置C++ OpenCV 4.5.4完整指南
    深入网络底层,了解Linux系统收发网络数据包的过程、原理、流程,附图文说明
    探索光模块的MSA多源协议
    [CISCN2019 华北赛区 Day1 Web1]Dropbox 1
    大数据Flink(七十四):SQL的滑动窗口(HOP)
    独立app开发和运行(使用篇)
  • 原文地址:https://blog.csdn.net/moon9999/article/details/126695640