File: automodport_if.v

package info (click to toggle)
verilog-mode 20161124.fd230e6-2
  • links: PTS, VCS
  • area: main
  • in suites: buster, stretch
  • size: 3,764 kB
  • ctags: 5,143
  • sloc: lisp: 12,430; perl: 293; makefile: 146; sh: 35; fortran: 2
file content (67 lines) | stat: -rw-r--r-- 2,202 bytes parent folder | download
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
59
60
61
62
63
64
65
66
67
interface automodport_if
( input logic clk,
  input logic rst_n
);

   //----------------------------------------------------------------------------------------
   // Group: Signals
   logic 		req_val;
   logic [63:0] 	req_dat;
   logic 		req_credit;

   logic [1:0] 		rsp_cmd;
   logic [63:0] 	rsp_data;
   logic 		rsp_credit;
   
   logic 		in_pure;
   logic 		out_pure;
   logic		manually_listed;

  //----------------------------------------------------------------------------------------
   // Group: Clocking blocks
   clocking req_mon_cb @(posedge clk);
      input 		rst_n;
      input 		req_val;
      input 		req_dat;
      input 		req_credit;
      input		manually_listed;
  endclocking : req_mon_cb

   clocking rsp_drv_cb @(posedge clk);
      input 		rst_n;
      output 		rsp_cmd;
      output 		rsp_data;
      input 		rsp_credit;
   endclocking : rsp_drv_cb

   //----------------------------------------------------------------------------------------
   // Group: Modports
   modport req_mon_mp(clocking req_mon_cb);
   modport rsp_drv_mp(clocking rsp_drv_cb, import rsp_reset);
   modport pure_mp(input in_pure, output out_pure);

   //----------------------------------------------------------------------------------------
   // Group: Methods
   function void rsp_reset();
      rsp_cmd = 2'b0;
      rsp_data = 64'b0;
   endfunction : rsp_reset

   //----------------------------------------------------------------------------------------
   // Group: Assertions
   logic [1:0] 		cmd_m1;

   always @(posedge clk) begin
      cmd_m1 <= rsp_cmd;
      if(rst_n) begin
         if($isunknown(req_val))                  `cn_err_intf(("Signal req_data_cycle is an X."));
         if(req_val==1'b1 & $isunknown(req_data)) `cn_err_intf(("Signal req_data is an X."));
         if($isunknown(req_credit))               `cn_err_intf(("Signal req_credit is an X."));

         if($isunknown(rsp_cmd))                  `cn_err_intf(("Signal rsp_cmd is an X."));
         if(cmd_m1!=2'b0 & $isunknown(rsp_data))  `cn_err_intf(("Signal rsp_data is an X."));
         if($isunknown(rsp_credit))               `cn_err_intf(("Signal rsp_credit is an X."));
      end
   end
   
endinterface