前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SystemVerilog Downcast:从悬崖跳下去之前确定自己真的会飞

SystemVerilog Downcast:从悬崖跳下去之前确定自己真的会飞

作者头像
AsicWonder
发布2020-06-24 16:34:11
6600
发布2020-06-24 16:34:11
举报

想象一种具有飞行能力的people,其他people都无法飞行。people肯定不想他们跳下悬崖摔个稀巴烂,才发现自己不会飞。所以在从悬崖跳下去之前,需要预警确保该people是否具有飞行能力。

在SystemVerilog中也是一样,需要在仿真开始之前获得编译错误信息,不希望因为错误赋值导致仿真执行两天后突然中断。在将基类句柄赋值给子类句柄时,需要显式向下转换(downcast)。

在下面的people示例中,使用fly()方法明确该people具有飞行的能力。将基类people句柄赋值给一个子类people句柄成为称为向下转换(downcast)

代码语言:javascript
复制
virtual class normal_people;
…
endclass: normal_people

class flying_people extends normal_people;
  virtual function void fly();
    . . .
  endfunction
endclass:flying_people

module top;
task fly_if_you_can(normal_people peoples[]) ;
  fly_ people this_people
  for(int i=0;i<peoples.size();i++)
    begin
      // peoples[i].fly(); a compile-time error!
      if($cast(this_people, peoples[i]))
    this_ people.fly();
    end
endtask
endmodule :top

UVM面试题(66-73)(继前文)

66、什么是virtual sequence和virtual sequencer ?

virtual sequence是一个包含和执行多个子sequence的容器,virtual sequencer是包含其他sequencer的容器以使得virtual sequence中的每个子sequence都能在相应的sequencer上获得执行。

67、 `uvm_do 和 `uvm_send 有什么区别?

`uvm_do自动地创建、随机化和发送新的对象,`uvm_send用于发送已经完成创建和随机化之后的对象 68、我们可以在UVM中自定义phase么?

可以在UVM中自定义phase,然后插入到已有的phase之间,自定义phase继承自uvm_task_phase,需要实现其中的exec_taskexec_func方法。

69、RAL backdoor和frontdoor访问有什么区别?

backdoor访问:通过RTL信号路径访问,不消耗仿真时间

frontdoor访问:通过数据总线协议访问,消耗仿真时间

70、 set_config_* 和 uvm_config_db 有什么不同?

set_config_*可以映射到相应的uvm_config_db:

代码语言:javascript
复制
set_config_int(…)=>uvm_config_db#(uvm_bitstream_t) ::set(cntxt,…)
set_config_string(…)=>uvm_config_db#(string) ::set(cntxt,…)
set_config_object(…)=>uvm_config_db#(uvm_object) ::set(cntxt,…)

71、如何在component或者sequence中访问DUT中的信号?

接口信号可以通过指向具体interface的virtual interface访问,DUT内部信号可以通过信号路径访问

72、如何调试UVM中config_db的名称或者路径不匹配的问题?

使用+UVM_CONFIG_DB_TRACE获得set/get信息

73、如何连接monitor和scoreboard、driver和sequencer ?

使用analysis port在connect phase连接monitor和scoreboard。driver具有一个seq_item_port,可以在agent的connect phase中连接到sequencer的seq_item_export

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字芯片实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档