我是靠谱客的博主 个性花瓣,这篇文章主要介绍@(posedge vif.clk) 【uvm】,现在分享给大家,希望可以做个参考。

在这里插入图片描述

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
`ifndef MY_DRIVER__SV `define MY_DRIVER__SV class my_driver extends uvm_driver#(my_transaction); virtual my_if vif; `uvm_component_utils(my_driver) function new(string name = "my_driver", uvm_component parent = null); super.new(name, parent); endfunction virtual function void build_phase(uvm_phase phase); super.build_phase(phase); if(!uvm_config_db#(virtual my_if)::get(this, "", "vif", vif)) `uvm_fatal("my_driver", "virtual interface must be set for vif!!!") endfunction extern task main_phase(uvm_phase phase); extern task drive_one_pkt(my_transaction tr); endclass task my_driver::main_phase(uvm_phase phase); vif.data <= 8'b0; vif.valid <= 1'b0; while(!vif.rst_n) @(posedge vif.clk); while(1) begin seq_item_port.get_next_item(req); $display("drv get next"); drive_one_pkt(req); seq_item_port.item_done(); end endtask task my_driver::drive_one_pkt(my_transaction tr); //红色标记进入 并开始 repeat(3) @(posedge vif.clk); byte unsigned data_q[]; int data_size; data_size = tr.pack_bytes(data_q) / 8; uvm_report_info(get_type_name(),$psprintf("data_size = %0d",data_size)); `uvm_info("my_driver", "begin to drive one pkt", UVM_LOW); repeat(3) @(posedge vif.clk); for ( int i = 0; i < data_size; i++ ) begin @(posedge vif.clk); //repeat(3) @(posedge vif.clk); 之后再等一个posedge vif.valid <= 1'b1; vif.data <= data_q[i]; //uvm_report_info(get_type_name(),$psprintf("drv loop = %0d",i)); end @(posedge vif.clk); vif.valid <= 1'b0; `uvm_info("my_driver", "end drive one pkt", UVM_LOW); endtask `endif

最后

以上就是个性花瓣最近收集整理的关于@(posedge vif.clk) 【uvm】的全部内容,更多相关@(posedge内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部