?? monitor.v
字號:
module monitor(Gnt, Clk, chk_coverage);
input Clk, chk_coverage;
input [3:0]Gnt;
reg err_flag, pass_flag;
reg [4:0] chk_state;
reg [24:0] chk_trans;
event ERR_EVENT, PASS_EVENT;
initial
begin
chk_state <= 5'b0_0000;
chk_trans <= 25'h000_0000;
err_flag <= 1'b0;
pass_flag <= 1'b0;
end
always @(negedge Clk)
case(arb_tb.myarb.myfsm.CurrentState)
3'b000: chk_state <= chk_state | 5'b0_0001;
3'b001: chk_state <= chk_state | 5'b0_0010;
3'b010: chk_state <= chk_state | 5'b0_0100;
3'b011: chk_state <= chk_state | 5'b0_1000;
3'b100: chk_state <= chk_state | 5'b1_0000;
default:
begin
$display("******ERROR-- Error State!", $time);
->ERR_EVENT;
end
endcase
always @(posedge chk_coverage)
begin
if(chk_state !== 5'b11111)
begin
$display("******>>>>>>>>>>>>>>>>ERROR-- STATE UNCOVERABLE!", $time);
-> ERR_EVENT;
end
else
begin
$display(">>>>>>>>>>>>>>>>Pass-- STATE COVERAGE CORRECT, STATE=%b!", chk_state, $time);
-> PASS_EVENT;
end
end
always @(negedge Clk)
begin
#2;
case(arb_tb.myarb.myfsm.CurrentState)
3'b000: case(arb_tb.myarb.myfsm.NextState)
3'b000: chk_trans <= chk_trans | 25'h000_0001;
3'b001: chk_trans <= chk_trans | 25'h000_0002;
3'b010: chk_trans <= chk_trans | 25'h000_0004;
3'b011: chk_trans <= chk_trans | 25'h000_0008;
3'b100: chk_trans <= chk_trans | 25'h000_0010;
default: begin
$display("******ERROR-- ARB NEXT STATE ERROR!", $time);
->ERR_EVENT;
end
endcase
3'b001: case(arb_tb.myarb.myfsm.NextState)
3'b000: chk_trans <= chk_trans | 25'h000_0020;
3'b001: chk_trans <= chk_trans | 25'h000_0040;
3'b010: chk_trans <= chk_trans | 25'h000_0080;
3'b011: chk_trans <= chk_trans | 25'h000_0100;
3'b100: chk_trans <= chk_trans | 25'h000_0200;
default: begin
$display("******ERROR-- ARB NEXT STATE ERROR!", $time);
->ERR_EVENT;
end
endcase
3'b010: case(arb_tb.myarb.myfsm.NextState)
3'b000: chk_trans <= chk_trans | 25'h000_0400;
3'b001: chk_trans <= chk_trans | 25'h000_0800;
3'b010: chk_trans <= chk_trans | 25'h000_1000;
3'b011: chk_trans <= chk_trans | 25'h000_2000;
3'b100: chk_trans <= chk_trans | 25'h000_4000;
default: begin
$display("******ERROR-- ARB NEXT STATE ERROR!", $time);
->ERR_EVENT;
end
endcase
3'b011: case(arb_tb.myarb.myfsm.NextState)
3'b000: chk_trans <= chk_trans | 25'h000_8000;
3'b001: chk_trans <= chk_trans | 25'h001_0000;
3'b010: chk_trans <= chk_trans | 25'h002_0000;
3'b011: chk_trans <= chk_trans | 25'h004_0000;
3'b100: chk_trans <= chk_trans | 25'h008_0000;
default: begin
$display("******ERROR-- ARB NEXT STATE ERROR!", $time);
->ERR_EVENT;
end
endcase
3'b100: case(arb_tb.myarb.myfsm.NextState)
3'b000: chk_trans <= chk_trans | 25'h010_0000;
3'b001: chk_trans <= chk_trans | 25'h020_0000;
3'b010: chk_trans <= chk_trans | 25'h040_0000;
3'b011: chk_trans <= chk_trans | 25'h080_0000;
3'b100: chk_trans <= chk_trans | 25'h100_0000;
default: begin
$display("******ERROR-- ARB NEXT STATE ERROR!", $time);
->ERR_EVENT;
end
endcase
endcase
end
always @(posedge chk_coverage)
if(chk_trans !== 25'h1ff_ffff)
begin
$display("******>>>>>>>>>>>>>>>>ERROR-- ARB STATE TRANSITION UNCOVERABLE, TRANS=%b!", chk_trans, $time);
->ERR_EVENT;
end
else
begin
$display(">>>>>>>>>>>>>>>>PASS-- ARB STATE TRANSITION COVERAGE CORRECT, TRANS=%b!", chk_trans, $time);
->PASS_EVENT;
end
always @(negedge Clk)
case (arb_tb.myarb.myfsm.CurrentState)
3'b000: if((Gnt[0] !== 1'b0) || (Gnt[1] !== 1'b0) || (Gnt[2] !== 1'b0) || (Gnt[3] !== 1'b0))
begin
$display("******ERROR--GNT ERROR-- Gnt=%b", Gnt, $time);
->ERR_EVENT;
end
else
begin
$display("PASS--GNT CORRECT-- Gnt=%b", Gnt, $time);
->PASS_EVENT;
end
3'b001: if((Gnt[1] !== 1'b0) || (Gnt[2] !== 1'b0) || (Gnt[3] !== 1'b0))
begin
$display("******ERROR--GNT ERROR-- Gnt=%b", Gnt, $time);
->ERR_EVENT;
end
else
begin
$display("PASS--GNT CORRECT-- Gnt=%b", Gnt, $time);
->PASS_EVENT;
end
3'b010: if((Gnt[0] !== 1'b0) || (Gnt[2] !== 1'b0) || (Gnt[3] !== 1'b0))
begin
$display("******ERROR--GNT ERROR-- Gnt=%b", Gnt, $time);
->ERR_EVENT;
end
else
begin
$display("PASS--GNT CORRECT-- Gnt=%b", Gnt, $time);
->PASS_EVENT;
end
3'b011: if((Gnt[0] !== 1'b0) || (Gnt[1] !== 1'b0) || (Gnt[3] !== 1'b0))
begin
$display("******ERROR--GNT ERROR-- Gnt=%b", Gnt, $time);
->ERR_EVENT;
end
else
begin
$display("PASS--GNT CORRECT-- Gnt=%b", Gnt, $time);
->PASS_EVENT;
end
3'b100: if((Gnt[0] !== 1'b0) || (Gnt[1] !== 1'b0) || (Gnt[2] !== 1'b0))
begin
$display("******ERROR--GNT ERROR-- Gnt=%b", Gnt, $time);
->ERR_EVENT;
end
else
begin
$display("PASS--GNT CORRECT-- Gnt=%b", Gnt, $time);
->PASS_EVENT;
end
default: begin
$display("******ERROR-- INVALID STATE!-- Gnt=%b", Gnt, $time);
->ERR_EVENT;
end
endcase
always @(negedge Clk)
if((arb_tb.myarb.mycounter.gnt_done !== 1'b1) &&
((Gnt[0] !== 1'b0) || (Gnt[1] !== 1'b0) || (Gnt[2] !== 1'b0) || (Gnt[3] !== 1'b0)))
begin
$display("******ERROR-- GNT DEASSERATION ERROR!-- gnt_done=%b, Gnt=%b",
arb_tb.myarb.mycounter.gnt_done , Gnt, $time);
->ERR_EVENT;
end
else
begin
$display("PASS-- GNT DEASSERATION CORRECT!-- gnt_done=%b, Gnt=%b",
arb_tb.myarb.mycounter.gnt_done , Gnt, $time);
->PASS_EVENT;
end
always @(negedge Clk)
if(arb_tb.myarb.mycounter.gnt_done === 1'b1)
case(arb_tb.myarb.myfsm.CurrentState)
3'b001: if(Gnt[0] !== 1'b1)
begin
$display("******ERROR-- GNT0 ASSERATION ERROR!",$time);
->ERR_EVENT;
end
else
begin
$display("PASS-- GNT0 ASSERATION CORRECT!",$time);
->PASS_EVENT;
end
3'b010: if(Gnt[1] !== 1'b1)
begin
$display("******ERROR-- GNT1 ASSERATION ERROR!",$time);
->ERR_EVENT;
end
else
begin
$display("PASS-- GNT1 ASSERATION CORRECT!",$time);
->PASS_EVENT;
end
3'b011: if(Gnt[2] !== 1'b1)
begin
$display("******ERROR-- GNT2 ASSERATION ERROR!",$time);
->ERR_EVENT;
end
else
begin
$display("***PASS-- GNT2 ASSERATION CORRECT!",$time);
->PASS_EVENT;
end
3'b100: if(Gnt[3] !== 1'b1)
begin
$display("******ERROR-- GNT3 ASSERATION ERROR!",$time);
->ERR_EVENT;
end
else
begin
$display("PASS-- GNT3 ASSERATION CORRECT!",$time);
->PASS_EVENT;
end
// default: begin
// $display("******ERROR-- INVALID STATE %b !", arb_tb.myarb.myfsm.CurrentState, $time);
// ->ERR_EVENT;
// end
endcase
always @(ERR_EVENT)
begin
err_flag <= 1'b1;
#1;
err_flag <= 1'b0;
end
always @(PASS_EVENT)
begin
pass_flag <= 1'b1;
#1;
pass_flag <= 1'b0;
end
endmodule
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -