SystemVerilog学习之路(9)— 枚举类型的随机化约束

本文介绍了如何在SystemVerilog中对枚举类型进行随机化,并通过示例展示了添加约束的具体方法。在给定的代码示例中,`transaction`类定义了一个枚举类型`burst_size_t`,并对其进行了随机化约束,确保`length`在特定范围内,`burst_size`限制在枚举类型的特定值。通过`randomize()`函数和`with`语句实现这一目标,最后在测试模块中展示随机化结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SystemVerilog学习之路(9)— 枚举类型的随机化约束

一、前言

在SystemVerilog中我们经常用到枚举类型,同样的我们也会对其进行随机化

二、代码

编写代码如下所示:

class transaction;
    typedef enum {
        SIZE_8BIT,
        SIZE_16BIT,
        SIZE_32BIT,
        SIZE_64BIT,
        SIZE_128BIT
    } burst_size_t;
    rand burst_size_t burst_size;
    rand int langth = 0;
    string name;

    function new(string name="transaction");
        this.name=name;
    endfunction

    constraint cstr{
        langth inside {[1:9]};
    }

endclass

module tb_top;

    initial begin
        int i=0;
        transaction tr;
        tr = new("tr");

        for(i=0; i<10; i++) begin
            tr.randomize() with {   langth < 5;
                                    burst_size inside { transaction::SIZE_8BIT, 
                                                        transaction::SIZE_128BIT};    
                                };
            
            $display("****************************************");
            $display("this is the %0d times randomize.", i);
            $display("tr.burst_size:", tr.burst_size);
            $display("tr.langth:", tr.langth);
        end

        $finish(2);
    end

endmodule

三、运行

运行结果如下所示,可以看到我们可以成功将其随机化并添加约束
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值