当前位置: 首页 > news >正文

昆明百度网站建设三合一模板网站

昆明百度网站建设,三合一模板网站,网站建站网站 小说,昆明专业网站排名推广一、装饰器模式 装饰器模式(Decorator)是一种结构化软件设计模式#xff0c;它提供了一种通过向类对象添加行为来修改类对象的方法#xff0c;而不会影响同一类的其它对象行为。该模式允许在不修改抽象类的情况下添加类功能。它从本质上允许基类代码对不可预见的修改具有前瞻…一、装饰器模式 装饰器模式(Decorator)是一种结构化软件设计模式它提供了一种通过向类对象添加行为来修改类对象的方法而不会影响同一类的其它对象行为。该模式允许在不修改抽象类的情况下添加类功能。它从本质上允许基类代码对不可预见的修改具有前瞻性。 对于经常需要在最后时刻新增特性的验证工作装饰器模式的这个特性非常强大。该模式适用于通过向复杂数据项应用额外的约束集来对它们进行建模或者在原先数据上添加额外数据。与类继承相比它的主要优点是可以实现向类对象中动态添加或删减行为。在工程中该技术被广泛用于实现受约束随机激励的生成。 举个例子如下图我们在验证环境中打算开发一个Arm指令生成器原先RTL只支持基本的load和store指令过段时间可能又支持atomic指令再过段时间可能又支持SVE指令了这样就容易造成我们需要对以往的代码不停地修改。更令人崩溃的是RTL又搞了其它版本有的版本只支持load/store指令和SVE指令有的版本只支持atomic和SVE指令等等。对于这些行为第一个跳入脑海的想法可能就是扩展它所属的类在新的类中添加新功能但这种方式会使代码量迅速膨胀而且可能会破坏之前写好的代码。 针对以上情况我们可以考虑使用装饰器模式。要构建装饰器设计模式需要定义几个主要部分 被包装对象它声明了被包装对象的共用接口和基本行为装饰器会在此基础上添加新的行为。抽象装饰器定义了基本的装饰器它拥有一个指向被被包装对象的引用成员变量因此会将操作委派给被包装的对象。具体装饰器定义了可动态增减到被包装对象的额外行为。具体装饰器会重写装饰基类的方法并在调用父类方法之前或之后进行额外的行为。 下图使用UML类图提供了上述三者之间的图形化关系 装饰器设计模式背后的主要思想是各种具体装饰器可以在仿真过程中处于活动状态灵活地为被包装对象增加新功能。而且可以指令任意组合的具体装饰器同时处于活动状态这样就可以在任意给定时刻向被包装的对象添加任何期望的激励组合。 二、参考代码 指令生成器的装饰器模式参考代码如下 class common_base;int pe;int scen_weight[string];int weight_mul 1;virtual function void set_scen_weight(common_base _h);endfunction : set_scen_weightvirtual function void print_msg();foreach ( scen_weight[t_scen] ) begin$display(scen[%s]%0d is added, t_scen, scen_weight[t_scen]);endendfunction : print_msgendclass : common_baseclass base_decorator extends common_base;common_base base;virtual function void set_scen_weight(common_base _h);add();base _h;foreach ( scen_weight[t_scen] ) beginif ( base.scen_weight.exists(t_scen) ) beginuvm_error(decorator, $psprintf(The scen(%s) has exists, t_scen))end else beginbase.scen_weight[t_scen] scen_weight[t_scen] * weight_mul;endendprint_msg();endfunction : set_scen_weightvirtual function void add();endfunction : addendclass : base_decoratorclass base_ldst_scen_wei extends base_decorator;virtual function void add();scen_weight[load] 10;scen_weight[store] 10;endfunction : addendclass : base_ldst_scen_weiclass atomic_scen_wei extends base_decorator;virtual function void add();scen_weight[atomic_add] 5;scen_weight[atomic_sub] 5;endfunction : addendclass : atomic_scen_weiclass sve_scen_wei extends base_decorator;virtual function void add();scen_weight[gather] 8;scen_weight[scatter] 8;endfunction : addendclass : sve_scen_wei 模拟测试代码如下 class scen_weight_gen;rand bit base_ldst_scen;rand bit atomic_scen;rand bit sve_scen;function void gen();common_base base new();common_base common;uvm_info(, $psprintf(base_ldst_scen:%b, atomic_scen:%b, sve_scen:%b, base_ldst_scen, atomic_scen, sve_scen), UVM_LOW)if ( base_ldst_scen ) begincommon base_ldst_scen_wei::new();common.set_scen_weight(base);endif ( atomic_scen ) begincommon atomic_scen_wei::new();common.weight_mul 3;common.set_scen_weight(base);endif ( sve_scen ) begincommon sve_scen_wei::new();common.set_scen_weight(base);endendfunction : genendclass : scen_weight_gen 输出仿真日志如下 base_ldst_scen:1, atomic_scen:1, sve_scen:0| # scen[load]10 is added| # scen[store]10 is added| # scen[atomic_add]5 is added| # scen[atomic_sub]5 is added 从仿真结果可以看出scen_weight_gen类随机后base_ldst_scen为1atomic_scen为1sve_scen为0因此只有load/store指令和atomic指令功能被添加到指令生成器中。 好了今天就写到这里了。下次给大家分享下设计模式中策略模式(Strategy)在芯片验证中的应用。它和装饰器模式很类似区别是装饰器模式可让你更改对象的外表但策略模式则让你能够更改其本质。
http://www.zqtcl.cn/news/768613/

相关文章:

  • 以下不是网站开发语言的哪项工信部域名备案管理系统
  • 优化网站搭建创业项目网站建设规划
  • 温岭网站开发网站建设程序文件
  • 有什么网站可以做深圳初二的试卷练习商城网站功能
  • 网站托管就业新闻今天的最新新闻
  • 重庆网站建设方案书国外做电商平台的网站有什么
  • 微信扫一扫登录网站如何做网络平台怎么弄
  • 怎么做网页模板展示网站株洲网红餐厅
  • 优秀学校网站设计正规抖音代运营公司排名
  • 网站的网站建设公司太原中小企业网站制作
  • 北京网站建设搜q.479185700模特公司网站模板
  • 网站设置什么意思wordpress 专题页面
  • 网站推广要具备什么购物网站多少钱
  • 重庆免费做网站在线做ppt
  • wordpress固定链接设置404阳江seo优化
  • 响应网站模板下载wordpress恢复网站
  • 公司网站建设的定位语要怎么取网站开发中常见的注册界面
  • 免费企业查询网站wordpress侧边栏加载过慢
  • 网站写好了怎么做后台管理链接是什么意思
  • 低价格制作网站wordpress 注册用户
  • 免费发布租房信息网站wordpress页面回收站
  • 长网页网站信息技术教案 建设我们的网站
  • 免费网站建设可信吗wordpress divi布局
  • 网站百度不收录wordpress偽靜態
  • 沈阳php网站建网站需要学什么
  • WordPress多站点绑定域名百度帐号注册
  • 网站营销队伍网站建设明薇通网络
  • 做网站的公司重庆万网x5 wordpress
  • 印刷设计营销网站网站设置成黑白
  • 百度自助建站官网上海徐汇网站建设