hierarchical sequence简单代码理解

hierarchical sequence简单代码理解

class bus_trans extends uvm_sequence_item;
rand bit write;
rand int data[];
rand int length;
rand int addr;
rand int delay;
static int id_num;
constraint cstr{
data.size()==length;
foreach(data[i]) soft data[i]==i;
soft addr=='h100;
soft write==1;
delay inside{[15]};
}
`uvm_object_utils(bus_trans)   //注册bus_trans

`uvm_object_utils_begin(bus_trans)  //域的自动化
`uvm_field_int(write,UVM_ALL_ON)
`uvm_field_array_int(data,UVM_ALL_ON) //动态数组域的自动化要加array
`uvm_field_int(length,UVM_ALL_ON)
`uvm_field_int(addr,UVM_ALL_ON)
`uvm_field_int(delay,UVM_ALL_ON)
`uvm_object_utils_end

function new(string name="bus_trans");  //new函数
super.new(string name);
endfunction
endclass

class flat_seq extends uvm_sequence; 
rand int length;
rand int addr;
`uvm_object_utils(flat_seq)

`uvm_object_utils_begin(flat_seq)
`uvm_field_int(length,UVM_ALL_ON)
`uvm_field_int(addr,UVM_ALL_ON)
`uvm_object_utils_end

function new(string name="flat_seq");
super.new(string name);
endfunction

task body();
bus_trans temp;
temp=new();
temp.randomize() with{
length==local::length;   //通过task body()来传递flat_sequence里的length和addr,
                         //进而改变嵌套里面的bus_tranns的length和addr
addr==local::addr:
};
temp.print();
endtask
endclass

 class hier_seq extends uvm_sequence;
`uvm_object_utils(hier_seq)
function new(string name="hier_seq");
super.new(name);
endfunction

task body();
bus_trans t1,t2;  //嵌套两个sequence_item和sequence
flat_seq s1,s2;
`uvm_do_with(t1,{length==2;})  //`uvm_do_with实现创建,随机化和传递三个作用
fork
`uvm_do_with(s1,{length==5};)
`uvm_do_with(s2,{length==8};)
join
`uvm_do_with(t2,{length==3};)
endtask
endclass

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
构造hierarchical矩阵的代码可以分为以下几个步骤: 1. 定义一个函数来生成一个基本的块状矩阵,比如一个对角线矩阵或者一个三角矩阵。 ```python import numpy as np def generate_base_matrix(n): # 生成一个对角线矩阵 base_matrix = np.diag(np.ones(n)) return base_matrix ``` 2. 定义一个函数来生成一个完整的hierarchical矩阵,这个矩阵可以由多个基本块状矩阵组成。 ```python def generate_hierarchical_matrix(n, k): # 生成一个基本块状矩阵 base_matrix = generate_base_matrix(n) # 初始化hierarchical矩阵 hierarchical_matrix = base_matrix # 逐层添加基本块状矩阵 for i in range(k-1): # 将基本块状矩阵复制4次 matrix_1 = base_matrix.copy() matrix_2 = base_matrix.copy() matrix_3 = base_matrix.copy() matrix_4 = base_matrix.copy() # 将4个基本块状矩阵拼接成一个更大的矩阵 hierarchical_matrix = np.block([[matrix_1, matrix_2], [matrix_3, matrix_4]]) # 将更大的矩阵作为新的基本块状矩阵 base_matrix = hierarchical_matrix return hierarchical_matrix ``` 在这个函数中,我们首先生成一个基本的块状矩阵,然后通过复制和拼接这个基本块状矩阵来构造一个更大的hierarchical矩阵。这个过程重复k-1次,最终生成一个n^k x n^k的hierarchical矩阵。 3. 调用函数来生成hierarchical矩阵。 ```python n = 2 k = 3 hierarchical_matrix = generate_hierarchical_matrix(n, k) print(hierarchical_matrix) ``` 这个代码会输出一个3x3的hierarchical矩阵: ``` [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]] ``` 注意,这里我们只是生成了一个简单的全1矩阵作为基本块状矩阵,实际上基本块状矩阵和hierarchical矩阵的生成方式可以根据具体问题进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值