SystemVerilog Downcast是什么

本篇内容介绍了“SystemVerilog Downcast是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

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

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

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

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_cannormal_people peoples[]) ;
 fly_ people this_people
 forint i=0;i<peoples.size);i++)
   begin
     // peoples[i].fly); a compile-time error!
     if$castthis_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:

set_config_int…)=>uvm_config_db#uvm_bitstream_t) ::setcntxt,…)set_config_string…)=>uvm_config_db#string) ::setcntxt,…)set_config_object…)=>uvm_config_db#uvm_object) ::setcntxt,…)

  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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注