Module Definition
dashboard | hierarchy | modlist | groups | tests | asserts

Module : dual_port_router
SCORELINECONDTOGGLEFSM
73.75 100.00 84.62 36.65

Source File(s) :
/scratch/cs199-buw/UVM_Practice/Router_UVM/src/dual_port_router.sv

Module self-instances :
NAMESCORELINECONDTOGGLEFSM
tb_top.dut 73.75 100.00 84.62 36.65



Module Instance : tb_top.dut

Instance :
SCORELINECONDTOGGLEFSM
73.75 100.00 84.62 36.65


Instance's subtree :
SCORELINECONDTOGGLEFSM
73.75 100.00 84.62 36.65


Parent :
SCORELINECONDTOGGLEFSMNAME
87.50 100.00 75.00 tb_top


Subtrees :
NAMESCORELINECONDTOGGLEFSM
no children


Since this is the module's only instance, the coverage report is the same as for the module.
Line Coverage for Module : dual_port_router
Line No.TotalCoveredPercent
TOTAL3434100.00
ALWAYS3855100.00
ALWAYS501414100.00
ALWAYS711515100.00

37 always_ff @(posedge clk or negedge rst_n) begin 38 1/1 if (!rst_n) begin 39 1/1 ctrl_reg <= 32'h1; // Default: Enabled, Port A priority 40 1/1 end else if (reg_en && reg_we) begin 41 2/2 if (reg_addr == 4'h0) ctrl_reg <= reg_wdata; ==> MISSING_ELSE 42 end MISSING_ELSE 43 end 44 assign reg_rdata = (reg_addr == 4'h0) ? ctrl_reg : 45 (reg_addr == 4'h8) ? collision_cnt : 32'h0; 46 47 // --- Arbitration Logic (For Virtual Sequencer practice) --- 48 logic use_a; 49 always_comb begin 50 1/1 ready_a = 1'b0; 51 1/1 ready_b = 1'b0; 52 1/1 use_a = 1'b0; 53 54 1/1 if (ctrl_reg[0]) begin // If Global Enable is set 55 1/1 if (valid_a && valid_b) begin 56 1/1 use_a = !ctrl_reg[1]; // Use priority bit to decide 57 1/1 ready_a = use_a; 58 1/1 ready_b = !use_a; 59 1/1 end else if (valid_a) begin 60 1/1 use_a = 1'b1; 61 1/1 ready_a = 1'b1; 62 1/1 end else if (valid_b) begin 63 1/1 use_a = 1'b0; 64 1/1 ready_b = 1'b1; 65 end MISSING_ELSE 66 end MISSING_ELSE 67 end 68 69 // --- Data Path --- 70 always_ff @(posedge clk or negedge rst_n) begin 71 1/1 if (!rst_n) begin 72 1/1 for (int i=0; i<4; i++) begin 73 1/1 data_out[i] <= 8'h0; 74 1/1 valid_out[i] <= 1'b0; 75 end 76 1/1 collision_cnt <= 32'h0; 77 end else begin 78 // Default: clear valid bits 79 2/2 for (int i=0; i<4; i++) valid_out[i] <= 1'b0; 80 81 // Increment collision counter if both try to send 82 2/2 if (valid_a && valid_b) collision_cnt <= collision_cnt + 1; MISSING_ELSE 83 84 1/1 if (use_a) begin 85 1/1 data_out[addr_a] <= data_a; 86 1/1 valid_out[addr_a] <= 1'b1; 87 1/1 end else if (ready_b) begin 88 1/1 data_out[addr_b] <= data_b; 89 1/1 valid_out[addr_b] <= 1'b1; 90 end MISSING_ELSE

Cond Coverage for Module : dual_port_router
TotalCoveredPercent
Conditions131184.62
Logical131184.62
Non-Logical00
Event00

 LINE       40
 EXPRESSION (reg_en && reg_we)
             ---1--    ---2--
-1--2-Status
01Not Covered
10Covered
11Covered

 LINE       44
 EXPRESSION ((reg_addr == 4'b0) ? ctrl_reg : ((reg_addr == 4'h8) ? collision_cnt : 32'b0))
             ---------1--------
-1-Status
0Covered
1Covered

 LINE       44
 SUB-EXPRESSION ((reg_addr == 4'h8) ? collision_cnt : 32'b0)
                 ---------1--------
-1-Status
0Not Covered
1Covered

 LINE       55
 EXPRESSION (valid_a && valid_b)
             ---1---    ---2---
-1--2-Status
01Covered
10Covered
11Covered

 LINE       82
 EXPRESSION (valid_a && valid_b)
             ---1---    ---2---
-1--2-Status
01Covered
10Covered
11Covered

Toggle Coverage for Module : dual_port_router
TotalCoveredPercent
Totals 18 12 66.67
Total Bits 322 118 36.65
Total Bits 0->1 161 60 37.27
Total Bits 1->0 161 58 36.02

Ports 15 11 73.33
Port Bits 192 97 50.52
Port Bits 0->1 96 49 51.04
Port Bits 1->0 96 48 50.00

Signals 3 1 33.33
Signal Bits 130 21 16.15
Signal Bits 0->1 65 11 16.92
Signal Bits 1->0 65 10 15.38

Port Details
NameToggleToggle 1->0Toggle 0->1Direction
clk Yes Yes Yes INPUT
rst_n No No Yes INPUT
reg_addr[2:0] No No No INPUT
reg_addr[3] Yes Yes Yes INPUT
reg_wdata[1:0] Yes Yes Yes INPUT
reg_wdata[3:2] No No No INPUT
reg_wdata[4] Yes Yes Yes INPUT
reg_wdata[5] No No No INPUT
reg_wdata[9:6] Yes Yes Yes INPUT
reg_wdata[10] No No No INPUT
reg_wdata[11] Yes Yes Yes INPUT
reg_wdata[12] No No No INPUT
reg_wdata[14:13] Yes Yes Yes INPUT
reg_wdata[16:15] No No No INPUT
reg_wdata[17] Yes Yes Yes INPUT
reg_wdata[18] No No No INPUT
reg_wdata[19] Yes Yes Yes INPUT
reg_wdata[20] No No No INPUT
reg_wdata[21] Yes Yes Yes INPUT
reg_wdata[23:22] No No No INPUT
reg_wdata[24] Yes Yes Yes INPUT
reg_wdata[25] No No No INPUT
reg_wdata[26] Yes Yes Yes INPUT
reg_wdata[30:27] No No No INPUT
reg_wdata[31] Yes Yes Yes INPUT
reg_en Yes Yes Yes INPUT
reg_we Yes Yes Yes INPUT
reg_rdata[2:0] Yes Yes Yes OUTPUT
reg_rdata[6:3] No No No OUTPUT
reg_rdata[7] Yes Yes Yes OUTPUT
reg_rdata[31:8] No No No OUTPUT
data_a[7:0] Yes Yes Yes INPUT
addr_a[1:0] Yes Yes Yes INPUT
valid_a Yes Yes Yes INPUT
ready_a Yes Yes Yes OUTPUT
data_b[7:0] Yes Yes Yes INPUT
addr_b[1:0] Yes Yes Yes INPUT
valid_b Yes Yes Yes INPUT
ready_b Yes Yes Yes OUTPUT

Signal Details
NameToggleToggle 1->0Toggle 0->1
ctrl_reg[1:0] Yes Yes Yes
ctrl_reg[31:2] No No No
collision_cnt[6:0] Yes Yes Yes
collision_cnt[7] No No Yes
collision_cnt[31:8] No No No
use_a Yes Yes Yes

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%