0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一种可重用constraint的实现方法

sanyue7758 来源:验证芯发现 2023-05-04 10:17 次阅读

近期看到一种关于约束的复用方法,总结分享如下。

在不同的用例中,随机参数的随机约束不会完全一致,最典型的就是错误或者异常用例的非法取值约束。对于这种不同的约束,常见的处理办法就是继承,并重写原有参数的约束,如下所示。

class item;
rand bit[3:0] A;
constraint c{
    A > 0;
}
//....
endclass

class abnormal_item;
constraint c{
    A == 0;//覆盖原有的A>0约束
}
//....
endclass

除了存在可能的过度继承问题,继承方式是一种"静态"的is-a关系,一旦abnormal_item确定后,参数的约束就已确定,不具备动态添加或者删除约束的能力。

到这里,提一下Decorator Pattern(装饰者模式)。Decorator Pattern大致是一种这样的思路:

在Decorator Pattern的结构中,可以动态地给一个对象添加新的功能,同时又不改变其结构,将对象的行为分为核心功能和可选功能。核心功能指对象最基本的职责,而可选功能则是在不改变核心职责的情况下增加的功能。通过使用装饰者模式,可以动态地将可选功能装饰在核心功能之上,使对象的功能更加灵活......

借鉴类似的思路,可以将随机参数和其约束分离开来,将随机约束视作对原参数的"装饰",进而达到动态、可复用随机约束的目的。

一个实例的类图结构如下:

660c26f2-e7e3-11ed-ab56-dac502259ad0.png

在这种结构下,大致分为两层:
第一层是包含随机参数的激励定义层,item仅包含随机参数的声明,不包含参数的约束内容。constrainted_item继承于item,不包含直接的参数约束,而是通过add_instance_cons方法,动态的添加对随机参数的约束。
第二层是约束实现层,抽象类abstract_constraint仅包含item类,不实现对tem参数的具体约束,不同的约束由可重用的子类实现,即图中的reusable_cons实现。

相关参考代码如下。

随机参数定义:

class item;
    rand int val;
endclass

class constrained_item extends item;
    `constraints_utils(item)
endclass

抽象和约束实现定义:

virtual class abstract_constraint #(type T = int);

  protected T object;

  function void set_object(T object);
    this.object = object;
  endfunction
endclass

class only_even_values extends abstract_constraint #(item);
    constraint c {
      object.val % 2 == 0;
    }
endclass

动态添加约束和随机:

initial begin
    automatic constrained_item i = new();
    automatic only_even_values only_even = new();
    i.add_instance_constraint(only_even);

    repeat (100) begin
      if (!i.randomize())
        $fatal(0, "Randomization failure");
      //....
    end
end

上述的constraints_utils实现代码如下:

`define constraints_utils(TYPE) 
...
  local rand constraints::abstract_constraint #(TYPE) instance_constraints[$]; 
  function void add_instance_constraint(constraints::abstract_constraint #(TYPE) c); 
    constraints::abstract_constraint #(TYPE) c_copy = new c; 
    c_copy.set_object(this); 
    instance_constraints.push_back(c_copy); 
  endfunction 
...

可以看到,constrained_item内部包含了一个rand类型的instance_constraints队列,用于存储分离约束的句柄。同时only_even_values内也包含了指向constrained_item的句柄。当constrained_item进行randomize时,instance_constraints队列也会随机,在only_even_values内完成对constrained_item的参数约束。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Constraint
    +关注

    关注

    0

    文章

    2

    浏览量

    6998

原文标题:一种可重用constraint的实现方法:参数/随机约束分离

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言接口与实现--创建重用软件的技术

    C语言接口与实现--创建重用软件的技术
    发表于 11-07 17:17

    c接口和实现:创建重用软件的技术 源码下载

    c接口和实现:创建重用软件的技术 源码分享关于如何设计、实现和有效使用库函数的指南少之又少(如果说还有的话)。这本书作填补了这个空白。它可以作为下
    发表于 02-07 21:21

    一种基于FPGA的DSU硬件实现方法

    摘要:为了实现对非相干雷达的接收相参处理,基于数字稳定校正(DSU)的原理,采用ALTERA公司的StratixⅡ系列芯片和VHDL编程语言,设计了一种基于FPGA的DSU硬件实现方法
    发表于 06-28 08:27

    一种高档FPGA重构配置方法

    求大神分享一种高档FPGA重构配置方法
    发表于 04-29 06:16

    经典C语言接口与实现:创建重用软件的技术

    )倡导基于接口的C语言设计理念及其实现技术,深入详细地描述了24个C语言接口及其实现。C语言接口与实现(创建重用软件的技术)通过叙述如何用
    发表于 09-25 06:42

    μClinux下实时任务的一种实现方法

    文中以ARM7 TDMI 处理器为例,阐述了μClinux 进程调度的原理。根据该原理,提出了一种在μClinux 平台下实现实时任务的设计方法,这种方法较简单,易于
    发表于 08-29 09:19 11次下载

    一种特殊阵列实现DOA估计的方法

    一种特殊阵列实现DOA估计的方法:提出了一种基于特殊阵列形式实现doa估计的方法,在均匀线性阵列
    发表于 03-18 16:18 19次下载

    Boost电路的一种软开关实现方法

    Boost电路的一种软开关实现方法 摘要:提出了一种Boost电路软开关实现方法
    发表于 07-11 10:12 7898次阅读
    Boost电路的<b class='flag-5'>一种</b>软开关<b class='flag-5'>实现</b><b class='flag-5'>方法</b>

    电池容量计的一种实现方法

    电池容量计的一种实现方法 摘要:介绍一种计量电池容量的方法,即对电池充进能量和放出能量进行计算并乘以相应的损失系数从而指示电池的容量。采用
    发表于 07-21 14:41 920次阅读
    电池容量计的<b class='flag-5'>一种</b><b class='flag-5'>实现</b><b class='flag-5'>方法</b>

    一种新型SVPWM调制方法的研究与实现

    一种新型SVPWM调制方法的研究与实现
    发表于 03-30 14:40 7次下载

    一种基于DSP脉宽调制电路实现方法的研究

    一种基于DSP脉宽调制电路实现方法的研究
    发表于 06-17 16:48 14次下载

    《C语言接口与实现:创建重用软件的技术》电子教材免费下载

    《C语言接口与实现:创建重用软件的技术》概念清晰、实例详尽,是本有关设计、实现和有效使用C语言库函数,掌握创建
    发表于 08-27 08:00 32次下载

    一种新型量测影像与GPS、IMU组合的导航方法

    本文提出了一种基于量测影像与卫星、惯性组合导航方法,研究了系统框架、实现原理和关键技术。
    的头像 发表于 01-01 13:37 8261次阅读
    <b class='flag-5'>一种</b>新型<b class='flag-5'>可</b>量测影像与GPS、IMU组合的导航<b class='flag-5'>方法</b>

    C语言接口与实现创建重用软件的技术PDF电子书免费下载

    《C语言接口与实现:创建重用软件的技术》概念清晰、实例详尽,是本有关设计、实现和有效使用C语言库函数,掌握创建
    发表于 05-11 08:00 18次下载
    C语言接口与<b class='flag-5'>实现</b>创建<b class='flag-5'>可</b><b class='flag-5'>重用</b>软件的技术PDF电子书免费下载

    一种基于缓存块重用信息的动态旁路策略

    非易失性存储器具有能耗低、扩展性强和存储密度大等优势,替代传统静态随机存取存储器作为片上缓存,但其写操作的能耗及延迟较高,在大规模应用前需优化写性能。提出一种基于缓存块重用信息的动
    发表于 04-29 15:48 4次下载
    <b class='flag-5'>一种</b>基于缓存块<b class='flag-5'>重用</b>信息的动态旁路策略