mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Systemverilog
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Systemverilog
		
	
	
	
	
	
| module test_pmp_coverage import cvw::*; #(parameter cvw_t P) (input clk);
 | |
| 
 | |
| // Ensure the covergroup is defined correctly
 | |
| covergroup cg_priv_mode @(posedge clk);
 | |
|     coverpoint dut.core.ifu.PrivilegeModeW {
 | |
|         bins user   = {2'b00};
 | |
|         bins superv = {2'b01};
 | |
|         bins hyperv = {2'b10};
 | |
|         bins mach   = {2'b11};
 | |
|     }
 | |
| endgroup
 | |
| 
 | |
| covergroup cg_PMPConfig @(posedge clk);
 | |
|     coverpoint dut.core.ifu.PMPCFG_ARRAY_REGW[0][0] {
 | |
|         bins ones    = {1};
 | |
|         bins zeros = {0};
 | |
|     }
 | |
| endgroup
 | |
| 
 | |
| 
 | |
| function bit [1:0] getPMPConfigSlice(int index);
 | |
|     return dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[index][4:3];
 | |
| endfunction
 | |
| 
 | |
| //if (P.PMP_ENTRIES > 0) begin : pmp
 | |
|     covergroup cg_pmpcfg_mode @(posedge clk);
 | |
|             coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[0][4:3] {
 | |
|                 bins off   = {2'b00};
 | |
|                 bins tor   = {2'b01};
 | |
|                 bins na4   = {2'b10};
 | |
|                 bins napot = {2'b11};
 | |
|             }
 | |
| 
 | |
| 
 | |
|             coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[1][4:3] {
 | |
|                 bins off   = {2'b00};
 | |
|                 bins tor   = {2'b01};
 | |
|                 bins na4   = {2'b10};
 | |
|                 bins napot = {2'b11};
 | |
|             }
 | |
| 
 | |
|             coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[2][4:3] {
 | |
|                 bins off   = {2'b00};
 | |
|                 bins tor   = {2'b01};
 | |
|                 bins na4   = {2'b10};
 | |
|                 bins napot = {2'b11};
 | |
|             }
 | |
| 
 | |
|             coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[3][4:3] {
 | |
|                 bins off   = {2'b00};
 | |
|                 bins tor   = {2'b01};
 | |
|                 bins na4   = {2'b10};
 | |
|                 bins napot = {2'b11};
 | |
|             }
 | |
| 
 | |
|             coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[4][4:3] {
 | |
|                 bins off   = {2'b00};
 | |
|                 bins tor   = {2'b01};
 | |
|                 bins na4   = {2'b10};
 | |
|                 bins napot = {2'b11};
 | |
|             }
 | |
| 
 | |
|             coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[5][4:3] {
 | |
|                 bins off   = {2'b00};
 | |
|                 bins tor   = {2'b01};
 | |
|                 bins na4   = {2'b10};
 | |
|                 bins napot = {2'b11};
 | |
|             }
 | |
| 
 | |
|             coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[6][4:3] {
 | |
|                 bins off   = {2'b00};
 | |
|                 bins tor   = {2'b01};
 | |
|                 bins na4   = {2'b10};
 | |
|                 bins napot = {2'b11};
 | |
|             }
 | |
| 
 | |
|             coverpoint dut.core.ifu.immu.immu.PMPCFG_ARRAY_REGW[7][4:3] {
 | |
|                 bins off   = {2'b00};
 | |
|                 bins tor   = {2'b01};
 | |
|                 bins na4   = {2'b10};
 | |
|                 bins napot = {2'b11};
 | |
|             }
 | |
|     endgroup
 | |
| //end
 | |
| 
 | |
| 
 | |
| // Ensure that the instantiation and sampling of covergroups are within the correct procedural context
 | |
| initial begin
 | |
|     cg_priv_mode privmodeCG = new();  // Instantiate the privilege mode covergroup
 | |
|     cg_PMPConfig pmpconfigCG = new(); // Instantiate the PMP config covergroup
 | |
|     cg_pmpcfg_mode pmpcfgmodeCG = new();
 | |
| 
 | |
|     forever begin
 | |
|         @(posedge clk) begin
 | |
|             privmodeCG.sample();  // Sample the privilege mode covergroup
 | |
|             pmpconfigCG.sample(); // Sample the PMP config covergroupi
 | |
| 	    pmpcfgmodeCG.sample();
 | |
|         end
 | |
|     end
 | |
| end
 | |
| 
 | |
| 
 | |
| endmodule
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |