• 【前端验证】关于那道经典概率题,用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。

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

  • 相关阅读:
    ConfigurationManager姿势快闪
    Discord将切换到临时文件链接以阻止恶意软件传播
    Hutool:一行代码搞定数据脱敏
    requestAnimationFrame实现vue虚拟滚动插件
    Rust——包管理
    褶积合成地震记录
    mysql 求分组中位数、环比、同比、中位数的环比、同比
    Windows本地mysql 的安装教程(一步一步进行安装)
    力扣3.无重复字符的最长子串(JavaScript版本)
    亚马逊刷关键词软件——亚马逊鲲鹏系统
  • 原文地址:https://blog.csdn.net/moon9999/article/details/126695640