本篇内容介绍了“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_task和exec_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