SystemVerilog string methods


#1

Here’s a cheatsheet with SystemVerilog string method.

You can play with this example on EDA Playground

Strings in this example

  string s = "porcupine tree";
  string p = "pumpkin";
  string concat, mult;
  string c1, c2;

Concatenate, replicate, length and extract sub-string

    // concatenate
    concat = {p, " is my ", s};
    $display("concat   - %s", concat);
    /* Output: concat   - pumpkin is my porcupine tree */
    
    // replicate/multiply
    mult = {3{p}};
    $display("multiply - %s", mult);
    /* Output: multiply - pumpkinpumpkinpumpkin */
    
    // string length
    $display("length - %0d", concat.len());
    /* Output: length - 28 */
    
    // extract sub-string
    $display("substr = %s", s.substr(10, s.len()-1));
    // uppercase and lowercase
    $display("upper - '%0s' lower - '%0s'", p.toupper(), p.tolower());
    /* Output:  upper - 'PUMPKIN' lower - 'pumpkin' */

Compare strings

    // 3 types of compare
    c1 = "orange";
    c2 = "orAnge";
    
    // returns 0 if strings are not equal
    // returns 1 if strings are equal
    $display("== : %0d", (c1 == c2));
    /* Output: == : 0 */
    
    // C-style strcmp
    // returns 0 if strings are equal
    // returns > 0 if c1 > c2
    // returns < 0 if c1 < c2
    $display("compare : %0d", c1.compare(c2));
    // similar to above but case insensitive
    $display("icompare : %0d", c1.icompare(c2));
    /* Output:
     * compare : 32
     * icompare : 0
     */    

    // replace one character
    concat.putc(0, "d");
    $display("chars - %s", concat);
    /* Output: chars - dumpkin is my porcupine tree */

Converting between string data type and int, hex, bin, oct and real

Main thing to keep in mind is:

The conversion scans all leading digits and underscore characters ( _ ) and stops as soon as it encounters any other character or the end of the string. It returns zero if no digits were encountered.

/* Output: itoa 1024 */
s.itoa(1024);
$display("itoa %s", s);

/* Output: hextoa 400 */
s.hextoa(1024);
$display("hextoa %s", s);

/* Output: bintoa 10000000000 */
s.bintoa(1024);
$display("bintoa %s", s);

/* Output: octtoa 2000 */
s.octtoa(1024);
$display("octtoa %s", s);

/* Output: realtoa 1024.5 */
s.realtoa(1024.5);
$display("realtoa %s", s);
s = "1024";
/* Output: atoi 1024 */
$display("atoi %0d", s.atoi());

/* Output: atohex 0x1024 (4132)*/
$display("atohex 0x%0x (%0d)", s.atohex(), s.atohex());

/* Output: atobin 0b10 (2) */
$display("atobin 0b%0b (%0d)", s.atobin(), s.atobin());

/* Output: atooct 0o1024 (532) */
$display("atooct 0o%0o (%0d)", s.atooct(), s.atooct());

/* Output: atoreal 1024.500000 */
s = "1024.5";
$display("atoreal %0f", s.atoreal())