OVM¤ò»È¤Ã¤Æ74163-counter¤Î¥Æ¥¹¥È´Ä¶¤òºî¤Ã¤Æ¤ß¤¿¡££
|
µ×¤·¤Ö¤ê¤ËOVM¤Ç¤¹¡£
¤³¤Î¤È¤³¤íVH¡ûL¤Ë½±¤ï¤ì¤Æ¤¤¤ÆSV¤ò¤¤¤¸¤Ã¤Æ¤¤¤Þ¤»¤ó¡£¡£´À¡Ë
¤È¸À¤¦¤³¤È¤ÇÆâÍÆ¤ÎÇö¤¤½ñ¤¹þ¤ß¤Ë¤Ê¤ê¤Þ¤¹¡£¡£¤´¤á¤ó¤Ê¤µ¤¤º£²ó¤Ïcounter_driver¤òºÜ¤»¤è¤¦¡£¡£ // 74163 conter driver
// $Id
class counter_driver extends ovm_driver #(counter_item) ;
protected virtual counter_if counter_if0 ;
`ovm_component_utils(counter_driver)
function new(string name, ovm_component parent) ;
super.new(name, parent) ;
endfunction : new
function void assign_vi(virtual interface counter_if counter_if) ;
this.counter_if0 = counter_if ;
endfunction : assign_vi
task run() ;
reset_signals() ;
while(1) begin
#10 ;
seq_item_port.get_next_item(req) ;
drive_signals(req) ;
req.print ;
seq_item_port.item_done() ;
end
endtask : run
virtual protected task reset_signals() ;
counter_if0.reset() ;
endtask : reset_signals
virtual protected task drive_signals(counter_item item) ;
counter_if0.interval(item.interval) ;
counter_if0.data_load(item.data) ;
counter_if0.count(item.enable) ;
#10 ;
endtask : drive_signals
endclass : counter_driver
Á°²óºÜ¤»¤¿counter_seq_lib.sv¤Î `ovm_do(req)¤ÇÁ÷¤ê½Ð¤·¤¿req¤ò seq_item_port.get_next_item(req) ;¤Ç¼õ¤±¼è¤ë¡£¡£ ¼õ¤±¼è¤Ã¤¿req¤òdrive_signals¤Ç¥«¥¦¥ó¥¿¶îưÍѤο®¹æ¤ËÊÑ´¹¤·¤Æ ¥«¥¦¥ó¥¿¡¼(conter_if¤ÎÀè)¤òư¤«¤¹¡£ task run() ;
reset_signals() ;
while(1) begin
#10 ;
seq_item_port.get_next_item(req) ;
¤Èwhile¤Ç̵¸Âloop¤·¤Æ¤¤¤ë¤Î¤Çreq¤¬ÅþÃ夷¤¿Ê¬¤À¤±¥«¥¦¥ó¥¿¡¼¤ò¶îư¤Ç¤¤Þ¤¹¡£req¤Ëprint¤òÉÕ¤±¤ë¤Èreq¤ÎÆâÍÆ¤ò¥Õ¥©¡¼¥Þ¥Ã¥ÈÉÕ¤¤Çɽ¼¨¤·¤Æ¤¯¤ì¤ë¤è¡£¡£ Ãí¡Ë¤³¤ÎÊÕ¤¬OVMʬ¤«¤ê¤ä¤¹¤¤ÊØÍøµ¡Ç½¤Î°ì¤Ä¤«¡£¡£ ¾ÜºÙ¤Ïcounter_item¤Î¿Æovm_sequence_item¤ò¸«¤Æ¤Í¡£¡Ê¥½¡¼¥¹¤ò¸«¤ë¤ó¤À¤è¡£¡£´À¡Ë systemVerilog OVM¡¡LSI¸¡¾Ú ²óÏ©¸¡¾Ú
|
¥³¥á¥ó¥È¡Ê0¡Ë
¤³¤Îµ»ö¤ÎURL: http://blogs.yahoo.co.jp/sawaragikun/26907469.html

