`timescale 1ns/1ps //`define DEBUG module top; parameter length = 34; parameter str = "%s"; reg [length*8-1:0] result, fmt; integer val = 1000; reg [31:0] eval, uval, zval; reg [63:0] hval, sval; real rval = 1234.567; wire net; time tm = 234567; realtime rtm = 2345.678; reg failed; `ifdef DEBUG integer lp; `endif assign (pull1, strong0) net = 1'b1; task check_result; input [length*8-1:0] result, value; input [80*8-1:0] message; if (result != value) begin $display("%0s", message); $display("Got :%s:", result); $display("Wanted :%s:", value); `ifdef DEBUG for (lp=0; lp", "%l in $swrite failed!"); $swrite(result, "%L"); check_result(result, "<%L>", "%L in $swrite failed!"); // %m $swrite(result, "%m"); check_result(result, "top", "%m in $swrite failed!"); $swrite(result, "%M"); check_result(result, "top", "%M in $swrite failed!"); $swrite(result, "%8m"); check_result(result, " top", "%m in $swrite failed!"); $swrite(result, "%-8m"); check_result(result, "top ", "%m in $swrite failed!"); // %s $swrite(result, "%s", "Hello"); check_result(result, "Hello", "%s in $swrite failed!"); $swrite(result, "%S", "Hello"); check_result(result, "Hello", "%S in $swrite failed!"); $swrite(result, str, "Hello"); check_result(result, "Hello", "%s in $swrite failed!"); $swrite(result, "%14s", "Hello"); check_result(result, " Hello", "%14s in $swrite failed!"); $swrite(result, "%-14s", "Hello"); check_result(result, "Hello ", "%-14s in $swrite failed!"); // %t $swrite(result, "%t", 0); check_result(result, " 0.0000 ps", "%t in $swrite failed!"); $swrite(result, "%t", 1); check_result(result, " 1000.0000 ps", "%t in $swrite failed!"); $swrite(result, "%T", 1); check_result(result, " 1000.0000 ps", "%T in $swrite failed!"); $swrite(result, "%t", 10_000); check_result(result, " 10000000.0000 ps", "%t in $swrite failed!"); $swrite(result, "%t", $time); check_result(result, " 1000.0000 ps", "%t $time in $swrite failed!"); // $swrite(result, "%t", $simtime); // check_result(result, " 1000.0000 ps", // "%t $simtime in $swrite failed!"); $swrite(result, "%-t", 1); check_result(result, "1000.0000 ps ", "%-t in $swrite failed!"); $swrite(result, "%15t", 1); check_result(result, " 1000.0000 ps", "%15t in $swrite failed!"); $swrite(result, "%-15t", 1); check_result(result, "1000.0000 ps ", "%-15t in $swrite failed!"); $swrite(result, "%15.1t", 1); check_result(result, " 1000.0 ps", "%15.1t in $swrite failed!"); // Real values. $swrite(result, "%t", 1.1); check_result(result, " 1100.0000 ps", "%t in $swrite failed!"); $swrite(result, "%t", $realtime); check_result(result, " 1000.0000 ps", "%t $realtime in $swrite failed!"); $swrite(result, "%-t", 1.1); check_result(result, "1100.0000 ps ", "%-t in $swrite failed!"); $swrite(result, "%15t", 1.1); check_result(result, " 1100.0000 ps", "%15t in $swrite failed!"); $swrite(result, "%-15t", 1.1); check_result(result, "1100.0000 ps ", "%-15t in $swrite failed!"); $swrite(result, "%15.1t", 1.1); check_result(result, " 1100.0 ps", "%15.1t in $swrite failed!"); // %u $swrite(result, "%u", eval); check_result(result, "\"", "%u in $swrite failed!"); $swrite(result, "%U", eval); check_result(result, "\"", "%U in $swrite failed!"); $swrite(result, "%u", sval); check_result(result, "Help me!", "%u in $swrite failed!"); // "Help me!" $swrite(result, "%u", hval); check_result(result, "Help me!", "%u in $swrite failed!"); // "Help" with check for correct x and z functionality. $swrite(result, "%u", uval); check_result(result, "Help", "%u in $swrite failed!"); // %v $swrite(result, "%v", net); check_result(result, "Pu1", "%v in $swrite failed!"); $swrite(result, "%V", net); check_result(result, "Pu1", "%V in $swrite failed!"); $swrite(result, "%14v", net); check_result(result, " Pu1", "%14v in $swrite failed!"); $swrite(result, "%-14v", net); check_result(result, "Pu1 ", "%-14v in $swrite failed!"); // %z $swrite(result, "%z", eval); check_result(result, "\"", "%z in $swrite failed!"); $swrite(result, "%Z", eval); check_result(result, "\"", "%Z in $swrite failed!"); // "Help me!", but because of NULLs we only get "Help" $swrite(result, "%z", hval); check_result(result, "Help", "%z in $swrite failed!"); // "Help me!" encoded using all the states! $swrite(result, "%z", zval); check_result(result, "Help me!", "%z in $swrite failed!"); // $sformat() $sformat(result, "%s", "Hello world"); check_result(result, "Hello world", "String in $sformat failed!"); $sformat(result, str, "Hello world"); check_result(result, "Hello world", "Parameter in $sformat failed!"); $sformat(result, fmt, "Hello world"); check_result(result, "Hello world", "Register in $sformat failed!"); $sformat(result, "%s"); check_result(result, "<%s>", "$sformat missing argument failed!"); $sformat(result, "%s", "Hello world", 2); check_result(result, "Hello world", "$sformat extra argument failed!"); if (!failed) $display("All tests passed."); end endmodule