System Verilog随机和约束

本文探讨了Verilog中随机数组、动态数组(d_array)和队列(queue)的实现,包括如何使用`rand`修饰符进行随机化,以及如何应用约束条件如大小限制。示例展示了如何在`my_trans.sv`和`tb.sv`文件中使用这些概念,并通过`Makefile`进行编译和运行。同时,讲解了`rand`与`randc`的区别,以及在`my_trans`类中的属性和函数操作。

随机数组和队列,约束动态数组和队列
示例1
my_trans.sv文件

class my_trans;
    rand bit [3:0]   s_array[7];//非合并数组
    rand bit [3:0]   d_array[ ];//动态数组,使用rand修饰,每次随机化这个类,这个变量都会赋一个值
    rand bit [3:0]   queue[$];//队列,$代表最后一个元素

    constraint  d_array_cons {
   
   d_array.size() > 5; d_array.size() < 10; }//size()内建方法返回数组的当前尺寸
    constraint  queue_cons {
   
   queue.size()==3;}//size()返回队列中元素的数目,队列为空返回为0;
    function void display();
        $display("s_array = %p", s_array);//%p各式符输出指针指向的地址值
	foreach (d_array[i])
	    $display("d_array[d_array[%0d] = 0x%0h", i, d_array[i]);
        $display("queue = %p", queue);
    endfunction
endclass

tb.sv文件

module tb;
my_trans trans;//例化
initial begin
    trans = new()
SystemVerilog中,可以使用随机化类来为二维数组添加随机约束。以下是一个示例代码,展示了如何定义一个包含二维动态数组的类,并为其元素大小添加随机约束。 ### 示例代码 ```systemverilog class two_dim_array; // 定义一个二维动态数组 rand bit [7:0] array2D[][]; // 添加约束,限制数组的大小元素值 constraint size_c { array2D.size() inside {[2:5]}; // 第一维大小在2到5之间 foreach (array2D[i]) { array2D[i].size() inside {[3:6]}; // 第二维大小在3到6之间 } } constraint elem_c { foreach (array2D[i][j]) { array2D[i][j] <= 8'hFF; // 每个元素的值不超过8位最大值 } } // 显示数组内容的函数 function void display(); $display("2D Array Contents:"); foreach (array2D[i]) begin foreach (array2D[i][j]) begin $display("array2D[%0d][%0d] = %h", i, j, array2D[i][j]); end end endfunction endclass program test_two_dim_array; two_dim_array my_array; initial begin my_array = new(); if (my_array.randomize()) begin my_array.display(); end else begin $display("Randomization failed"); end end endprogram ``` ### 代码说明 - **类定义**:`two_dim_array` 类包含一个二维动态数组 `array2D`,并为该数组添加了随机约束。 - **大小约束**:通过 `size_c` 约束,限制了数组的第一维二维的大小范围。 - **元素约束**:通过 `elem_c` 约束,确保每个元素的值不超过8位的最大值(`8'hFF`)。 - **随机化**:在 `test_two_dim_array` 程序中,创建 `two_dim_array` 的实例,并调用 `randomize()` 方法进行随机化。 - **显示函数**:`display()` 函数用于打印数组的内容,方便调试验证。 通过这种方式,可以在SystemVerilog中灵活地为二维数组添加随机约束,并生成符合要求的测试数据[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值