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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
// DESCRIPTION: Example top verilog file for vpassert program
// This file ONLY is placed into the Public Domain, for any use,
// without warranty, 2000-2012 by Wilson Snyder.
`timescale 1ns/1ns
module example;
pli pli (); // Put on highest level of your design
integer i;
`define ten 10
reg \escaped[10] ;
initial begin
$uinfo (0, "Welcome to a VPASSERTed file\n");
//
$uinfo (1, "Printed only at debug level %0d\n",1);
$uinfo (9, "Printed only at debug level %0d\n",9);
//
\escaped[10] = 1'b1;
$uassert (\escaped[10] , "Escaped not 1\n");
$uassert_info (\escaped[10] , "Escaped not 1\n");
//
i=0;
$uassert (1==1, "Why doesn't 1==1??\n");
$uassert (10==`ten, "Why doesn't 10==10??\n");
$uassert (/*comm
ent*/1==1,
//comment
/*com
ent*/"Why doesn't 1==1??\n"/*com
ent*/
);
//
i=3'b100; $uassert_amone(\i [2:0], "amone ok\n");
i=3'b010; $uassert_amone(i[2:0], "amone ok\n");
i=3'b001; $uassert_amone(i[2:0], "amone ok\n");
i=3'b000; $uassert_amone(i[2:0], "amone ok\n");
//i=3'b011; $uassert_amone(i[2:0], "amone error expected\n");
//i=3'b110; $uassert_amone(i[2:0], "amone error expected\n");
//
i=2'b10; $uassert_onehot(i[1:0], "onehot ok\n");
i=2'b01; $uassert_onehot(i[1:0], "onehot ok\n");
i=2'b10; $uassert_onehot(i[1],i[0], "onehot ok\n");
i=2'b10; $uassert_onehot({i[1],i[0]}, "onehot ok\n");
//i=2'b11; $uassert_onehot(i[2:0], "onehot error expected\n");
//i=2'b00; $uassert_onehot(i[2:0], "onehot error expected\n");
end
// Test assertions within case statements
initial begin
i=3'b100;
casez (i)
3'b100: ;
3'b000: $stop;
3'b010: $uerror("Why?\n");
default: $stop;
endcase
if ($time > 1000) $stop;
end
// Example of request/grant handshake
reg clk;
reg bus_req; // Request a transaction, single cycle pulse
reg bus_ack; // Acknowledged transaction, single cycle pulse
reg [31:0] bus_data;
initial begin
// Reset signals
bus_req = 1'b0;
bus_ack = 1'b0;
bus_data = 1'b0;
// Assert a request
@ (posedge clk) ;
bus_req = 1'b1;
bus_data = 32'hfeed;
// Wait for ack
@ (posedge clk) ;
bus_req = 1'b0;
// Send ack
@ (posedge clk) ;
bus_ack = 1'b1;
// Next request could be here
@ (posedge clk) ;
bus_ack = 1'b0;
end
always @ (posedge clk) begin
$uassert_req_ack (bus_req,
bus_ack /*COMMENT*/,
bus_data);
end
// Overall control loop
initial clk = 1'b0;
initial forever begin
#1;
i = i + 1;
clk = !clk;
if (i==20) $uwarn (0, "Don't know what to do next!\n");
if (i==22) $uerror (0, "Guess I'll error out!\n");
end
// Moved clock asserts
always @* begin
if (i==19) $uwarn_clk (clk,"Called at next edge (1 of 2)\n");
if (i==18) $ucover_clk (clk,"example_cover_label");
$ucover_foreach_clk(clk, "foreach_label", "27:3,1,0", (i[$ui]));
end
// Meta coverage disables
initial begin
// vp_coverage_off
if (0) begin end // cover off'ed
// vp_coverage_on
end
// Ifdef based disables
initial begin
`ifndef NEVER
`ifdef SYNTHESIS
if (1) begin end // cover on
`elsif SYNTHESIS
if (1) begin end // cover on
`else
if (1) begin end // cover off'ed
`endif
`ifndef SYNTHESIS
if (1) begin end // cover off'ed
`else
if (1) begin end // cover on
`endif
`endif
end
endmodule
|